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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 6a88895  [IOTDB-2061] Add max cached buffer size and max concurrent 
sub query parameter (#4486)
6a88895 is described below

commit 6a88895ce3b1afc300b0fda95a5010dd315f0ff0
Author: Xiangwei Wei <[email protected]>
AuthorDate: Sun Nov 28 01:34:13 2021 +0800

    [IOTDB-2061] Add max cached buffer size and max concurrent sub query 
parameter (#4486)
---
 server/src/assembly/resources/conf/iotdb-engine.properties   |  7 +++----
 server/src/assembly/resources/conf/iotdb-env.bat             |  4 ++++
 server/src/assembly/resources/conf/iotdb-env.sh              |  7 ++++++-
 .../src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java  | 12 ++++++------
 .../main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  9 +++------
 .../org/apache/iotdb/db/query/pool/QueryTaskPoolManager.java | 10 ++++++++--
 6 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties 
b/server/src/assembly/resources/conf/iotdb-engine.properties
index 3e2da93..aad2f9d 100644
--- a/server/src/assembly/resources/conf/iotdb-engine.properties
+++ b/server/src/assembly/resources/conf/iotdb-engine.properties
@@ -284,10 +284,6 @@ timestamp_precision=ms
 # Datatype: int
 # concurrent_flush_thread=0
 
-# How many threads can concurrently query. When <= 0, use CPU core number.
-# Datatype: int
-# concurrent_query_thread=0
-
 # whether take over the memory management by IoTDB rather than JVM when 
serializing memtable as bytes in memory
 # (i.e., whether use ChunkBufferPool), value true, false
 # Datatype: boolean
@@ -530,6 +526,9 @@ timestamp_precision=ms
 # Datatype: int
 # query_timeout_threshold=60000
 
+# The max number of sub query thread
+# max_concurrent_sub_query_thread=8
+
 ####################
 ### Metadata Cache Configuration
 ####################
diff --git a/server/src/assembly/resources/conf/iotdb-env.bat 
b/server/src/assembly/resources/conf/iotdb-env.bat
index 6a165ba..72a1237 100644
--- a/server/src/assembly/resources/conf/iotdb-env.bat
+++ b/server/src/assembly/resources/conf/iotdb-env.bat
@@ -103,9 +103,13 @@ for /f "tokens=1-3" %%j in ('java -version 2^>^&1') do (
 
 @REM maximum direct memory size
 set MAX_DIRECT_MEMORY_SIZE=%MAX_HEAP_SIZE%
+@REM Max cached buffer size, Note: unit can only be B!
+@REM which equals DIRECT_MEMORY_SIZE / threads number that may use direct 
memory / buffer cache size(IOV_MAX) depends on operating system
+set MAX_DIRECT_MEMORY_SIZE=%max_heap_size_in_mb% * 1024 * 1024 / 16 / 1024
 
 set IOTDB_HEAP_OPTS=-Xmx%MAX_HEAP_SIZE% -Xms%HEAP_NEWSIZE% -Xlog:gc:"..\gc.log"
 set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% 
-XX:MaxDirectMemorySize=%MAX_DIRECT_MEMORY_SIZE%
+set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% 
-Djdk.nio.maxCachedBufferSize=%MAX_CACHED_BUFFER_SIZE%
 
 @REM You can put your env variable here
 @REM set JAVA_HOME=%JAVA_HOME%
diff --git a/server/src/assembly/resources/conf/iotdb-env.sh 
b/server/src/assembly/resources/conf/iotdb-env.sh
index a62f99e..954c1ee 100755
--- a/server/src/assembly/resources/conf/iotdb-env.sh
+++ b/server/src/assembly/resources/conf/iotdb-env.sh
@@ -205,8 +205,12 @@ calculate_heap_sizes
 #MAX_HEAP_SIZE="2G"
 # Minimum heap size
 #HEAP_NEWSIZE="2G"
-# maximum direct memory size
+# Maximum direct memory size
 MAX_DIRECT_MEMORY_SIZE=${MAX_HEAP_SIZE}
+# Max cached buffer size, Note: unit can only be B!
+# which equals DIRECT_MEMORY_SIZE / threads number that may use direct memory 
/ buffer cache size(IOV_MAX) depends on operating system
+MAX_CACHED_BUFFER_SIZE=`expr $max_heap_size_in_mb \* 1024 \* 1024 / 16 / 1024`
+echo $MAX_CACHED_BUFFER_SIZE
 
 #true or false
 #DO NOT FORGET TO MODIFY THE PASSWORD FOR SECURITY (${IOTDB_CONF}/jmx.password 
and ${IOTDB_CONF}/jmx.access)
@@ -241,6 +245,7 @@ fi
 IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xms${HEAP_NEWSIZE}"
 IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xmx${MAX_HEAP_SIZE}"
 IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS 
-XX:MaxDirectMemorySize=${MAX_DIRECT_MEMORY_SIZE}"
+IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS 
-Djdk.nio.maxCachedBufferSize=${MAX_CACHED_BUFFER_SIZE}"
 
 echo "Maximum memory allocation pool = ${MAX_HEAP_SIZE}B, initial memory 
allocation pool = ${HEAP_NEWSIZE}B"
 echo "If you want to change this configuration, please check 
conf/iotdb-env.sh(Unix or OS X, if you use Windows, check conf/iotdb-env.bat)."
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 71f9da7..0ef9fbe 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -252,8 +252,8 @@ public class IoTDBConfig {
   /** How many threads can concurrently flush. When <= 0, use CPU core number. 
*/
   private int concurrentFlushThread = 
Runtime.getRuntime().availableProcessors();
 
-  /** How many threads can concurrently query. When <= 0, use CPU core number. 
*/
-  private int concurrentQueryThread = 
Runtime.getRuntime().availableProcessors();
+  /** How many threads can concurrently query. */
+  private int maxConcurrentSubQueryThread = 8;
 
   /** How many threads can concurrently evaluate windows. When <= 0, use CPU 
core number. */
   private int concurrentWindowEvaluationThread = 
Runtime.getRuntime().availableProcessors();
@@ -1159,12 +1159,12 @@ public class IoTDBConfig {
     this.concurrentFlushThread = concurrentFlushThread;
   }
 
-  public int getConcurrentQueryThread() {
-    return concurrentQueryThread;
+  public int getMaxConcurrentSubQueryThread() {
+    return maxConcurrentSubQueryThread;
   }
 
-  void setConcurrentQueryThread(int concurrentQueryThread) {
-    this.concurrentQueryThread = concurrentQueryThread;
+  void setMaxConcurrentSubQueryThread(int maxConcurrentSubQueryThread) {
+    this.maxConcurrentSubQueryThread = maxConcurrentSubQueryThread;
   }
 
   public int getConcurrentWindowEvaluationThread() {
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 17deb09..84f8051 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -440,14 +440,11 @@ public class IoTDBDescriptor {
                   "index_buffer_size", 
Long.toString(conf.getIndexBufferSize()))));
       // end: index parameter setting
 
-      conf.setConcurrentQueryThread(
+      conf.setMaxConcurrentSubQueryThread(
           Integer.parseInt(
               properties.getProperty(
-                  "concurrent_query_thread", 
Integer.toString(conf.getConcurrentQueryThread()))));
-
-      if (conf.getConcurrentQueryThread() <= 0) {
-        
conf.setConcurrentQueryThread(Runtime.getRuntime().availableProcessors());
-      }
+                  "max_concurrent_sub_query_thread",
+                  Integer.toString(conf.getMaxConcurrentSubQueryThread()))));
 
       conf.setmManagerCacheSize(
           Integer.parseInt(
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/pool/QueryTaskPoolManager.java 
b/server/src/main/java/org/apache/iotdb/db/query/pool/QueryTaskPoolManager.java
index fa284b7..41f662c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/pool/QueryTaskPoolManager.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/pool/QueryTaskPoolManager.java
@@ -32,7 +32,10 @@ public class QueryTaskPoolManager extends 
AbstractPoolManager {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(QueryTaskPoolManager.class);
 
   private QueryTaskPoolManager() {
-    int threadCnt = 
IoTDBDescriptor.getInstance().getConfig().getConcurrentQueryThread();
+    int threadCnt =
+        Math.min(
+            Runtime.getRuntime().availableProcessors(),
+            
IoTDBDescriptor.getInstance().getConfig().getMaxConcurrentSubQueryThread());
     pool = IoTDBThreadPoolFactory.newFixedThreadPool(threadCnt, 
ThreadName.QUERY_SERVICE.getName());
   }
 
@@ -53,7 +56,10 @@ public class QueryTaskPoolManager extends 
AbstractPoolManager {
   @Override
   public void start() {
     if (pool == null) {
-      int threadCnt = 
IoTDBDescriptor.getInstance().getConfig().getConcurrentQueryThread();
+      int threadCnt =
+          Math.min(
+              Runtime.getRuntime().availableProcessors(),
+              
IoTDBDescriptor.getInstance().getConfig().getMaxConcurrentSubQueryThread());
       pool =
           IoTDBThreadPoolFactory.newFixedThreadPool(threadCnt, 
ThreadName.QUERY_SERVICE.getName());
     }

Reply via email to