You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/11/15 04:36:36 UTC

[incubator-iotdb] 05/06: add show dynamic parameter and flush task info

This is an automated email from the ASF dual-hosted git repository.

lta pushed a commit to branch fix_show_info
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit f496dae489da560783311a26da7f8b924252785d
Author: lta <li...@163.com>
AuthorDate: Fri Nov 15 11:58:11 2019 +0800

    add show dynamic parameter and flush task info
---
 .../org/apache/iotdb/db/sql/parse/TqlLexer.g       |   7 +-
 .../org/apache/iotdb/db/sql/parse/TqlParser.g      |  25 +++
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |  10 +-
 .../org/apache/iotdb/db/qp/QueryProcessor.java     |   1 +
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |   5 +
 .../qp/executor/AbstractQueryProcessExecutor.java  |  90 ++++++++++-
 .../org/apache/iotdb/db/qp/logical/Operator.java   |   2 +-
 .../{ShowTTLOperator.java => ShowOperator.java}    |  20 +--
 .../iotdb/db/qp/logical/sys/ShowTTLOperator.java   |   5 +-
 .../sys/ShowPlan.java}                             |  41 +++--
 .../iotdb/db/qp/physical/sys/ShowTTLPlan.java      |   7 +-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |  19 +++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |  12 ++
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 169 ++++++++++-----------
 .../apache/iotdb/db/qp/plan/PhysicalPlanTest.java  |  17 +++
 15 files changed, 289 insertions(+), 141 deletions(-)

diff --git a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
index 00ce42e..7237522 100644
--- a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
+++ b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
@@ -286,15 +286,16 @@ K_TASK
     ;
 
 K_DYNAMIC
-    : D Y N A  M I C
+    : D Y N A M I C
     ;
 
-K_PARAMETERS
-    : P A R  A M E T E R S
+K_PARAMETER
+    : P A R A M E T E R
     ;
 
 K_INFO
     : I N F O
+    ;
 
 //************** logical operator***********
 OPERATOR_AND
diff --git a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
index 9f420c4..e9cf046 100644
--- a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
+++ b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlParser.g
@@ -108,6 +108,8 @@ tokens{
     TOK_DATE_EXPR;
     TOK_DURATION;
     TOK_LOAD_CONFIGURATION;
+    TOK_DYNAMIC_PARAMETER;
+    TOK_FLUSH_TASK_INFO;
 }
 
 @header{
@@ -172,6 +174,13 @@ static {
 	tokenNameMap.put("K_LIST", "LIST");
 	tokenNameMap.put("K_TTL", "TTL");
 	tokenNameMap.put("K_UNSET", "UNSET");
+	tokenNameMap.put("K_CONFIGURATION", "CONFIGURATION");
+	tokenNameMap.put("K_FLUSH", "FLUSH");
+	tokenNameMap.put("K_TASK", "TASK");
+	tokenNameMap.put("K_DYNAMIC", "DYNAMIC");
+	tokenNameMap.put("K_PARAMETER", "PARAMETER");
+	tokenNameMap.put("K_INFO", "INFO");
+
 	// Operators
 	tokenNameMap.put("DOT", ".");
 	tokenNameMap.put("COLON", ":");
@@ -276,6 +285,7 @@ sqlStatement
     | dmlStatement
     | administrationStatement
     | configurationStatement
+    | showStatement
     ;
 
 dmlStatement
@@ -765,6 +775,21 @@ loadConfigurationStatement
     -> ^(TOK_LOAD_CONFIGURATION)
     ;
 
+showStatement
+    : showFlushTaskInfo
+    | showDynamicParameter
+    ;
+
+showFlushTaskInfo
+    : K_SHOW K_FLUSH K_TASK K_INFO
+    -> ^(TOK_SHOW TOK_FLUSH_TASK_INFO)
+    ;
+
+showDynamicParameter
+    : K_SHOW K_DYNAMIC K_PARAMETER
+    -> ^(TOK_SHOW TOK_DYNAMIC_PARAMETER)
+    ;
+
 /*
 ****
 *************
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 9fe4780..8591c93 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -54,12 +54,10 @@ public class IoTDBConstant {
   public static final String MIN_TIME = "min_time";
   public static final int MIN_SUPPORTED_JDK_VERSION = 8;
 
-  // for cluster, set read consistency level
-  public static final String SET_READ_CONSISTENCY_LEVEL_PATTERN = "set\\s+read.*level.*";
-
-  public static final String SHOW_FLUSH_TASK_INFO = "show\\s+flush\\s+task\\s+info";
-
-  public static final String SHOW_DYNAMIC_PARAMETERS = "show\\s+dynamic\\s+parameters";
+  // show info
+  public static final String ITEM = "item";
+  public static final String PARAMETER = "parameter";
+  public static final String VALUE = "value(B)";
 
   public static final String ROLE = "role";
   public static final String USER = "user";
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java b/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
index 2e60a29..746465a 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/QueryProcessor.java
@@ -129,6 +129,7 @@ public class QueryProcessor {
       case REVOKE_WATERMARK_EMBEDDING:
       case TTL:
       case LOAD_CONFIGURATION:
+      case SHOW:
         return operator;
       case QUERY:
       case UPDATE:
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
index adc63f6..d62ec8d 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
@@ -104,6 +104,9 @@ public class SQLConstant {
   public static final int TOK_SHOW = 65;
   public static final int TOK_LOAD_CONFIGURATION = 66;
 
+  public static final int TOK_FLUSH_TASK_INFO = 67;
+  public static final int TOK_DYNAMIC_PARAMETER = 68;
+
   public static final Map<Integer, String> tokenSymbol = new HashMap<>();
   public static final Map<Integer, String> tokenNames = new HashMap<>();
   public static final Map<Integer, Integer> reverseWords = new HashMap<>();
@@ -164,6 +167,8 @@ public class SQLConstant {
     tokenNames.put(TOK_SHOW, "TOK_SHOW");
 
     tokenNames.put(TOK_LOAD_CONFIGURATION, "TOK_LOAD_CONFIGURATION");
+    tokenNames.put(TOK_FLUSH_TASK_INFO, "TOK_FLUSH_TASK_INFO");
+    tokenNames.put(TOK_DYNAMIC_PARAMETER, "TOK_DYNAMIC_PARAMETER");
   }
 
   static {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/AbstractQueryProcessExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/AbstractQueryProcessExecutor.java
index 8443892..8877860 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/AbstractQueryProcessExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/AbstractQueryProcessExecutor.java
@@ -18,16 +18,23 @@
  */
 package org.apache.iotdb.db.qp.executor;
 
+import static org.apache.iotdb.db.conf.IoTDBConstant.ITEM;
+import static org.apache.iotdb.db.conf.IoTDBConstant.PARAMETER;
 import static org.apache.iotdb.db.conf.IoTDBConstant.STORAGE_GROUP;
 import static org.apache.iotdb.db.conf.IoTDBConstant.TTL;
+import static org.apache.iotdb.db.conf.IoTDBConstant.VALUE;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.adapter.CompressionRatio;
+import org.apache.iotdb.db.conf.adapter.IoTDBConfigDynamicAdapter;
+import org.apache.iotdb.db.engine.flush.pool.FlushTaskPoolManager;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metadata.MNode;
@@ -38,6 +45,7 @@ import org.apache.iotdb.db.qp.physical.crud.FillQueryPlan;
 import org.apache.iotdb.db.qp.physical.crud.GroupByPlan;
 import org.apache.iotdb.db.qp.physical.crud.QueryPlan;
 import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.dataset.DeviceIterateDataSet;
@@ -64,13 +72,26 @@ public abstract class AbstractQueryProcessExecutor implements IQueryProcessExecu
       return processDataQuery((QueryPlan) queryPlan, context);
     } else if (queryPlan instanceof AuthorPlan) {
       return processAuthorQuery((AuthorPlan) queryPlan, context);
-    } else if (queryPlan instanceof ShowTTLPlan) {
-      return processShowTTLQuery((ShowTTLPlan) queryPlan);
+    } else if (queryPlan instanceof ShowPlan) {
+      return processShowQuery((ShowPlan) queryPlan);
     } else {
       throw new QueryProcessException(String.format("Unrecognized query plan %s", queryPlan));
     }
   }
 
+  private QueryDataSet processShowQuery(ShowPlan showPlan) throws QueryProcessException {
+    switch (showPlan.getShowContentType()) {
+      case TTL:
+        return processShowTTLQuery((ShowTTLPlan) showPlan);
+      case DYNAMIC_PARAMETER:
+        return processShowDynamicParameterQuery();
+      case FLUSH_TASK_INFO:
+        return processShowFlushTaskInfo();
+      default:
+        throw new QueryProcessException(String.format("Unrecognized show plan %s", showPlan));
+    }
+  }
+
   private QueryDataSet processShowTTLQuery(ShowTTLPlan showTTLPlan) {
     List<Path> paths = new ArrayList<>();
     paths.add(new Path(STORAGE_GROUP));
@@ -83,13 +104,13 @@ public abstract class AbstractQueryProcessExecutor implements IQueryProcessExecu
     List<String> selectedSgs = showTTLPlan.getStorageGroups();
 
     List<MNode> storageGroups = MManager.getInstance().getAllStorageGroups();
-    int i = 0;
+    int timestamp = 0;
     for (MNode mNode : storageGroups) {
       String sgName = mNode.getFullPath();
       if (!selectedSgs.isEmpty() && !selectedSgs.contains(sgName)) {
         continue;
       }
-      RowRecord rowRecord = new RowRecord(i++);
+      RowRecord rowRecord = new RowRecord(timestamp++);
       Field sg = new Field(TSDataType.TEXT);
       Field ttl;
       sg.setBinaryV(new Binary(sgName));
@@ -107,6 +128,65 @@ public abstract class AbstractQueryProcessExecutor implements IQueryProcessExecu
     return listDataSet;
   }
 
+  private QueryDataSet processShowDynamicParameterQuery() {
+    List<Path> paths = new ArrayList<>();
+    paths.add(new Path(PARAMETER));
+    paths.add(new Path(VALUE));
+    List<TSDataType> dataTypes = new ArrayList<>();
+    dataTypes.add(TSDataType.TEXT);
+    dataTypes.add(TSDataType.INT64);
+    ListDataSet listDataSet = new ListDataSet(paths, dataTypes);
+
+    int timestamp = 0;
+    addRowRecordForShowQuery(listDataSet, timestamp++, "memtable size threshold",
+        IoTDBDescriptor.getInstance().getConfig().getMemtableSizeThreshold());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "memtable number",
+        IoTDBDescriptor.getInstance().getConfig().getMaxMemtableNumber());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "tsfile size threshold",
+        IoTDBDescriptor.getInstance().getConfig().getTsFileSizeThreshold());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "compression ratio",
+        (long) CompressionRatio.getInstance().getRatio());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "storage group number",
+        MManager.getInstance().getAllStorageGroupNames().size());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "timeseries number",
+        IoTDBConfigDynamicAdapter.getInstance().getTotalTimeseries());
+    addRowRecordForShowQuery(listDataSet, timestamp++,
+        "maximal timeseries number among storage groups",
+        MManager.getInstance().getMaximalSeriesNumberAmongStorageGroups());
+    return listDataSet;
+  }
+
+  private QueryDataSet processShowFlushTaskInfo() {
+    List<Path> paths = new ArrayList<>();
+    paths.add(new Path(ITEM));
+    paths.add(new Path(VALUE));
+    List<TSDataType> dataTypes = new ArrayList<>();
+    dataTypes.add(TSDataType.TEXT);
+    dataTypes.add(TSDataType.INT64);
+    ListDataSet listDataSet = new ListDataSet(paths, dataTypes);
+
+    int timestamp = 0;
+    addRowRecordForShowQuery(listDataSet, timestamp++, "total number of flush tasks",
+        FlushTaskPoolManager.getInstance().getTotalTasks());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "number of working flush tasks",
+        FlushTaskPoolManager.getInstance().getWorkingTasksNumber());
+    addRowRecordForShowQuery(listDataSet, timestamp++, "number of waiting flush tasks",
+        FlushTaskPoolManager.getInstance().getWaitingTasksNumber());
+    return listDataSet;
+  }
+
+  private void addRowRecordForShowQuery(ListDataSet listDataSet, int timestamp, String item,
+      long value) {
+    RowRecord rowRecord = new RowRecord(timestamp);
+    Field itemField = new Field(TSDataType.TEXT);
+    itemField.setBinaryV(new Binary(item));
+    Field valueField = new Field(TSDataType.INT64);
+    valueField.setLongV(value);
+    rowRecord.addField(itemField);
+    rowRecord.addField(valueField);
+    listDataSet.putRecord(rowRecord);
+  }
+
   protected abstract QueryDataSet processAuthorQuery(AuthorPlan plan, QueryContext context)
       throws QueryProcessException;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
index 06fc4be..8c4eeac 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
@@ -74,6 +74,6 @@ public abstract class Operator {
     DELETE_ROLE, GRANT_ROLE_PRIVILEGE, REVOKE_ROLE_PRIVILEGE, LIST_USER, LIST_ROLE,
     LIST_USER_PRIVILEGE, LIST_ROLE_PRIVILEGE, LIST_USER_ROLES, LIST_ROLE_USERS,
     GRANT_WATERMARK_EMBEDDING, REVOKE_WATERMARK_EMBEDDING,
-    TTL, DELETE_STORAGE_GROUP, LOAD_CONFIGURATION
+    TTL, DELETE_STORAGE_GROUP, LOAD_CONFIGURATION, SHOW
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowOperator.java
similarity index 69%
copy from server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
copy to server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowOperator.java
index b8406ef..9c5c3b2 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowOperator.java
@@ -17,24 +17,18 @@
  * under the License.
  *
  */
-
 package org.apache.iotdb.db.qp.logical.sys;
 
-import java.util.List;
-import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.logical.RootOperator;
 
-public class ShowTTLOperator extends RootOperator {
-
-  private List<String> storageGroups;
+public class ShowOperator extends RootOperator {
 
-  public ShowTTLOperator(List<String> storageGroups) {
-    super(SQLConstant.TOK_SHOW);
-    this.operatorType = OperatorType.TTL;
-    this.storageGroups = storageGroups;
+  public ShowOperator(int tokenIntType) {
+    this(tokenIntType, OperatorType.SHOW);
   }
 
-  public List<String> getStorageGroups() {
-    return storageGroups;
+  public ShowOperator(int tokenIntType, OperatorType operatorType) {
+    super(tokenIntType);
+    this.operatorType = operatorType;
   }
-}
\ No newline at end of file
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
index b8406ef..3426883 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
@@ -24,13 +24,12 @@ import java.util.List;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.logical.RootOperator;
 
-public class ShowTTLOperator extends RootOperator {
+public class ShowTTLOperator extends ShowOperator {
 
   private List<String> storageGroups;
 
   public ShowTTLOperator(List<String> storageGroups) {
-    super(SQLConstant.TOK_SHOW);
-    this.operatorType = OperatorType.TTL;
+    super(SQLConstant.TOK_SHOW, OperatorType.TTL);
     this.storageGroups = storageGroups;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
similarity index 51%
copy from server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
copy to server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
index b8406ef..5c2f9dd 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowTTLOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
@@ -17,24 +17,39 @@
  * under the License.
  *
  */
-
-package org.apache.iotdb.db.qp.logical.sys;
+package org.apache.iotdb.db.qp.physical.sys;
 
 import java.util.List;
-import org.apache.iotdb.db.qp.constant.SQLConstant;
-import org.apache.iotdb.db.qp.logical.RootOperator;
+import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
+import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import org.apache.iotdb.tsfile.read.common.Path;
+
+public class ShowPlan extends PhysicalPlan {
+
+  private ShowContentType showContentType;
+
+  public ShowPlan(ShowContentType showContentType){
+    super(true);
+    this.showContentType = showContentType;
+    setOperatorType(OperatorType.SHOW);
+  }
 
-public class ShowTTLOperator extends RootOperator {
+  @Override
+  public List<Path> getPaths() {
+    return null;
+  }
 
-  private List<String> storageGroups;
+  public ShowContentType getShowContentType() {
+    return showContentType;
+  }
 
-  public ShowTTLOperator(List<String> storageGroups) {
-    super(SQLConstant.TOK_SHOW);
-    this.operatorType = OperatorType.TTL;
-    this.storageGroups = storageGroups;
+  @Override
+  public String toString() {
+    return String.format("%s %s", getOperatorType().toString(), showContentType);
   }
 
-  public List<String> getStorageGroups() {
-    return storageGroups;
+  public enum ShowContentType {
+    DYNAMIC_PARAMETER, FLUSH_TASK_INFO, TTL
   }
-}
\ No newline at end of file
+
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTTLPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTTLPlan.java
index 5061b4e..1632a61 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTTLPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTTLPlan.java
@@ -5,18 +5,15 @@
 package org.apache.iotdb.db.qp.physical.sys;
 
 import java.util.List;
-import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
-import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.tsfile.read.common.Path;
 
-public class ShowTTLPlan extends PhysicalPlan {
+public class ShowTTLPlan extends ShowPlan {
 
   private List<String> storageGroups;
 
   public ShowTTLPlan(List<String> storageGroups) {
-    super(true);
+    super(ShowContentType.TTL);
     this.storageGroups = storageGroups;
-    setOperatorType(OperatorType.TTL);
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index 2e7c962..a8d4ae0 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -37,7 +37,9 @@ import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_CREATE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_DATETIME;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_DELETE;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_DROP;
+import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_DYNAMIC_PARAMETER;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_FILL;
+import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_FLUSH_TASK_INFO;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_FROM;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_GRANT;
 import static org.apache.iotdb.db.sql.parse.TqlParser.TOK_GRANT_WATERMARK_EMBEDDING;
@@ -109,6 +111,7 @@ import org.apache.iotdb.db.qp.logical.sys.LoadDataOperator;
 import org.apache.iotdb.db.qp.logical.sys.PropertyOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetTTLOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowTTLOperator;
 import org.apache.iotdb.db.query.fill.IFill;
 import org.apache.iotdb.db.query.fill.LinearFill;
@@ -280,6 +283,9 @@ public class LogicalGenerator {
       case TOK_LOAD_CONFIGURATION:
         initializedOperator = new LoadConfigurationOperator();
         return;
+      case TOK_SHOW:
+        analyzeShow(astNode);
+        return;
       default:
         throw new QueryProcessException("Not supported TqlParser type " + token.getText());
     }
@@ -288,6 +294,19 @@ public class LogicalGenerator {
     }
   }
 
+  private void analyzeShow(AstNode astNode){
+    switch (astNode.getChild(0).getType()) {
+      case TOK_DYNAMIC_PARAMETER:
+        initializedOperator = new ShowOperator(SQLConstant.TOK_DYNAMIC_PARAMETER);
+        break;
+      case TOK_FLUSH_TASK_INFO:
+        initializedOperator = new ShowOperator(SQLConstant.TOK_FLUSH_TASK_INFO);
+        break;
+      default:
+        break;
+    }
+  }
+
   private void analyzeTTL(AstNode astNode) throws QueryProcessException {
     int tokenType = astNode.getChild(0).getToken().getType();
     switch (tokenType) {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 0aeef61..e4ed293 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -66,6 +66,8 @@ import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
 import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan.ShowContentType;
 import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
 import org.apache.iotdb.db.service.TSServiceImpl;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -155,6 +157,16 @@ public class PhysicalGenerator {
         }
       case LOAD_CONFIGURATION:
         return new LoadConfigurationPlan();
+      case SHOW:
+        switch (operator.getTokenIntType()){
+          case SQLConstant.TOK_DYNAMIC_PARAMETER:
+            return new ShowPlan(ShowContentType.DYNAMIC_PARAMETER);
+          case SQLConstant.TOK_FLUSH_TASK_INFO:
+            return new ShowPlan(ShowContentType.FLUSH_TASK_INFO);
+          default:
+            throw new LogicalOperatorException(String
+                .format("not supported operator type %s in show operation.", operator.getType()));
+        }
       default:
         throw new LogicalOperatorException(operator.getType().toString(), "");
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index f8abfce..d5449c4 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -18,11 +18,14 @@
  */
 package org.apache.iotdb.db.service;
 
+import static org.apache.iotdb.db.conf.IoTDBConstant.ITEM;
+import static org.apache.iotdb.db.conf.IoTDBConstant.PARAMETER;
 import static org.apache.iotdb.db.conf.IoTDBConstant.PRIVILEGE;
 import static org.apache.iotdb.db.conf.IoTDBConstant.ROLE;
 import static org.apache.iotdb.db.conf.IoTDBConstant.STORAGE_GROUP;
 import static org.apache.iotdb.db.conf.IoTDBConstant.TTL;
 import static org.apache.iotdb.db.conf.IoTDBConstant.USER;
+import static org.apache.iotdb.db.conf.IoTDBConstant.VALUE;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -37,7 +40,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
-import java.util.regex.Pattern;
 import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.auth.authorizer.IAuthorizer;
@@ -45,15 +47,12 @@ import org.apache.iotdb.db.auth.authorizer.LocalFileAuthorizer;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.conf.adapter.CompressionRatio;
-import org.apache.iotdb.db.conf.adapter.IoTDBConfigDynamicAdapter;
 import org.apache.iotdb.db.cost.statistic.Measurement;
 import org.apache.iotdb.db.cost.statistic.Operation;
 import org.apache.iotdb.db.engine.StorageEngine;
-import org.apache.iotdb.db.engine.flush.pool.FlushTaskPoolManager;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.QueryInBatchStatementException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.path.PathException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.storageGroup.StorageGroupException;
@@ -73,7 +72,7 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.tools.watermark.GroupedLSBWatermarkEncoder;
@@ -218,32 +217,38 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       zoneIds.remove();
     }
     // clear the statementId counter
-    if (statementIdGenerator.get() != null)
+    if (statementIdGenerator.get() != null) {
       statementIdGenerator.remove();
+    }
     // clear the queryId counter
-    if (queryIdGenerator.get() != null)
+    if (queryIdGenerator.get() != null) {
       queryIdGenerator.remove();
+    }
     // clear all cached physical plans of the connection
-    if (operationStatus.get() != null)
+    if (operationStatus.get() != null) {
       operationStatus.remove();
+    }
     // clear all cached ResultSets of the connection
-    if (queryDataSets.get() != null)
+    if (queryDataSets.get() != null) {
       queryDataSets.remove();
+    }
     // clear all cached query context of the connection
     if (contextMapLocal.get() != null) {
       try {
         for (QueryContext context : contextMapLocal.get().values()) {
-            QueryResourceManager.getInstance().endQueryForGivenJob(context.getJobId());
+          QueryResourceManager.getInstance().endQueryForGivenJob(context.getJobId());
         }
         contextMapLocal.remove();
       } catch (StorageEngineException e) {
         logger.error("Error in closeSession : ", e);
-        return new TSStatus(getStatus(TSStatusCode.CLOSE_OPERATION_ERROR, "Error in closeOperation"));
+        return new TSStatus(
+            getStatus(TSStatusCode.CLOSE_OPERATION_ERROR, "Error in closeOperation"));
       }
     }
     // clear the statementId to queryId map
-    if (statementId2QueryId.get() != null)
+    if (statementId2QueryId.get() != null) {
       statementId2QueryId.remove();
+    }
 
     return new TSStatus(tsStatus);
   }
@@ -262,8 +267,9 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         long stmtId = req.getStmtId();
         Set<Long> queryIdSet = statementId2QueryId.get().get(stmtId);
         if (queryIdSet != null) {
-          for (long queryId : queryIdSet)
+          for (long queryId : queryIdSet) {
             releaseQueryResource(queryId);
+          }
           statementId2QueryId.get().remove(stmtId);
         }
       }
@@ -282,21 +288,21 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
   /**
    * release single operation resource
-   * @param queryId
-   * @throws StorageEngineException
    */
   private void releaseQueryResource(long queryId) throws StorageEngineException {
 
     // remove the corresponding Physical Plan
-    if (operationStatus.get() != null)
+    if (operationStatus.get() != null) {
       operationStatus.get().remove(queryId);
+    }
     // remove the corresponding Dataset
-    if (queryDataSets.get() != null)
+    if (queryDataSets.get() != null) {
       queryDataSets.get().remove(queryId);
+    }
     // remove the corresponding query context and query resource
     if (contextMapLocal.get() != null && contextMapLocal.get().containsKey(queryId)) {
       QueryResourceManager.getInstance()
-              .endQueryForGivenJob(contextMapLocal.get().remove(queryId).getJobId());
+          .endQueryForGivenJob(contextMapLocal.get().remove(queryId).getJobId());
     }
   }
 
@@ -601,34 +607,6 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
             getStatus(TSStatusCode.SUCCESS_STATUS, "ADMIN_COMMAND_SUCCESS"));
       }
 
-      if (execShowFlushInfo(statement)) {
-        String msg = String.format(
-            "There are %d flush tasks, %d flush tasks are in execution and %d flush tasks are waiting for execution.",
-            FlushTaskPoolManager.getInstance().getTotalTasks(),
-            FlushTaskPoolManager.getInstance().getWorkingTasksNumber(),
-            FlushTaskPoolManager.getInstance().getWaitingTasksNumber());
-        return getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS, msg));
-      }
-
-      if (execShowDynamicParameters(statement)) {
-        String msg = String.format(
-            "Memtable size threshold: %dB, Memtable number: %d, Tsfile size threshold: %dB, Compression ratio: %f,"
-                + " Storage group number: %d, Timeseries number: %d, Maximal timeseries number among storage groups: %d",
-            IoTDBDescriptor.getInstance().getConfig().getMemtableSizeThreshold(),
-            IoTDBDescriptor.getInstance().getConfig().getMaxMemtableNumber(),
-            IoTDBDescriptor.getInstance().getConfig().getTsFileSizeThreshold(),
-            CompressionRatio.getInstance().getRatio(),
-            MManager.getInstance().getAllStorageGroupNames().size(),
-            IoTDBConfigDynamicAdapter.getInstance().getTotalTimeseries(),
-            MManager.getInstance().getMaximalSeriesNumberAmongStorageGroups());
-        return getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS, msg));
-      }
-
-      if (execSetConsistencyLevel(statement)) {
-        return getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS,
-            "Execute set consistency level successfully"));
-      }
-
       PhysicalPlan physicalPlan;
       physicalPlan = processor.parseSQLToPhysicalPlan(statement, zoneIds.get());
       if (physicalPlan.isQuery()) {
@@ -649,7 +627,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       logger.error("check metadata error: ", e);
       return getTSExecuteStatementResp(getStatus(TSStatusCode.METADATA_ERROR,
           "Check metadata error: " + e.getMessage()));
-    } catch (SQLException | QueryProcessException e) {
+    } catch (QueryProcessException e) {
       logger.error("meet error while parsing SQL to physical plan: ", e);
       return getTSExecuteStatementResp(getStatus(TSStatusCode.SQL_PARSE_ERROR,
           "Statement format is not right: " + e.getMessage()));
@@ -660,52 +638,14 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     }
   }
 
-  /**
-   * Show flush info
-   */
-  private boolean execShowFlushInfo(String statement) {
-    if (statement == null) {
-      return false;
-    }
-    statement = statement.toLowerCase().trim();
-    return Pattern.matches(IoTDBConstant.SHOW_FLUSH_TASK_INFO, statement);
-  }
-
-  /**
-   * Show dynamic parameters
-   */
-  private boolean execShowDynamicParameters(String statement) {
-    if (statement == null) {
-      return false;
-    }
-    statement = statement.toLowerCase().trim();
-    return Pattern.matches(IoTDBConstant.SHOW_DYNAMIC_PARAMETERS, statement);
-  }
-
-  /**
-   * Set consistency level
-   */
-  private boolean execSetConsistencyLevel(String statement) throws SQLException {
-    if (statement == null) {
-      return false;
-    }
-    statement = statement.toLowerCase().trim();
-    if (Pattern.matches(IoTDBConstant.SET_READ_CONSISTENCY_LEVEL_PATTERN, statement)) {
-      throw new SQLException(
-          "IoTDB Stand-alone version does not support setting read-insert consistency level");
-    } else {
-      return false;
-    }
-  }
-
   private TSExecuteStatementResp executeQueryStatement(long statementId, PhysicalPlan plan) {
     long t1 = System.currentTimeMillis();
     try {
       TSExecuteStatementResp resp;
       if (plan instanceof AuthorPlan) {
         resp = executeAuthQuery(plan);
-      } else if (plan instanceof ShowTTLPlan) {
-        resp = executeShowTTL();
+      } else if (plan instanceof ShowPlan) {
+        resp = executeShow((ShowPlan) plan);
       } else {
         resp = executeDataQuery(plan);
       }
@@ -716,7 +656,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       // generate the queryId for the operation
       long queryId = generateQueryId();
       // put it into the corresponding Set
-      Set<Long> queryIdSet = statementId2QueryId.get().computeIfAbsent(statementId, k -> new HashSet<>());
+      Set<Long> queryIdSet = statementId2QueryId.get()
+          .computeIfAbsent(statementId, k -> new HashSet<>());
       queryIdSet.add(queryId);
 
       TSHandleIdentifier operationId = new TSHandleIdentifier(
@@ -767,6 +708,19 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     return columnTypes;
   }
 
+  private TSExecuteStatementResp executeShow(ShowPlan showPlan) throws Exception {
+    switch (showPlan.getShowContentType()) {
+      case TTL:
+        return executeShowTTL();
+      case FLUSH_TASK_INFO:
+        return executeShowFlushTaskInfo();
+      case DYNAMIC_PARAMETER:
+        return executeShowDynamicParameter();
+      default:
+        logger.error("Unsupported show content type: {}", showPlan.getShowContentType());
+        throw new Exception("Unsupported show content type:" + showPlan.getShowContentType());
+    }
+  }
 
   private TSExecuteStatementResp executeShowTTL() {
     TSExecuteStatementResp resp =
@@ -783,6 +737,36 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     return resp;
   }
 
+  private TSExecuteStatementResp executeShowFlushTaskInfo() {
+    TSExecuteStatementResp resp =
+        getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS));
+    resp.setIgnoreTimeStamp(true);
+    List<String> columns = new ArrayList<>();
+    List<String> columnTypes = new ArrayList<>();
+    columns.add(ITEM);
+    columns.add(VALUE);
+    columnTypes.add(TSDataType.TEXT.toString());
+    columnTypes.add(TSDataType.INT64.toString());
+    resp.setColumns(columns);
+    resp.setDataTypeList(columnTypes);
+    return resp;
+  }
+
+  private TSExecuteStatementResp executeShowDynamicParameter() {
+    TSExecuteStatementResp resp =
+        getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS));
+    resp.setIgnoreTimeStamp(true);
+    List<String> columns = new ArrayList<>();
+    List<String> columnTypes = new ArrayList<>();
+    columns.add(PARAMETER);
+    columns.add(VALUE);
+    columnTypes.add(TSDataType.TEXT.toString());
+    columnTypes.add(TSDataType.INT64.toString());
+    resp.setColumns(columns);
+    resp.setDataTypeList(columnTypes);
+    return resp;
+  }
+
   private TSExecuteStatementResp executeAuthQuery(PhysicalPlan plan) {
     TSExecuteStatementResp resp = getTSExecuteStatementResp(getStatus(TSStatusCode.SUCCESS_STATUS));
     resp.setIgnoreTimeStamp(true);
@@ -1164,7 +1148,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     }
 
     long stmtId = req.getStmtId();
-    InsertPlan plan = (InsertPlan) operationStatus.get().computeIfAbsent(stmtId, k -> new InsertPlan());
+    InsertPlan plan = (InsertPlan) operationStatus.get()
+        .computeIfAbsent(stmtId, k -> new InsertPlan());
 
     // the old parameter will be used if new parameter is not set
     if (req.isSetDeviceId()) {
@@ -1351,7 +1336,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   @Override
   public long requestStatementId() {
     long statementId = statementIdGenerator.get();
-    statementIdGenerator.set(statementId+1);
+    statementIdGenerator.set(statementId + 1);
     return statementId;
   }
 
@@ -1383,7 +1368,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
   private long generateQueryId() {
     long queryId = queryIdGenerator.get();
-    queryIdGenerator.set(queryId+1);
+    queryIdGenerator.set(queryId + 1);
     return queryId;
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java b/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
index eec5c7b..2877bef 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
@@ -37,6 +37,7 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
 import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
 import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.qp.utils.MemIntQpExecutor;
 import org.apache.iotdb.db.query.fill.LinearFill;
 import org.apache.iotdb.db.query.fill.PreviousFill;
@@ -494,4 +495,20 @@ public class PhysicalPlanTest {
     LoadConfigurationPlan plan = (LoadConfigurationPlan) processor.parseSQLToPhysicalPlan(metadata);
     assertEquals("LOAD_CONFIGURATION", plan.toString());
   }
+
+  @Test
+  public void testShowDynamicParameter() throws QueryProcessException, MetadataException {
+    String metadata = "show dynamic parameter";
+    QueryProcessor processor = new QueryProcessor(new MemIntQpExecutor());
+    ShowPlan plan = (ShowPlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals("SHOW DYNAMIC_PARAMETER", plan.toString());
+  }
+
+  @Test
+  public void testShowFlushInfo() throws QueryProcessException, MetadataException {
+    String metadata = "show flush task info";
+    QueryProcessor processor = new QueryProcessor(new MemIntQpExecutor());
+    ShowPlan plan = (ShowPlan) processor.parseSQLToPhysicalPlan(metadata);
+    assertEquals("SHOW FLUSH_TASK_INFO", plan.toString());
+  }
 }