Merge pull request #541 from OpenSkywalking/fix/h2bug

Fix/h2bug
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricH2DAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricH2DAO.java
index 9d0e8f7..e6e735e 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricH2DAO.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/cpu/dao/CpuMetricH2DAO.java
@@ -18,6 +18,8 @@
 
 package org.skywalking.apm.collector.agentjvm.worker.cpu.dao;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.jvm.CpuMetricTable;
@@ -28,14 +30,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author peng-yongsheng, clevertension
  */
 public class CpuMetricH2DAO extends H2DAO implements ICpuMetricDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(CpuMetricH2DAO.class);
+
     @Override public Data get(String id, DataDefine dataDefine) {
         return null;
     }
@@ -43,7 +43,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(CpuMetricTable.COLUMN_ID, data.getDataString(0));
         source.put(CpuMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
         source.put(CpuMetricTable.COLUMN_USAGE_PERCENT, data.getDataDouble(0));
         source.put(CpuMetricTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricH2DAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricH2DAO.java
index 3259db1..8657efc 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricH2DAO.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/gc/dao/GCMetricH2DAO.java
@@ -20,7 +20,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.jvm.GCMetricTable;
@@ -40,7 +39,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(GCMetricTable.COLUMN_ID, data.getDataString(0));
         source.put(GCMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
         source.put(GCMetricTable.COLUMN_PHRASE, data.getDataInteger(1));
         source.put(GCMetricTable.COLUMN_COUNT, data.getDataLong(0));
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/heartbeat/dao/InstanceHeartBeatH2DAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/heartbeat/dao/InstanceHeartBeatH2DAO.java
index 65c05d1..a249c29 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/heartbeat/dao/InstanceHeartBeatH2DAO.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/heartbeat/dao/InstanceHeartBeatH2DAO.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.framework.UnexpectedException;
@@ -44,10 +43,11 @@
 public class InstanceHeartBeatH2DAO extends H2DAO implements IInstanceHeartBeatDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(InstanceHeartBeatEsDAO.class);
     private static final String GET_INSTANCE_HEARTBEAT_SQL = "select * from {0} where {1} = ?";
+
     @Override public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
         String sql = SqlBuilder.buildSql(GET_INSTANCE_HEARTBEAT_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_INSTANCE_ID);
-        Object[] params = new Object[]{id};
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -69,7 +69,7 @@
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
         source.put(InstanceTable.COLUMN_HEARTBEAT_TIME, data.getDataLong(0));
-        String sql = SqlBuilder.buildBatchUpdateSql(InstanceTable.TABLE, source.keySet(), InstanceTable.COLUMN_APPLICATION_ID);
+        String sql = SqlBuilder.buildBatchUpdateSql(InstanceTable.TABLE, source.keySet(), InstanceTable.COLUMN_INSTANCE_ID);
         entity.setSql(sql);
         List<Object> params = new ArrayList<>(source.values());
         params.add(data.getDataString(0));
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memory/dao/MemoryMetricH2DAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memory/dao/MemoryMetricH2DAO.java
index 8ce0882..eb4c823 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memory/dao/MemoryMetricH2DAO.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memory/dao/MemoryMetricH2DAO.java
@@ -20,7 +20,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.jvm.MemoryMetricTable;
@@ -40,7 +39,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(MemoryMetricTable.COLUMN_ID, data.getDataString(0));
         source.put(MemoryMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0));
         source.put(MemoryMetricTable.COLUMN_IS_HEAP, data.getDataBoolean(0));
         source.put(MemoryMetricTable.COLUMN_INIT, data.getDataLong(0));
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricH2DAO.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricH2DAO.java
index 82b54bb..c97c9f5 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricH2DAO.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/worker/memorypool/dao/MemoryPoolMetricH2DAO.java
@@ -20,7 +20,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.jvm.MemoryPoolMetricTable;
@@ -40,7 +39,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(MemoryPoolMetricTable.COLUMN_ID, data.getDataString(0));
         source.put(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
         source.put(MemoryPoolMetricTable.COLUMN_POOL_TYPE, data.getDataInteger(1));
         source.put(MemoryPoolMetricTable.COLUMN_INIT, data.getDataLong(0));
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationH2TableDefine.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationH2TableDefine.java
index e7e4b60..8540549 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationH2TableDefine.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/ApplicationH2TableDefine.java
@@ -18,6 +18,7 @@
 
 package org.skywalking.apm.collector.agentregister.worker.application;
 
+import org.skywalking.apm.collector.storage.define.global.GlobalTraceTable;
 import org.skywalking.apm.collector.storage.define.register.ApplicationTable;
 import org.skywalking.apm.collector.storage.h2.define.H2ColumnDefine;
 import org.skywalking.apm.collector.storage.h2.define.H2TableDefine;
@@ -32,6 +33,7 @@
     }
 
     @Override public void initialize() {
+        addColumn(new H2ColumnDefine(GlobalTraceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(ApplicationTable.COLUMN_APPLICATION_CODE, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(ApplicationTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
     }
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java
index 1e4e299..c830f5c 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationEsDAO.java
@@ -47,7 +47,7 @@
     @Override public void save(ApplicationDataDefine.Application application) {
         logger.debug("save application register info, application id: {}, application code: {}", application.getApplicationId(), application.getApplicationCode());
         ElasticSearchClient client = getClient();
-        Map<String, Object> source = new HashMap();
+        Map<String, Object> source = new HashMap<>();
         source.put(ApplicationTable.COLUMN_APPLICATION_CODE, application.getApplicationCode());
         source.put(ApplicationTable.COLUMN_APPLICATION_ID, application.getApplicationId());
 
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java
index b4e90a6..3ce9c1d 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/application/dao/ApplicationH2DAO.java
@@ -18,6 +18,8 @@
 
 package org.skywalking.apm.collector.agentregister.worker.application.dao;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine;
@@ -32,7 +34,6 @@
  */
 public class ApplicationH2DAO extends H2DAO implements IApplicationDAO {
     private final Logger logger = LoggerFactory.getLogger(ApplicationH2DAO.class);
-    private static final String INSERT_APPLICATION_SQL = "insert into {0}({1}, {2}) values(?, ?)";
 
     @Override
     public int getMaxApplicationId() {
@@ -47,9 +48,14 @@
     @Override
     public void save(ApplicationDataDefine.Application application) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(INSERT_APPLICATION_SQL, ApplicationTable.TABLE, ApplicationTable.COLUMN_APPLICATION_ID,
-            ApplicationTable.COLUMN_APPLICATION_CODE);
-        Object[] params = new Object[] {application.getApplicationId(), application.getApplicationCode()};
+
+        Map<String, Object> source = new HashMap<>();
+        source.put(ApplicationTable.COLUMN_ID, application.getApplicationId());
+        source.put(ApplicationTable.COLUMN_APPLICATION_CODE, application.getApplicationCode());
+        source.put(ApplicationTable.COLUMN_APPLICATION_ID, application.getApplicationId());
+
+        String sql = SqlBuilder.buildBatchInsertSql(ApplicationTable.TABLE, source.keySet());
+        Object[] params = source.values().toArray(new Object[0]);
         try {
             client.execute(sql, params);
         } catch (H2ClientException e) {
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/InstanceH2TableDefine.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/InstanceH2TableDefine.java
index 1c8bcc6..70b9224 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/InstanceH2TableDefine.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/InstanceH2TableDefine.java
@@ -32,6 +32,7 @@
     }
 
     @Override public void initialize() {
+        addColumn(new H2ColumnDefine(InstanceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_AGENT_UUID, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(InstanceTable.COLUMN_REGISTER_TIME, H2ColumnDefine.Type.Bigint.name()));
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java
index 737c425..32bf709 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/instance/dao/InstanceH2DAO.java
@@ -38,7 +38,7 @@
     private final Logger logger = LoggerFactory.getLogger(InstanceH2DAO.class);
 
     private static final String GET_INSTANCE_ID_SQL = "select {0} from {1} where {2} = ? and {3} = ?";
-    private static final String UPDATE_HEARTBEAT_TIME_SQL = "updatte {0} set {1} = ? where {2} = ?";
+    private static final String UPDATE_HEARTBEAT_TIME_SQL = "update {0} set {1} = ? where {2} = ?";
 
     @Override public int getInstanceId(int applicationId, String agentUUID) {
         logger.info("get the application id with application id = {}, agentUUID = {}", applicationId, agentUUID);
@@ -67,6 +67,7 @@
     @Override public void save(InstanceDataDefine.Instance instance) {
         H2Client client = getClient();
         Map<String, Object> source = new HashMap<>();
+        source.put(InstanceTable.COLUMN_ID, instance.getId());
         source.put(InstanceTable.COLUMN_INSTANCE_ID, instance.getInstanceId());
         source.put(InstanceTable.COLUMN_APPLICATION_ID, instance.getApplicationId());
         source.put(InstanceTable.COLUMN_AGENT_UUID, instance.getAgentUUID());
@@ -85,7 +86,7 @@
     @Override public void updateHeartbeatTime(int instanceId, long heartbeatTime) {
         H2Client client = getClient();
         String sql = SqlBuilder.buildSql(UPDATE_HEARTBEAT_TIME_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME,
-            InstanceTable.COLUMN_INSTANCE_ID);
+            InstanceTable.COLUMN_ID);
         Object[] params = new Object[] {heartbeatTime, instanceId};
         try {
             client.execute(sql, params);
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameH2TableDefine.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameH2TableDefine.java
index 6dea896..fa4343d 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameH2TableDefine.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/ServiceNameH2TableDefine.java
@@ -32,6 +32,7 @@
     }
 
     @Override public void initialize() {
+        addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
         addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SERVICE_NAME, H2ColumnDefine.Type.Varchar.name()));
         addColumn(new H2ColumnDefine(ServiceNameTable.COLUMN_SERVICE_ID, H2ColumnDefine.Type.Int.name()));
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java
index 0aaa739..c82ba98 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameEsDAO.java
@@ -47,7 +47,7 @@
     @Override public void save(ServiceNameDataDefine.ServiceName serviceName) {
         logger.debug("save service name register info, application id: {}, service name: {}", serviceName.getApplicationId(), serviceName.getServiceName());
         ElasticSearchClient client = getClient();
-        Map<String, Object> source = new HashMap();
+        Map<String, Object> source = new HashMap<>();
         source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId());
         source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId());
         source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName());
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java
index e839e5d..ef36d20 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/worker/servicename/dao/ServiceNameH2DAO.java
@@ -50,6 +50,7 @@
         logger.debug("save service name register info, application id: {}, service name: {}", serviceName.getApplicationId(), serviceName.getServiceName());
         H2Client client = getClient();
         Map<String, Object> source = new HashMap<>();
+        source.put(ServiceNameTable.COLUMN_ID, serviceName.getId());
         source.put(ServiceNameTable.COLUMN_SERVICE_ID, serviceName.getServiceId());
         source.put(ServiceNameTable.COLUMN_APPLICATION_ID, serviceName.getApplicationId());
         source.put(ServiceNameTable.COLUMN_SERVICE_NAME, serviceName.getServiceName());
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/dao/GlobalTraceH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/dao/GlobalTraceH2DAO.java
index b1c283a..5852e58 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/dao/GlobalTraceH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/global/dao/GlobalTraceH2DAO.java
@@ -18,6 +18,8 @@
 
 package org.skywalking.apm.collector.agentstream.worker.global.dao;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.skywalking.apm.collector.core.framework.UnexpectedException;
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
@@ -29,14 +31,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author peng-yongsheng, clevertension
  */
 public class GlobalTraceH2DAO extends H2DAO implements IGlobalTraceDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(GlobalTraceH2DAO.class);
+
     @Override public Data get(String id, DataDefine dataDefine) {
         throw new UnexpectedException("There is no need to merge stream data with database data.");
     }
@@ -48,7 +48,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(GlobalTraceTable.COLUMN_ID, data.getDataString(0));
         source.put(GlobalTraceTable.COLUMN_SEGMENT_ID, data.getDataString(1));
         source.put(GlobalTraceTable.COLUMN_GLOBAL_TRACE_ID, data.getDataString(2));
         source.put(GlobalTraceTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceH2DAO.java
index 668c43c..93c9651 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/instance/performance/dao/InstPerformanceH2DAO.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.stream.Data;
@@ -43,10 +42,11 @@
 public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(InstPerformanceH2DAO.class);
     private static final String GET_SQL = "select * from {0} where {1} = ?";
+
     @Override public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SQL, InstPerformanceTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_SQL, InstPerformanceTable.TABLE, InstPerformanceTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -62,10 +62,11 @@
         }
         return null;
     }
+
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(InstPerformanceTable.COLUMN_ID, data.getDataString(0));
         source.put(InstPerformanceTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
         source.put(InstPerformanceTable.COLUMN_INSTANCE_ID, data.getDataInteger(1));
         source.put(InstPerformanceTable.COLUMN_CALLS, data.getDataInteger(2));
@@ -76,6 +77,7 @@
         entity.setParams(source.values().toArray(new Object[0]));
         return entity;
     }
+
     @Override public H2SqlEntity prepareBatchUpdate(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
@@ -85,7 +87,7 @@
         source.put(InstPerformanceTable.COLUMN_COST_TOTAL, data.getDataLong(0));
         source.put(InstPerformanceTable.COLUMN_TIME_BUCKET, data.getDataLong(1));
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(InstPerformanceTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(InstPerformanceTable.TABLE, source.keySet(), InstPerformanceTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentH2DAO.java
index bbc4ed0..eff769b 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/dao/NodeComponentH2DAO.java
@@ -24,13 +24,11 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.node.NodeComponentTable;
-import org.skywalking.apm.collector.storage.define.serviceref.ServiceReferenceTable;
 import org.skywalking.apm.collector.storage.h2.SqlBuilder;
 import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
 import org.skywalking.apm.collector.storage.h2.define.H2SqlEntity;
@@ -48,8 +46,8 @@
     @Override
     public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SQL, ServiceReferenceTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_SQL, NodeComponentTable.TABLE, NodeComponentTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -70,7 +68,7 @@
     public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(NodeComponentTable.COLUMN_ID, data.getDataString(0));
         source.put(NodeComponentTable.COLUMN_COMPONENT_ID, data.getDataInteger(0));
         source.put(NodeComponentTable.COLUMN_COMPONENT_NAME, data.getDataString(1));
         source.put(NodeComponentTable.COLUMN_PEER_ID, data.getDataInteger(1));
@@ -93,7 +91,7 @@
         source.put(NodeComponentTable.COLUMN_PEER, data.getDataString(2));
         source.put(NodeComponentTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(NodeComponentTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(NodeComponentTable.TABLE, source.keySet(), NodeComponentTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingH2DAO.java
index 1870e2e..1e25502 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/dao/NodeMappingH2DAO.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.agentstream.worker.node.component.dao.NodeComponentH2DAO;
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
@@ -44,10 +43,11 @@
 public class NodeMappingH2DAO extends H2DAO implements INodeMappingDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(NodeComponentH2DAO.class);
     private static final String GET_SQL = "select * from {0} where {1} = ?";
+
     @Override public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SQL, NodeMappingTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_SQL, NodeMappingTable.TABLE, NodeMappingTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -62,10 +62,11 @@
         }
         return null;
     }
+
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(NodeMappingTable.COLUMN_ID, data.getDataString(0));
         source.put(NodeMappingTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
         source.put(NodeMappingTable.COLUMN_ADDRESS_ID, data.getDataInteger(1));
         source.put(NodeMappingTable.COLUMN_ADDRESS, data.getDataString(1));
@@ -76,6 +77,7 @@
         entity.setParams(source.values().toArray(new Object[0]));
         return entity;
     }
+
     @Override public H2SqlEntity prepareBatchUpdate(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
@@ -84,7 +86,7 @@
         source.put(NodeMappingTable.COLUMN_ADDRESS, data.getDataString(1));
         source.put(NodeMappingTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(NodeMappingTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(NodeMappingTable.TABLE, source.keySet(), NodeMappingTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java
index 9f79d19..2a0e899 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/dao/NodeReferenceH2DAO.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.stream.Data;
@@ -43,10 +42,11 @@
 public class NodeReferenceH2DAO extends H2DAO implements INodeReferenceDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(NodeReferenceH2DAO.class);
     private static final String GET_SQL = "select * from {0} where {1} = ?";
+
     @Override public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SQL, NodeReferenceTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_SQL, NodeReferenceTable.TABLE, NodeReferenceTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -67,10 +67,11 @@
         }
         return null;
     }
+
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(NodeReferenceTable.COLUMN_ID, data.getDataString(0));
         source.put(NodeReferenceTable.COLUMN_FRONT_APPLICATION_ID, data.getDataInteger(0));
         source.put(NodeReferenceTable.COLUMN_BEHIND_APPLICATION_ID, data.getDataInteger(1));
         source.put(NodeReferenceTable.COLUMN_BEHIND_PEER, data.getDataString(1));
@@ -87,6 +88,7 @@
         entity.setParams(source.values().toArray(new Object[0]));
         return entity;
     }
+
     @Override public H2SqlEntity prepareBatchUpdate(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
@@ -101,7 +103,7 @@
         source.put(NodeReferenceTable.COLUMN_ERROR, data.getDataInteger(7));
         source.put(NodeReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(NodeReferenceTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(NodeReferenceTable.TABLE, source.keySet(), NodeReferenceTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/dao/SegmentCostH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/dao/SegmentCostH2DAO.java
index 4ef411b..82c0a10 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/dao/SegmentCostH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/dao/SegmentCostH2DAO.java
@@ -18,6 +18,8 @@
 
 package org.skywalking.apm.collector.agentstream.worker.segment.cost.dao;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.skywalking.apm.collector.core.stream.Data;
 import org.skywalking.apm.collector.storage.define.DataDefine;
 import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable;
@@ -28,22 +30,21 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * @author peng-yongsheng, clevertension
  */
 public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(SegmentCostH2DAO.class);
+
     @Override public Data get(String id, DataDefine dataDefine) {
         return null;
     }
+
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         logger.debug("segment cost prepareBatchInsert, id: {}", data.getDataString(0));
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(SegmentCostTable.COLUMN_ID, data.getDataString(0));
         source.put(SegmentCostTable.COLUMN_SEGMENT_ID, data.getDataString(1));
         source.put(SegmentCostTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
         source.put(SegmentCostTable.COLUMN_SERVICE_NAME, data.getDataString(2));
@@ -59,6 +60,7 @@
         entity.setParams(source.values().toArray(new Object[0]));
         return entity;
     }
+
     @Override public H2SqlEntity prepareBatchUpdate(Data data) {
         return null;
     }
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java
index 63701e0..51dc2d9 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/origin/dao/SegmentH2DAO.java
@@ -44,7 +44,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         Map<String, Object> source = new HashMap<>();
         H2SqlEntity entity = new H2SqlEntity();
-        source.put("id", data.getDataString(0));
+        source.put(SegmentTable.COLUMN_ID, data.getDataString(0));
         source.put(SegmentTable.COLUMN_DATA_BINARY, data.getDataBytes(0));
         logger.debug("segment source: {}", source.toString());
 
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java
index 973a650..dc9bf95 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/service/entry/dao/ServiceEntryH2DAO.java
@@ -45,7 +45,7 @@
 
     @Override public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SERVICE_ENTRY_SQL, ServiceEntryTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_SERVICE_ENTRY_SQL, ServiceEntryTable.TABLE, ServiceEntryTable.COLUMN_ID);
         Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
@@ -66,7 +66,7 @@
     @Override public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(ServiceEntryTable.COLUMN_ID, data.getDataString(0));
         source.put(ServiceEntryTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
         source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(1));
         source.put(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1));
@@ -87,7 +87,7 @@
         source.put(ServiceEntryTable.COLUMN_REGISTER_TIME, data.getDataLong(0));
         source.put(ServiceEntryTable.COLUMN_NEWEST_TIME, data.getDataLong(1));
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(ServiceEntryTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(ServiceEntryTable.TABLE, source.keySet(), ServiceEntryTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java
index 7ed9424..fecd147 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/dao/ServiceReferenceH2DAO.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.stream.Data;
@@ -43,11 +42,12 @@
 public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO, IPersistenceDAO<H2SqlEntity, H2SqlEntity> {
     private final Logger logger = LoggerFactory.getLogger(ServiceReferenceH2DAO.class);
     private static final String GET_SQL = "select * from {0} where {1} = ?";
+
     @Override
     public Data get(String id, DataDefine dataDefine) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_SQL, ServiceReferenceTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_SQL, ServiceReferenceTable.TABLE, ServiceReferenceTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 Data data = dataDefine.build(id);
@@ -77,7 +77,7 @@
     public H2SqlEntity prepareBatchInsert(Data data) {
         H2SqlEntity entity = new H2SqlEntity();
         Map<String, Object> source = new HashMap<>();
-        source.put("id", data.getDataString(0));
+        source.put(ServiceReferenceTable.COLUMN_ID, data.getDataString(0));
         source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, data.getDataInteger(0));
         source.put(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, data.getDataString(1));
         source.put(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID, data.getDataInteger(1));
@@ -119,7 +119,7 @@
         source.put(ServiceReferenceTable.COLUMN_TIME_BUCKET, data.getDataLong(7));
 
         String id = data.getDataString(0);
-        String sql = SqlBuilder.buildBatchUpdateSql(ServiceReferenceTable.TABLE, source.keySet(), "id");
+        String sql = SqlBuilder.buildBatchUpdateSql(ServiceReferenceTable.TABLE, source.keySet(), ServiceReferenceTable.COLUMN_ID);
         entity.setSql(sql);
         List<Object> values = new ArrayList<>(source.values());
         values.add(id);
diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml
index e6d654a..8a4f7b3 100644
--- a/apm-collector/apm-collector-boot/src/main/resources/application.yml
+++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml
@@ -33,4 +33,8 @@
 #    cluster_transport_sniffer: true
 #    cluster_nodes: localhost:9300
 #    index_shards_number: 2
-#    index_replicas_number: 0
\ No newline at end of file
+#    index_replicas_number: 0
+#storage:
+#  h2:
+#    url: jdbc:h2:tcp://localhost/~/test
+#    user_name: sa
\ No newline at end of file
diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/SqlBuilder.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/SqlBuilder.java
index f3944030..5d36153 100644
--- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/SqlBuilder.java
+++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/h2/SqlBuilder.java
@@ -23,21 +23,19 @@
 import java.util.Set;
 
 public class SqlBuilder {
-    public static final String buildSql(String sql, Object ... args) {
+    public static String buildSql(String sql, Object... args) {
         return MessageFormat.format(sql, args);
     }
 
-    public static final String buildSql(String sql, List<Object> args) {
+    public static String buildSql(String sql, List<Object> args) {
         MessageFormat messageFormat = new MessageFormat(sql);
         return messageFormat.format(args.toArray(new Object[0]));
     }
 
-    public static final String buildBatchInsertSql(String tableName, Set<String> columnNames) {
+    public static String buildBatchInsertSql(String tableName, Set<String> columnNames) {
         StringBuilder sb = new StringBuilder("insert into ");
         sb.append(tableName).append("(");
-        columnNames.forEach((columnName) -> {
-            sb.append(columnName).append(",");
-        });
+        columnNames.forEach((columnName) -> sb.append(columnName).append(","));
         sb.delete(sb.length() - 1, sb.length());
         sb.append(") values(");
         for (int i = 0; i < columnNames.size(); i++) {
@@ -48,12 +46,10 @@
         return sb.toString();
     }
 
-    public static final String buildBatchUpdateSql(String tableName, Set<String> columnNames, String whereClauseName) {
+    public static String buildBatchUpdateSql(String tableName, Set<String> columnNames, String whereClauseName) {
         StringBuilder sb = new StringBuilder("update ");
         sb.append(tableName).append(" set ");
-        columnNames.forEach((columnName) -> {
-            sb.append(columnName).append("=?,");
-        });
+        columnNames.forEach((columnName) -> sb.append(columnName).append("=?,"));
         sb.delete(sb.length() - 1, sb.length());
         sb.append(" where ").append(whereClauseName).append("=?");
         return sb.toString();
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricH2DAO.java
index 43fa78f..1007271 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/CpuMetricH2DAO.java
@@ -18,11 +18,11 @@
 
 package org.skywalking.apm.collector.ui.dao;
 
+import com.google.gson.JsonArray;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.util.Const;
@@ -33,20 +33,18 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonArray;
-
 /**
  * @author peng-yongsheng, clevertension
  */
 public class CpuMetricH2DAO extends H2DAO implements ICpuMetricDAO {
     private final Logger logger = LoggerFactory.getLogger(InstanceH2DAO.class);
     private static final String GET_CPU_METRIC_SQL = "select * from {0} where {1} = ?";
-    private static final String GET_CPU_METRICS_SQL = "select * from {0} where {1} in (";
+
     @Override public int getMetric(int instanceId, long timeBucket) {
         String id = timeBucket + Const.ID_SPLIT + instanceId;
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, CpuMetricTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, CpuMetricTable.TABLE, CpuMetricTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 return rs.getInt(CpuMetricTable.COLUMN_USAGE_PERCENT);
@@ -59,7 +57,7 @@
 
     @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_CPU_METRICS_SQL, CpuMetricTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, CpuMetricTable.TABLE, CpuMetricTable.COLUMN_ID);
 
         long timeBucket = startTimeBucket;
         List<String> idList = new ArrayList<>();
@@ -70,24 +68,20 @@
         }
         while (timeBucket <= endTimeBucket);
 
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
-
         JsonArray metrics = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                double cpuUsed = rs.getDouble(CpuMetricTable.COLUMN_USAGE_PERCENT);
-                metrics.add((int)(cpuUsed * 100));
+        idList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new String[] {id})) {
+                if (rs.next()) {
+                    double cpuUsed = rs.getDouble(CpuMetricTable.COLUMN_USAGE_PERCENT);
+                    metrics.add((int)(cpuUsed * 100));
+                } else {
+                    metrics.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
             }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
+
         return metrics;
     }
 }
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java
index 5464f07..8a8fe00 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricH2DAO.java
@@ -18,11 +18,12 @@
 
 package org.skywalking.apm.collector.ui.dao;
 
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.util.Const;
@@ -34,9 +35,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-
 /**
  * @author peng-yongsheng, clevertension
  */
@@ -44,12 +42,13 @@
     private final Logger logger = LoggerFactory.getLogger(GCMetricH2DAO.class);
     private static final String GET_GC_COUNT_SQL = "select {1}, sum({0}) as cnt, {1} from {2} where {3} = ? and {4} in (";
     private static final String GET_GC_METRIC_SQL = "select * from {0} where {1} = ?";
-    private static final String GET_GC_METRICS_SQL = "select * from {0} where {1} in (";
+
     @Override public GCCount getGCCount(long[] timeBuckets, int instanceId) {
         GCCount gcCount = new GCCount();
         H2Client client = getClient();
         String sql = GET_GC_COUNT_SQL;
         StringBuilder builder = new StringBuilder();
+
         for (int i = 0; i < timeBuckets.length; i++) {
             builder.append("?,");
         }
@@ -57,7 +56,7 @@
         builder.append(")");
         sql = sql + builder + " group by {1}";
         sql = SqlBuilder.buildSql(sql, GCMetricTable.COLUMN_COUNT, GCMetricTable.COLUMN_PHRASE,
-                GCMetricTable.TABLE, GCMetricTable.COLUMN_INSTANCE_ID, "id");
+            GCMetricTable.TABLE, GCMetricTable.COLUMN_INSTANCE_ID, GCMetricTable.COLUMN_ID);
         Object[] params = new Object[timeBuckets.length + 1];
         for (int i = 0; i < timeBuckets.length; i++) {
             params[i + 1] = timeBuckets[i];
@@ -83,9 +82,9 @@
     @Override public JsonObject getMetric(int instanceId, long timeBucket) {
         JsonObject response = new JsonObject();
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_GC_METRIC_SQL, GCMetricTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_GC_METRIC_SQL, GCMetricTable.TABLE, GCMetricTable.COLUMN_ID);
         String youngId = timeBucket + Const.ID_SPLIT + GCPhrase.NEW_VALUE + instanceId;
-        Object[] params = new Object[]{youngId};
+        Object[] params = new Object[] {youngId};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 response.addProperty("ygc", rs.getInt(GCMetricTable.COLUMN_COUNT));
@@ -94,7 +93,7 @@
             logger.error(e.getMessage(), e);
         }
         String oldId = timeBucket + Const.ID_SPLIT + GCPhrase.OLD_VALUE + instanceId;
-        Object[] params1 = new Object[]{oldId};
+        Object[] params1 = new Object[] {oldId};
         try (ResultSet rs = client.executeQuery(sql, params1)) {
             if (rs.next()) {
                 response.addProperty("ogc", rs.getInt(GCMetricTable.COLUMN_COUNT));
@@ -109,67 +108,47 @@
     @Override public JsonObject getMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
         JsonObject response = new JsonObject();
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_GC_METRICS_SQL, GCMetricTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_GC_METRIC_SQL, GCMetricTable.TABLE, GCMetricTable.COLUMN_ID);
         long timeBucket = startTimeBucket;
-        List<String> idList = new ArrayList<>();
+        List<String> youngIdsList = new ArrayList<>();
         do {
             timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
             String youngId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE;
-            idList.add(youngId);
+            youngIdsList.add(youngId);
         }
         while (timeBucket <= endTimeBucket);
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
 
         JsonArray youngArray = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                youngArray.add(rs.getInt(GCMetricTable.COLUMN_COUNT));
-            }
-            if (youngArray.size() == 0) {
-                youngArray.add(0);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        forEachRs(client, youngIdsList, sql, youngArray);
         response.add("ygc", youngArray);
-        List<String> idList1 = new ArrayList<>();
+
+        List<String> oldIdsList = new ArrayList<>();
         timeBucket = startTimeBucket;
         do {
             timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
             String oldId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE;
-            idList1.add(oldId);
+            oldIdsList.add(oldId);
         }
         while (timeBucket <= endTimeBucket);
-        String sql1 = SqlBuilder.buildSql(GET_GC_METRICS_SQL, GCMetricTable.TABLE, "id");
-        StringBuilder builder1 = new StringBuilder();
-        for (int i = 0; i < idList1.size(); i++) {
-            builder1.append("?,");
-        }
-        builder1.delete(builder1.length() - 1, builder1.length());
-        builder1.append(")");
-        sql1 = sql1 + builder1;
-        Object[] params1 = idList.toArray(new String[0]);
-        JsonArray oldArray = new JsonArray();
 
-        try (ResultSet rs = client.executeQuery(sql1, params1)) {
-            while (rs.next()) {
-                oldArray.add(rs.getInt(GCMetricTable.COLUMN_COUNT));
-            }
-            if (oldArray.size() == 0) {
-                oldArray.add(0);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        JsonArray oldArray = new JsonArray();
+        forEachRs(client, oldIdsList, sql, oldArray);
         response.add("ogc", oldArray);
 
         return response;
     }
+
+    private void forEachRs(H2Client client, List<String> idsList, String sql, JsonArray metricArray) {
+        idsList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new String[] {id})) {
+                if (rs.next()) {
+                    metricArray.add(rs.getInt(GCMetricTable.COLUMN_COUNT));
+                } else {
+                    metricArray.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
+            }
+        });
+    }
 }
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java
index 6b277fe..28f8fa2 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java
@@ -18,11 +18,11 @@
 
 package org.skywalking.apm.collector.ui.dao;
 
+import com.google.gson.JsonArray;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.util.Const;
@@ -33,8 +33,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonArray;
-
 /**
  * @author peng-yongsheng, clevertension
  */
@@ -42,7 +40,7 @@
     private final Logger logger = LoggerFactory.getLogger(InstPerformanceH2DAO.class);
     private static final String GET_INST_PERF_SQL = "select * from {0} where {1} = ? and {2} in (";
     private static final String GET_TPS_METRIC_SQL = "select * from {0} where {1} = ?";
-    private static final String GET_TPS_METRICS_SQL = "select * from {0} where {1} in (";
+
     @Override public InstPerformance get(long[] timeBuckets, int instanceId) {
         H2Client client = getClient();
         logger.info("the inst performance inst id = {}", instanceId);
@@ -74,8 +72,8 @@
     @Override public int getTpsMetric(int instanceId, long timeBucket) {
         logger.info("getTpMetric instanceId = {}, startTimeBucket = {}", instanceId, timeBucket);
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, "id");
-        Object[] params = new Object[]{instanceId};
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, InstPerformanceTable.COLUMN_ID);
+        Object[] params = new Object[] {instanceId};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 return rs.getInt(InstPerformanceTable.COLUMN_CALLS);
@@ -89,7 +87,7 @@
     @Override public JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
         logger.info("getTpsMetric instanceId = {}, startTimeBucket = {}, endTimeBucket = {}", instanceId, startTimeBucket, endTimeBucket);
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_TPS_METRICS_SQL, InstPerformanceTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, InstPerformanceTable.COLUMN_ID);
 
         long timeBucket = startTimeBucket;
         List<String> idList = new ArrayList<>();
@@ -100,31 +98,26 @@
         }
         while (timeBucket <= endTimeBucket);
 
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
-
         JsonArray metrics = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                int calls = rs.getInt(InstPerformanceTable.COLUMN_CALLS);
-                metrics.add(calls);
+        idList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new Object[] {id})) {
+                if (rs.next()) {
+                    int calls = rs.getInt(InstPerformanceTable.COLUMN_CALLS);
+                    metrics.add(calls);
+                } else {
+                    metrics.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
             }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
         return metrics;
     }
 
     @Override public int getRespTimeMetric(int instanceId, long timeBucket) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, "id");
-        Object[] params = new Object[]{instanceId};
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, InstPerformanceTable.COLUMN_ID);
+        Object[] params = new Object[] {instanceId};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
                 int callTimes = rs.getInt(InstPerformanceTable.COLUMN_CALLS);
@@ -139,7 +132,7 @@
 
     @Override public JsonArray getRespTimeMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_TPS_METRICS_SQL, InstPerformanceTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstPerformanceTable.TABLE, InstPerformanceTable.COLUMN_ID);
 
         long timeBucket = startTimeBucket;
         List<String> idList = new ArrayList<>();
@@ -150,25 +143,20 @@
         }
         while (timeBucket <= endTimeBucket);
 
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
-
         JsonArray metrics = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                int callTimes = rs.getInt(InstPerformanceTable.COLUMN_CALLS);
-                int costTotal = rs.getInt(InstPerformanceTable.COLUMN_COST_TOTAL);
-                metrics.add(costTotal / callTimes);
+        idList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new Object[] {id})) {
+                if (rs.next()) {
+                    int callTimes = rs.getInt(InstPerformanceTable.COLUMN_CALLS);
+                    int costTotal = rs.getInt(InstPerformanceTable.COLUMN_COST_TOTAL);
+                    metrics.add(costTotal / callTimes);
+                } else {
+                    metrics.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
             }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
         return metrics;
     }
 }
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java
index f51fbf0..7cfb79c 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java
@@ -44,7 +44,7 @@
     private static final String GET_INST_LAST_HEARTBEAT_TIME_SQL = "select {0} from {1} where {2} > ? and {3} = ? limit 1";
     private static final String GET_INSTANCE_SQL = "select * from {0} where {1} = ?";
     private static final String GET_INSTANCES_SQL = "select * from {0} where {1} = ? and {2} >= ?";
-    private static final String GET_APPLICATIONS_SQL = "select {3}, count({0}) as cnt from {1} where {2} >= ? and {2} <= ? group by {3} limit 100";
+    private static final String GET_APPLICATIONS_SQL = "select {3}, count({0}) as cnt from {1} where {2} >= ? group by {3} limit 100";
 
     @Override
     public Long lastHeartBeatTime() {
@@ -87,7 +87,7 @@
         JsonArray applications = new JsonArray();
         String sql = SqlBuilder.buildSql(GET_APPLICATIONS_SQL, InstanceTable.COLUMN_INSTANCE_ID,
             InstanceTable.TABLE, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_APPLICATION_ID);
-        Object[] params = new Object[] {startTime, endTime};
+        Object[] params = new Object[] {startTime};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             while (rs.next()) {
                 Integer applicationId = rs.getInt(InstanceTable.COLUMN_APPLICATION_ID);
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricH2DAO.java
index 70b5dc9..0b45f01 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricH2DAO.java
@@ -18,11 +18,12 @@
 
 package org.skywalking.apm.collector.ui.dao;
 
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.util.Const;
@@ -33,21 +34,18 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-
 /**
  * @author clevertension
  */
 public class MemoryMetricH2DAO extends H2DAO implements IMemoryMetricDAO {
     private final Logger logger = LoggerFactory.getLogger(InstanceH2DAO.class);
     private static final String GET_MEMORY_METRIC_SQL = "select * from {0} where {1} =?";
-    private static final String GET_MEMORY_METRICS_SQL = "select * from {0} where {1} in (";
+
     @Override public JsonObject getMetric(int instanceId, long timeBucket, boolean isHeap) {
         H2Client client = getClient();
         String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap;
-        String sql = SqlBuilder.buildSql(GET_MEMORY_METRIC_SQL, MemoryMetricTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_MEMORY_METRIC_SQL, MemoryMetricTable.TABLE, MemoryMetricTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         JsonObject metric = new JsonObject();
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
@@ -67,7 +65,7 @@
 
     @Override public JsonObject getMetric(int instanceId, long startTimeBucket, long endTimeBucket, boolean isHeap) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_MEMORY_METRICS_SQL, MemoryMetricTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_MEMORY_METRIC_SQL, MemoryMetricTable.TABLE, MemoryMetricTable.COLUMN_ID);
         List<String> idList = new ArrayList<>();
         long timeBucket = startTimeBucket;
         do {
@@ -77,30 +75,24 @@
         }
         while (timeBucket <= endTimeBucket);
 
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
         JsonObject metric = new JsonObject();
         JsonArray usedMetric = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                metric.addProperty("max", rs.getLong(MemoryMetricTable.COLUMN_MAX));
-                metric.addProperty("init", rs.getLong(MemoryMetricTable.COLUMN_INIT));
-                usedMetric.add(rs.getLong(MemoryMetricTable.COLUMN_USED));
+
+        idList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new String[] {id})) {
+                if (rs.next()) {
+                    metric.addProperty("max", rs.getLong(MemoryMetricTable.COLUMN_MAX));
+                    metric.addProperty("init", rs.getLong(MemoryMetricTable.COLUMN_INIT));
+                    usedMetric.add(rs.getLong(MemoryMetricTable.COLUMN_USED));
+                } else {
+                    metric.addProperty("max", 0);
+                    metric.addProperty("init", 0);
+                    usedMetric.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
             }
-            if (usedMetric.size() == 0) {
-                metric.addProperty("max", 0);
-                metric.addProperty("init",0);
-                usedMetric.add(0);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
 
         metric.add("used", usedMetric);
         return metric;
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricH2DAO.java
index 2d567f9..b759c2c 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricH2DAO.java
@@ -18,11 +18,12 @@
 
 package org.skywalking.apm.collector.ui.dao;
 
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.skywalking.apm.collector.client.h2.H2Client;
 import org.skywalking.apm.collector.client.h2.H2ClientException;
 import org.skywalking.apm.collector.core.util.Const;
@@ -33,21 +34,18 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-
 /**
  * @author clevertension
  */
 public class MemoryPoolMetricH2DAO extends H2DAO implements IMemoryPoolMetricDAO {
     private final Logger logger = LoggerFactory.getLogger(InstanceH2DAO.class);
-    private static final String GET_MEMORY_POOL_METRIC_SQL = "select * from {0} where {1} =?";
-    private static final String GET_MEMORY_POOL_METRICS_SQL = "select * from {0} where {1} in (";
+    private static final String GET_MEMORY_POOL_METRIC_SQL = "select * from {0} where {1} = ?";
+
     @Override public JsonObject getMetric(int instanceId, long timeBucket, int poolType) {
         H2Client client = getClient();
         String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + poolType;
-        String sql = SqlBuilder.buildSql(GET_MEMORY_POOL_METRIC_SQL, MemoryPoolMetricTable.TABLE, "id");
-        Object[] params = new Object[]{id};
+        String sql = SqlBuilder.buildSql(GET_MEMORY_POOL_METRIC_SQL, MemoryPoolMetricTable.TABLE, MemoryPoolMetricTable.COLUMN_ID);
+        Object[] params = new Object[] {id};
         JsonObject metric = new JsonObject();
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {
@@ -67,7 +65,7 @@
 
     @Override public JsonObject getMetric(int instanceId, long startTimeBucket, long endTimeBucket, int poolType) {
         H2Client client = getClient();
-        String sql = SqlBuilder.buildSql(GET_MEMORY_POOL_METRICS_SQL, MemoryPoolMetricTable.TABLE, "id");
+        String sql = SqlBuilder.buildSql(GET_MEMORY_POOL_METRIC_SQL, MemoryPoolMetricTable.TABLE, MemoryPoolMetricTable.COLUMN_ID);
         List<String> idList = new ArrayList<>();
         long timeBucket = startTimeBucket;
         do {
@@ -77,30 +75,24 @@
         }
         while (timeBucket <= endTimeBucket);
 
-        StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < idList.size(); i++) {
-            builder.append("?,");
-        }
-        builder.delete(builder.length() - 1, builder.length());
-        builder.append(")");
-        sql = sql + builder;
-        Object[] params = idList.toArray(new String[0]);
         JsonObject metric = new JsonObject();
         JsonArray usedMetric = new JsonArray();
-        try (ResultSet rs = client.executeQuery(sql, params)) {
-            while (rs.next()) {
-                metric.addProperty("max", rs.getLong(MemoryPoolMetricTable.COLUMN_MAX));
-                metric.addProperty("init", rs.getLong(MemoryPoolMetricTable.COLUMN_INIT));
-                usedMetric.add(rs.getLong(MemoryPoolMetricTable.COLUMN_USED));
+
+        idList.forEach(id -> {
+            try (ResultSet rs = client.executeQuery(sql, new String[] {id})) {
+                if (rs.next()) {
+                    metric.addProperty("max", rs.getLong(MemoryPoolMetricTable.COLUMN_MAX));
+                    metric.addProperty("init", rs.getLong(MemoryPoolMetricTable.COLUMN_INIT));
+                    usedMetric.add(rs.getLong(MemoryPoolMetricTable.COLUMN_USED));
+                } else {
+                    metric.addProperty("max", 0);
+                    metric.addProperty("init", 0);
+                    usedMetric.add(0);
+                }
+            } catch (SQLException | H2ClientException e) {
+                logger.error(e.getMessage(), e);
             }
-            if (usedMetric.size() == 0) {
-                metric.addProperty("max", 0);
-                metric.addProperty("init",0);
-                usedMetric.add(0);
-            }
-        } catch (SQLException | H2ClientException e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
 
         metric.add("used", usedMetric);
         return metric;
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java
index 29d019d..d37e581 100644
--- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentH2DAO.java
@@ -40,7 +40,7 @@
     @Override public TraceSegmentObject load(String segmentId) {
         H2Client client = getClient();
         String sql = SqlBuilder.buildSql(GET_SEGMENT_SQL, SegmentTable.COLUMN_DATA_BINARY,
-            SegmentTable.TABLE, "id");
+            SegmentTable.TABLE, SegmentTable.COLUMN_ID);
         Object[] params = new Object[] {segmentId};
         try (ResultSet rs = client.executeQuery(sql, params)) {
             if (rs.next()) {