Merge pull request #61 from wcsoft/master

Update benchmark database name to new one, remove unused code from pom.xml
diff --git a/README.md b/README.md
index dd64352..247551d 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,272 @@
-# incubator-shardingsphere-benchmark
-## shadingsphere-benchmark-ui
-### Builds setup
-```bash
+# What is ShardingSphere Benchmark
+ShardingSphere Benchmark is a performance tool to check its benchmark of core scenarios which are in figure below. The amount of benchmark cases is 96, the formula is 3(Scenarios) * 4(Products) * 2(SQL Type) * 4(Rules).
 
-shadingsphere-benchmark-ui/README.md
+* Full Route: sql will route to all of physical tables. 
+* Range Route: sql will route to parts of physical tables.
+* Single Route: sql will route to only one physical table.
+
+|       *Scenarios*       |  *Products*           |      *SQL TYPE*        | *Rules*  | 
+| ----------------------- | --------------------- | ---------------------- | ------------------------ |
+| Full Route              |  ShardingSphere-JDBC  |  Select                |   Encrypt                | 
+| Range Route             |  ShardingSphere-Proxy |  Insert/Update/Delete  |   Master-Slave           |  
+| Single Route            |  MYSQL                |                        |   Sharding               | 
+|                         |                       |                        |   Sharding-Master-Slave-Encrypt   | 
+
+## ShardingSphere Benchmark Project Structure
+It's much help to comprehend ShardingSphere Benchmark project structure to perform benchmark test easily. Refer to list below.
 
 ```
-## shardingsphere-benchmark
-### Builds setup
-```bash
-
-step 1: build shardingsphere-benchmark
-# Notes: this tool depend on the master of incubator-shardingsphere, you should compile the master of incubator-shardingsphere first if the version of master has not been released.
-# mvn clean install
-
-step 2: copy target jar to jmeter lib/ext
-# cp shardingsphere-benchmark-1.0-SNAPSHOT-jar-with-dependencies.jar  apache-jmeter-**/lib/ext
-
-step 3: run jmeter test plan with target class
-# jmeter –n –t test_plan/test.jmx
-# test.jmx example:https://github.com/apache/incubator-shardingsphere-benchmark/tree/master/report/script/test_plan/test.jmx
-# Notes: test.jmx is just an example, you should change the name of class according to your  performance code, and the ip/port in shardingsphere-benchmark should be modified to real machine.
-
+project
+│   README.md
+│   README_ZH.md    
+│
+└───src/main/java
+│   │     
+│   └───org/apache/shardingsphere/benchmark
+│       │   
+│       └───org/apache/shardingsphere/benchmark/bean
+│       │
+│       └───org/apache/shardingsphere/benchmark/common
+│       │       └───org/apache/shardingsphere/benchmark/common/file           // File common action such as modification of property file, xml or yaml.
+│       │       └───org/apache/shardingsphere/benchmark/common/statistic      // Statistics for JMeter result.
+│       │       
+│       └───org/apache/shardingsphere/benchmark/db                             // Database action inlcuding querying, inserting, updating, deleting.
+│       │ 
+│       └───org/apache/shardingsphere/benchmark/jemeter                        // JMeter test plan for different scenarios.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/common         // Initialization for base data and physical databases/tables. 
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/fullrouting    // JMeter test plan for full routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/rangerouting   // JMeter test plan for range routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/singlerouting  // JMeter test plan for single routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+└───src/main/resources
+│   │     
+│   └───common
+│   │    │
+│   │    └───config
+│   │    │ initconfig-testplan.jmx                      // Initialization for creating databases/tables for benchmark and bencmark result.
+│   │    └───datapreparation
+│   │   │   │
+│   │   │   └───jdbc                                    //Base data initialization for different scenarios to MYSQL.
+│   │   │   │ jdbc-cleardata-testplan.jmx               // Clear base data for MYSQL.
+│   │   │   │ jdbc-createdata-testplan.jmx              // Create base data for MYSQL.
+│   │   │   └───shardingsphere                          // Base data initialization for different scenarios to ShardingSphere-JDBC and ShardingSphere-Proxy.
+│   │   │   │   │ 
+│   │   │   │   └───encrypt                             
+│   │   │   │   │ shardingsphere-encrypt-cleardata-testplan.jmx            // Clear base data with encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-encrypt-createdata-testplan.jmx           // Create base data with encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───masterslave
+│   │   │   │   │ shardingsphere-masterslave-cleardata-testplan.jmx        // Clear base data with masterslave rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-masterslave-createdata-testplan.jmx       // Create base data with masterslave rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───sharding
+│   │   │   │   │ shardingsphere-sharding-cleardata-testplan.jmx           // Clear base data with sharding rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-sharding-createdata-testplan.jmx          // Create base data with sharding rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───sharding-masterslave-encrypt
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx    // Clear base data with sharding-masterslave-encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx   // Create base data with sharding-masterslave-encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │
+│   └───testplan                                           
+│   │    │       
+│   │    └───fullrouting                // Full routine scenario
+│   │   │   │   │
+│   │   │   │   └───encrypt            //Encrypt rule
+│   │   │   │   │ jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx               // For MYSQL, insert-update-delete test plan with encrypt rule.  
+│   │   │   │   │ jdbc-fullrouting-encrypt-select-testplan.jmx                           // For MYSQL, select test plan with encrypt rule.
+│   │   │   │   │ proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx              // For ShardingSphere-Proxy, insert-update-delete test plan with encrypt rule.
+│   │   │   │   │ proxy-fullrouting-encrypt-select-testplan.jmx                          // For ShardingSphere-Proxy, select test plan with encrypt rule.
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx       // For ShardingSphere-JDBC, insert-update-delete test plan with encrypt rule.
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-select-testplan.jmx                   // For ShardingSphere-JDBC, select test plan with encrypt rule.
+│   │   │   │   └───masterslave        //master-slave rule
+│   │   │   │   │ proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx          // For ShardingSphere-Proxy, insert-update-delete test plan with master-slave rule.  
+│   │   │   │   │ proxy-fullrouting-masterslave-select-testplan.jmx                      // For ShardingSphere-Proxy, select test plan with master-slave rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx   // For ShardingSphere-JDBC, insert-update-delete test plan with master-slave rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-select-testplan.jmx               // For ShardingSphere-JDBC, select test plan with master-slave rule.  
+│   │   │   │   └───sharding           //sharding rule
+│   │   │   │   │ proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx             // For ShardingSphere-Proxy, insert-update-delete test plan with sharding rule.  
+│   │   │   │   │ proxy-fullrouting-sharding-select-testplan.jmx                         // For ShardingSphere-Proxy, select test plan with sharding rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx      // For ShardingSphere-JDBC, insert-update-delete test plan with sharding rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-select-testplan.jmx                  // For ShardingSphere-JDBC, select test plan with sharding rule.  
+│   │   │   │   └───sharding-masterslave-encrypt    //sharding-masterslave-encrypt rule       
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx          // For ShardingSphere-Proxy, insert-update-delete test plan with sharding-master-slave-encrypt rule.  
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx                      // For ShardingSphere-Proxy, select test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx   // For ShardingSphere-JDBC, insert-update-delete test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx               // For ShardingSphere-JDBC, select test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │
+│   │   └───rangerouting  // Range routine scenario, file names of its test plans are similar with ones under *fullrouting* directory, please refer to them. 
+│   │   │       
+│   │   └───singlerouting // Single routine scenario, file names of its test plans are similar with ones under *fullrouting* directory, please refer to them. 
+│   │   │       
+│   │   └───statistic    
+│   │   │ ss-benchmark-statistic-testplan.jmx  
+│   └───yaml
+│   │    │   server.yaml                                           // It's used by ShardingSphere-Proxy.
+│   │    │   └───fullrouting                //Full routine
+│   │    │   │   └───encrypt                // Encrypt rule.
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-encrypt.yaml            // For ShardingSphere-Proxy, it's for full route with encrypt rule.
+│   │    │   │   │   └───shardingjdbc                                   
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-encrypt.yaml     // For ShardingSphere-JDBC, it's for full route with encrypt rule.
+│   │    │   │   └───masterslave
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-masterslave.yaml        // For ShardingSphere-Proxy, it's for full route with master-slave rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-masterslave.yaml // For ShardingSphere-JDBC, it's for full route with master-slave rule.
+│   │    │   │   └───sharding
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding.yaml           // For ShardingSphere-Proxy, it's for full route with sharding rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding.yaml    // For ShardingSphere-JDBC, it's for full route with sharding rule.
+│   │    │   │   └───sharding-masterslave-encrypt
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding-masterslave-enc.yaml             // For ShardingSphere-Proxy, it's for full route with sharding-masterslave-enrypt rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml  // For ShardingSphere-JDBC, it's for full route with sharding-masterslave-enrypt rule.
+│   │    │   └───rangerouting             // Range routine scenario, file names of its yaml are similar with ones under *fullrouting* directory, please refer to them. 
+│   │    │   │
+│   │    │   └───singlerouting            // Single routine scenario, file names of its yaml are similar with ones under *fullrouting* directory, please refer to them. 
 ```
-## sharding-proxy-conf
+
+## How to work
+ShardingSphere Benchmark is mainly achieved by JMeter in summary, running as command *jmeter -n -t testplan*.
+
+### Environment Preparation
+Due to the diversity of user system environment, we don't provide an unified installation mode for automatical deployment, please install them below manually. You could skip it if having them.
+
+#### Install MYSQL 
+* Get [MYSQL installation](https://dev.mysql.com/downloads/mysql/) from official website depending on the system you use. It's appreciated to choose MYSQL version above 5.
+* Install and set up MYSQL according to its [MYSQL Doc](https://dev.mysql.com/doc), please choose right version of MYSQL doc in compliance with your installation.
+
+#### Install JDK
+* Get [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html) from official website depending on the system you use. It's appreciated to choose JDK version above 7.
+* Install and set up JDK according to *Installation Instructions* [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html).
+
+#### Install Maven
+* Get [Maven installation](http://maven.apache.org/download.cgi) from official website depending on the system you use. It's appreciated to choose MYSQL version 3.6.
+* Install ans set up Maven according to [Maven doc](http://maven.apache.org/install.html).
+
+#### Get JDBC Jar
+* Get JDBC Jar from official website [JDBC Jar url](https://dev.mysql.com/downloads/connector/j/). Its version depends on MYSQL you use.
+
+#### Build ShardingSphere Benchmark
+* Get source code of ShardingSphere from [ShardingSphere Benchmark Code URL](https://github.com/wcsoft/shardingsphere-benchmark).
+* Build ShardingSphere Benchmark project by running command below.
 ```bash
-The configurations for Sharding-Proxy with four scenes in benchmark are given here.
+mvn clean install
+```
 
-# machines info
-Please read report/machine_description file.
+#### Install ShardingSphere-Proxy
+* Get source code of ShardingSphere from [ShardingSphere Source Code URL](https://github.com/apache/shardingsphere), the features for different branches refer to [ShardingSphere Doc](https://shardingsphere.apache.org/).
+* Get ShardingSphere-Proxy installation by running command below. For ShardingSphere 4.x, it's located at *{ShardingSphere_project_base_dir}/sharding-distribution/sharding-proxy-distribution/target*; for ShardingSphere 5.x, it's located at *{project_base_dir}/shardingsphere-distribution/shardingsphere-proxy-distribution/target*.
+```bash
+mvn clean install -Prelease
+```
+* Decompress ShardingSphere-proxy above, delete yaml at *{ShardingSphere-Proxy_base_dir}/conf*, copy *server.yaml* and *config-proxy-\*.yaml* which is corresponding test scenarios. These yaml are at *{ShardingSphere Benchmark base dir}/src/main/resources/yaml*.
+* Leave ShardingSphere Benchmark jar and JDBC jar into *{ShardingSphere-Proxy_base_dir}/lib*.
+* Start ShardingSphere-Proxy, startup scripts are at *{ShardingSphere-Proxy_base_dir}/bin*, choose the right script according to your system.
 
+
+#### Install JMeter
+* Get [JMeter installation](https://jmeter.apache.org/download_jmeter.cgi) from official website depending on the JDK you use. It's appreciated to choose JMeter version 5.3.
+* Install and set up JMeter according to [JMeter doc](https://jmeter.apache.org/usermanual/get-started.html).
+* Leave ShardingSphere Benchmark jar into *{JMeter_base_dir}/lib/ext*.
+
+
+#### Configuration
+We have extracted necessary user configuration which is in *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*. You have to change configuration list below as yours. By default we configure any ip with host in the code or yaml to prevent ip leakage and cause security problems。 We provide the unified host configuration at *{ShardingSphere Benchmark base dir}/src/main/resources/config/shardingsphere_benchmark_machline_hosts*, modify ips as yours and replace the host file. There is no need to change those ips if running benchmark at local machine.
+
+```bash
+// It is base directory of ShardingSphere project.
+shardingsphere.project.base.path=/export/jenkins/workspace/ShardingSphere-Benchmark-Deploy
+// It is base directory of ShardingSphere benchmark project.
+shardingsphere.benchmark.project.base.path=/export/benchmark/shardingsphere-benchmark
+// It is base directory of ShardingSphere benchmark result.
+shardingsphere.benchmark.result.base.path=/export/shardingsphere-benchmark/result
+// It is database port of ShardingSphere benchmark result accessing.
+shardingsphere.benchmark.result.database.port=3306
+// It is database username of ShardingSphere benchmark result using.
+shardingsphere.benchmark.result.database.username=root
+// It is database password of ShardingSphere benchmark result, we can leave it empty by default.
+shardingsphere.benchmark.result.database.password=
+// It is host or ip list of ShardingSphere benchmark using.
+shardingsphere.benchmark.database.machine.host.list=ss.benchmark.fullrouting.encrypt.ds0;ss.benchmark.fullrouting.encrypt.ds1;ss.benchmark.fullrouting.encrypt.ds2
+// It is database host of ShardingSphere benchmark result using. Statistics of ShardingSphere benchmark will be stored into the database. 
+shardingsphere.benchmark.result.database.host=ss.benchmark.result
+```
+
+#### Init Database/Table
+We have to prepare database and table for benchmark. They are configured at *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*, run the command below to create physical databases and tables.
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/initdb/initdb-testplan.jmx
+```
+
+#### Init Base Data
+All of initing base data test plans for different scenarios are at *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation*. Here is a command for instance, which scenario to test in final depends on your choice.  
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
+```
+
+#### Run a Test Plan
+All of test plans for different scenarios are at *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/*. Here is a command for instance, which scenario to test in final depends on your choice.  
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
+```
+
+After running the command successfully, it generates a JMeter result file located at *shardingsphere.benchmark.result.base.path* which is configured in *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*. The JMeter result looks like the figure below.
+```bash
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-74,,true,,0,0,100,100,0,0,0
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-65,,true,,0,0,100,100,0,0,0
+1598274390236,8878,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-42,,true,,0,0,100,100,0,0,0
+1598274390234,8917,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-15,,true,,0,0,100,100,0,0,0
+1598274390234,9002,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-3,,true,,0,0,100,100,0,0,0
+```
+
+#### Statistics
+We could calculate the general statistics by JMeter result such as TPS. There are two physical tables to store the statistics, *benchmark_result* and *benchmark_avg_result*. You could query the result from the databases directly as well if you prefer. Trigger the sql below to get latest record for the test.
+
+* Physical table *benchmark_result*: intermediate result will be here, its table structure is below.
+
+|       *Field*       |  *Description*           |   
+| ----------------------- | --------------------- |
+| id              |  Primary key generated automatically.  | 
+| product         |  Tested product that is ShardingJDBC, ShardingProxy or MYSQL. | 
+| version         |  ShardingSphere version configured at user-config.properties.                | 
+| scenario        |  Three kinds for benchmark including FullRouting, RangeRouting, SingleRouting. | 
+| rules           |  Four kinds of rules for benchmark including Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt. | 
+| tps             |  Tps which is got from JMeter file, the formula is *total count / total time*. | 
+| total           |  Sample count which is taken out the head data and tail data.                | 
+| maxCost         |  Max time cost of running every sql.                | 
+| minCost         |  Min time cost of running every sql. | 
+| dbsql           |  Actual sql to run.                | 
+| dboperation     |  Actual sql type to run including Select and Insert+Update+Delete. | 
+| concurrency     |  Count of concurrency configured at user-config.properties.                | 
+| tableshardingcount|  Table sharding count configured at user-config.properties, used at yaml.                 | 
+| dbshardingcount  |  Db sharding count configured at user-config.properties, used at yaml.                | 
+
+
+* Physical table *benchmark_avg_result*: average result will be here, its table structure is below.
+
+|       *Field*       |  *Description*           |   
+| ----------------------- | --------------------- |
+| id              |  Primary key generated automatically.  | 
+| product         |  Tested product that is ShardingJDBC, ShardingProxy or MYSQL. | 
+| version         |  ShardingSphere version configured at user-config.properties.                | 
+| scenario        |  Three kinds for benchmark including FullRouting, RangeRouting, SingleRouting. | 
+| rules           |  Four kinds of rules for benchmark including Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt. | 
+| avg_tps         |  Average tps for the same test, the formula is *total tps / total count*. | 
+| total           |  Sample count which is taken out the head data and tail data.                | 
+| maxCost         |  Max time cost of running every sql.                | 
+| minCost         |  Min time cost of running every sql. | 
+| dbsql           |  Actual sql to run.                | 
+| dboperation     |  Actual sql type to run including Select and Insert+Update+Delete. | 
+| concurrency     |  Count of concurrency configured at user-config.properties.                | 
+| tableshardingcount|  Table sharding count configured at user-config.properties, used at yaml.                 | 
+| dbshardingcount  |  Db sharding count configured at user-config.properties, used at yaml.                | 
+
+Run the command to get statistics.
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
+```
+
+```bash
+select * from benchmark_result order by id limit 1
+select * from benchmark_avg_result order by id limit 1
 ```
\ No newline at end of file
diff --git a/README_ZH.md b/README_ZH.md
new file mode 100644
index 0000000..b374e36
--- /dev/null
+++ b/README_ZH.md
@@ -0,0 +1,272 @@
+# ShardingSphere Benchmark是什么
+ShardingSphere Benchmark是测试ShardingSphere的性能基线工具,目前覆盖的核心场景如下表。 覆盖的测试总量为96,计算公式 3(Scenarios) * 4(Products) * 2(SQL Type) * 4(Rules)。
+
+* Full Route:所执行sql会路由到所有物理表中。 
+* Range Route:所执行sql会路由到部分物理表中。
+* Single Route:所执行sql只会路由到一张物理表中。
+
+|       *Scenarios*       |  *Products*           |      *SQL TYPE*        | *Rules*  | 
+| ----------------------- | --------------------- | ---------------------- | ------------------------ |
+| Full Route              |  ShardingSphere-JDBC  |  Select                |   Encrypt                | 
+| Range Route             |  ShardingSphere-Proxy |  Insert/Update/Delete  |   Master-Slave           |  
+| Single Route            |  MYSQL                |                        |   Sharding               | 
+|                         |                       |                        |   Sharding-Master-Slave-Encrypt   | 
+
+
+
+## ShardingSphere Benchmark 项目结构
+更全面的理解ShardingSphere Benchmark项目结构,会帮助你轻松运行ShardingSphere Benchmark相关测试。请参考下面目录及注释。
+
+```
+project
+│   README.md
+│   README_ZH.md    
+│
+└───src/main/java
+│   │     
+│   └───org/apache/shardingsphere/benchmark
+│       │   
+│       └───org/apache/shardingsphere/benchmark/bean
+│       │
+│       └───org/apache/shardingsphere/benchmark/common
+│       │       └───org/apache/shardingsphere/benchmark/common/file           // 文件修改相关操作模块,处理文件类型包括 yaml,xml,properties。
+│       │       └───org/apache/shardingsphere/benchmark/common/statistic      // JMeter生成结果统计模块。
+│       │       
+│       └───org/apache/shardingsphere/benchmark/db                             // 数据库操作模块,包括增删改查。
+│       │ 
+│       └───org/apache/shardingsphere/benchmark/jemeter                        // 不同场景下的JMeter测试计划。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/common         // 初始化基础数据及ShardingSphere benchmark测试需要的物理库/物理表。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/fullrouting    // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在全路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/rangerouting   // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在范围路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/singlerouting  // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在单路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+└───src/main/resources
+│   │     
+│   └───common
+│   │    │
+│   │    └───config
+│   │    │ initconfig-testplan.jmx                      // 初始化ShardingSphere Benchmark测试需要的物理库和物理表。
+│   │    └───datapreparation
+│   │   │   │
+│   │   │   └───jdbc                                    // MYSQL产品的基础数据初始化。
+│   │   │   │ jdbc-cleardata-testplan.jmx               // MYSQL基础数据清除。
+│   │   │   │ jdbc-createdata-testplan.jmx              // MYSQL基础数据创建。
+│   │   │   └───shardingsphere                          // ShardingSphere-JDBC 和 ShardingSphere-Proxy基础数据初始化,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│   │   │   │   │ 
+│   │   │   │   └───encrypt                             
+│   │   │   │   │ shardingsphere-encrypt-cleardata-testplan.jmx            // 基于脱敏规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-encrypt-createdata-testplan.jmx           // 基于脱敏规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───masterslave
+│   │   │   │   │ shardingsphere-masterslave-cleardata-testplan.jmx        // 基于主从规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-masterslave-createdata-testplan.jmx       // 基于主从规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───sharding
+│   │   │   │   │ shardingsphere-sharding-cleardata-testplan.jmx           // 基于分片规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-sharding-createdata-testplan.jmx          // 基于分片规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───sharding-masterslave-encrypt
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx    // 基于混合规则分片-主从-脱敏ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx   // 基于混合规则分片-主从-脱敏ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。
+│   │   │   │   │
+│   └───testplan                                           
+│   │    │       
+│   │    └───fullrouting                // 全路由场
+│   │   │   │   │
+│   │   │   │   └───encrypt            //脱敏规则
+│   │   │   │   │ jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx               // 基于脱敏规则,MYSQL产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ jdbc-fullrouting-encrypt-select-testplan.jmx                           // 基于脱敏规则,MYSQL产品全路由场景下的select测试计划。 
+│   │   │   │   │ proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx              // 基于脱敏规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ proxy-fullrouting-encrypt-select-testplan.jmx                          // 基于脱敏规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。 
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx       // 基于脱敏规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-select-testplan.jmx                   // 基于脱敏规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。
+│   │   │   │   └───masterslave        //主从规则
+│   │   │   │   │ proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx          // 基于主从规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ proxy-fullrouting-masterslave-select-testplan.jmx                      // 基于主从规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。 
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx   // 基于主从规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-select-testplan.jmx               // 基于主从规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。    
+│   │   │   │   └───sharding           //sharding rule
+│   │   │   │   │ proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx             // 基于分片规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ proxy-fullrouting-sharding-select-testplan.jmx                         // 基于分片规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx      // 基于分片规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-select-testplan.jmx                  // 基于分片规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。 
+│   │   │   │   └───sharding-masterslave-encrypt    //sharding-masterslave-encrypt rule       
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx          // 基于混合规则分片-主从-脱敏,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx                      // 基于混合规则分片-主从-脱敏,ShardingSphere-Proxy产品全路由场景下的select测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx   // 基于混合规则分片-主从-脱敏,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx               // 基于混合规则分片-主从-脱敏,ShardingSphere-JDBC产品全路由场景下的select测试计划。   
+│   │   │   │   │
+│   │   └───rangerouting  //所有范围路由相关的测试计划文件名称和全路由类似,可参考全路由场景,不在此一一列出所有文件。
+│   │   │       
+│   │   └───singlerouting //所有单路由相关的测试计划文件名称和全路由类似,可参考全路由场景,不在此一一列出所有文件。
+│   │   │       
+│   │   └───statistic     // 统计结果
+│   │   │ ss-benchmark-statistic-testplan.jmx  //统计JMeter结果的测试计划,统计结果入库。
+│   └───yaml
+│   │    │   server.yaml                                           // ShardingSphere-Proxy 使用到的配置文件.
+│   │    │   └───fullrouting                //全路由场景
+│   │    │   │   └───encrypt                // 脱敏规则下的yaml配置文件
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-encrypt.yaml            // ShardingSphere-Proxy产品,配置脱敏规则的配置文件。
+│   │    │   │   │   └───shardingjdbc                                   
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-encrypt.yaml     // ShardingSphere-JDBC产品,配置脱敏规则的配置文件。
+│   │    │   │   └───masterslave
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-masterslave.yaml        // ShardingSphere-Proxy产品,配置主从规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-masterslave.yaml // ShardingSphere-JDBC产品,配置主从规则的配置文件。
+│   │    │   │   └───sharding
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding.yaml           // ShardingSphere-Proxy产品,配置分片规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding.yaml    // ShardingSphere-JDBC产品,配置分片规则的配置文件。
+│   │    │   │   └───sharding-masterslave-encrypt
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding-masterslave-enc.yaml             // ShardingSphere-Proxy产品,配置混合规则 分片-主从-脱敏 规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml  // ShardingSphere-JDBC产品,配置混合规则 分片-主从-脱敏 规则的配置文件。
+│   │    │   └───rangerouting             // 范围路由下的所有yaml配置文件,文件名称和全路由类似,可参考全路由场景,一一列出所有文件。 
+│   │    │   │
+│   │    │   └───singlerouting            // 单路由下的所有yaml配置文件,文件名称和全路由类似,可参考全路由场景,一一列出所有文件。
+```
+
+
+
+
+## 运行 ShardingSphere Benchmark
+简单来说ShardingSphere Benchmark主要基于JMeter实现的性能测试工具,执行命令 *jmeter -n -t testplan* 便可运行。
+
+### 环境准备
+由于用户环境的多样性,我们没有提供统一的自动化安装基础环境方式,所以请手动安装基础环境,如已安装,可忽略下列步骤。
+
+#### 安装 MYSQL 
+* 从官网下载MYSQL安装程序,最好为5.x以上版本,MYSQL官网地址:[MYSQL installation](https://dev.mysql.com/downloads/mysql/)。
+* 参考MYSQL官方文档进行安装,请保持版本一致,MYSQL官方文档地址:[MYSQL Doc](https://dev.mysql.com/doc)。
+
+#### 安装 JDK
+* 从官网下载JDK安装程序,版本最好为JDK7以上,JDK下载地址:[JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html)。
+* 参考JDK官方文档进行安装配置,JDK官方文档地址: [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html)。
+
+#### 安装 Maven
+* 从官网下载Maven安装程序(http://maven.apache.org/download.cgi) from official website depending on the system you use。
+* 参考Maven官方文档进行安装配置 [Maven doc](http://maven.apache.org/install.html)。
+
+#### 获取 JDBC Jar
+* 从官网下载正确版本的JDBC Jar文件。
+
+#### 构建 ShardingSphere Benchmark
+* 获取ShardingSphere Benchmark源码 [ShardingSphere Benchmark Code URL](https://github.com/wcsoft/shardingsphere-benchmark)。
+* 按照如下命令构建ShardingSphere Benchmark。
+```bash
+mvn clean install
+```
+
+#### 安装 ShardingSphere-Proxy
+* 获取ShardingSphere源码 [ShardingSphere Source Code URL](https://github.com/apache/shardingsphere), the features for different branches refer to [ShardingSphere Doc](https://shardingsphere.apache.org/)。
+* 按照如下命令构建ShardingSphere,并获取ShardingSphere-Proxy安装包。对于ShardingSphere 4.x版本,ShardingSphere-Proxy安装包所在路径为 *{project_base_dir}/sharding-distribution/sharding-proxy-distribution/target*; 对于ShardingSphere 5.x版本,它的安装程序所在路径为 *{project_base_dir}/shardingsphere-distribution/shardingsphere-proxy-distribution/target*。
+```bash
+mvn clean install -Prelease
+```
+* 解压ShardingSphere-proxy,将以上获取的JDBC Jar和ShardingSphere Benchmark Jar 放在 *{ShardingSphere-Proxy_base_dir}/lib/* 路径下。
+* 复制ShardingSphere Benchmark jar 和 JDBC jar到 *{ShardingSphere-Proxy_base_dir}/lib*路径下。
+* 启动ShardingSphere-Proxy,启动脚步路径为 *{ShardingSphere-Proxy_base_dir}/bin*,根据当前使用的系统选择正确的启动脚步。
+
+
+#### 安装 JMeter
+* 从官网获取JMeter安装程序 [JMeter installation](https://jmeter.apache.org/download_jmeter.cgi),版本最好选择5.3。
+* 依照官方文档安装配置JMeter [JMeter doc](https://jmeter.apache.org/usermanual/get-started.html)。
+* 拷贝ShardingSphere Benchmark jar到 *{JMeter_base_dir}/lib/ext* 路径下。
+
+
+#### 配置
+我们提取了ShardingSphere benchmark项目中所有用户相关配置,这些配置存在于 *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*文件中,所以需要根据当前运行环境进行修改。此外ShardingSphere benchmark工程中涉及到ip使用均以host方式进行配置,以防泄露引发安全问题,对于host配置已提供示例文件,文件路径为 *{ShardingSphere Benchmark base dir}/src/main/resources/config/shardingsphere_benchmark_machline_hosts*,需要依据当前环境修改对应ip并添加到host文件中。如果仅在本地测试,无需替换ip。
+
+```bash
+// ShardingSphere工程根目录.
+shardingsphere.project.base.path=/export/jenkins/workspace/ShardingSphere-Benchmark-Deploy
+// ShardingSphere benchmark工程根目录。
+shardingsphere.benchmark.project.base.path=/export/benchmark/shardingsphere-benchmark
+// ShardingSphere benchmark结果输出根目录。
+shardingsphere.benchmark.result.base.path=/export/shardingsphere-benchmark/result
+// 存储ShardingSphere benchmark结果数据库端口号。
+shardingsphere.benchmark.result.database.port=3306
+// 存储ShardingSphere benchmark结果数据库用户名。
+shardingsphere.benchmark.result.database.username=root
+// 存储ShardingSphere benchmark结果数据库密码。
+shardingsphere.benchmark.result.database.password=
+// 存储ShardingSphere benchmark数据库机器ip列表或者host列表。
+shardingsphere.benchmark.database.machine.host.list=ss.benchmark.fullrouting.encrypt.ds0;ss.benchmark.fullrouting.encrypt.ds1;ss.benchmark.fullrouting.encrypt.ds2
+// 存储ShardingSphere benchmark结果数据库机器ip或者host。
+shardingsphere.benchmark.result.database.host=ss.benchmark.result
+```
+
+#### 初始 物理库/物理表
+运行ShardingSphere Benchmark前,需要创建对应的物理数据库和物理表;根据用户配置 分库数量/分表数量/ShardingSphereBenchmark结果输出根路径/ShardingSphere版本/并发量,进行统一自动化部署。以上配置均在 *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties* 文件中,运行如下命令完成上述任务。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/config/initconfig-testplan.jmx
+```
+
+#### 初始 基础数据
+所有ShardingSphere Benchmark测试场景会在固定基础数据条件下进行,创建测试数据计划文件存储在 *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/*,执行如下命令完成基础数据创建。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
+```
+
+#### 运行 测试计划
+所有的测试计划文件存在 *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/*,提供如下示例命令,该命令完成ShardingJdbc产品在单路由,脱敏规则条件下执行select的基线采集。请根据需要选择你关注的场景。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
+```
+
+测试计划成功运行后,生成JMeter结果文件。JMeter生成结果片段如下图。
+```bash
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-74,,true,,0,0,100,100,0,0,0
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-65,,true,,0,0,100,100,0,0,0
+1598274390236,8878,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-42,,true,,0,0,100,100,0,0,0
+1598274390234,8917,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-15,,true,,0,0,100,100,0,0,0
+1598274390234,9002,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-3,,true,,0,0,100,100,0,0,0
+```
+
+#### 统计
+对不同场景下生成的JMeter结果进行统一汇总,统计结果主要以TPS为主。这些结果存储在两个物理表中,分别为 *benchmark_result* and *benchmark_avg_result*,同时将统计结果生成测试报告,报告文件格式为excel。
+
+* 物理表 *benchmark_result*: 同一个场景下,每次测试生成的统计结果存储在该表中,表结构如下。
+
+|       *字段*       |  *描述*           |   
+| ----------------------- | --------------------- |
+| id              |  主键,自动生成。  | 
+| product         |  被测试产品包括ShardingJDBC,ShardingProxy 和 MYSQL。| 
+| version         |  ShardingSphere 版本,配置在user-config.properties文件中。                | 
+| scenario        |  三种测试场景包括FullRouting,RangeRouting,SingleRouting。 | 
+| rules           |  四种规则包括 Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt。 | 
+| tps             |  通过JMeter结果文件计算tps,计算公式为 *total count / total time*。 | 
+| total           |  去除头尾的采样数据量。               | 
+| maxCost         |  执行sql中,其中最长耗时。                | 
+| minCost         |  执行sql中,其中最小耗时。  | 
+| dbsql           |  实际运行的sql语句。                | 
+| dboperation     |  执行的sql类型包括Select 和 Insert+Update+Delete。 | 
+| concurrency     |  并发数据,配置在user-config.properties文件中。                | 
+| tableshardingcount|  分表数量,配置在user-config.properties,yaml文件会使用到该值。                 | 
+| dbshardingcount  |  分库数量,配置在user-config.properties,yaml文件会使用到该值。               | 
+
+* 物理表 *benchmark_avg_result*: 同一各场景下,当前所有曾经生成的统计结果的平均值存储在该表中。
+
+|       *字段*       |  *描述*           |   
+| ----------------------- | --------------------- |
+| id              |  主键,自动生成。  | 
+| product         |  被测试产品包括ShardingJDBC,ShardingProxy 和 MYSQL。| 
+| version         |  ShardingSphere 版本,配置在user-config.properties文件中。                | 
+| scenario        |  三种测试场景包括FullRouting,RangeRouting,SingleRouting。 | 
+| rules           |  四种规则包括 Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt。 | 
+| avg_tps         |  同一测试场景下总tps平均值,计算公式 *total tps/total count*。 | 
+| total           |  去除头尾的采样数据量。               | 
+| maxCost         |  执行sql中,其中最长耗时。                | 
+| minCost         |  执行sql中,其中最小耗时。  | 
+| dbsql           |  实际运行的sql语句。                | 
+| dboperation     |  执行的sql类型包括Select 和 Insert+Update+Delete。 | 
+| concurrency     |  并发数据,配置在user-config.properties文件中。                | 
+| tableshardingcount|  分表数量,配置在user-config.properties,yaml文件会使用到该值。                 | 
+| dbshardingcount  |  分库数量,配置在user-config.properties,yaml文件会使用到该值。               | 
+
+运行如下命令获取统计结果。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
+```
+
diff --git a/shardingsphere-benchmark/.gitignore b/shardingsphere-benchmark/.gitignore
new file mode 100644
index 0000000..f5b7c84
--- /dev/null
+++ b/shardingsphere-benchmark/.gitignore
@@ -0,0 +1,6 @@
+/target/
+/*.iml
+/.idea
+/*.git
+/src/main/resources/performace_machline_hosts
+/src/main/java/org/apache/shardingsphere/benchmark/TestConfig.java
diff --git a/shardingsphere-benchmark/README.md b/shardingsphere-benchmark/README.md
new file mode 100644
index 0000000..247551d
--- /dev/null
+++ b/shardingsphere-benchmark/README.md
@@ -0,0 +1,272 @@
+# What is ShardingSphere Benchmark
+ShardingSphere Benchmark is a performance tool to check its benchmark of core scenarios which are in figure below. The amount of benchmark cases is 96, the formula is 3(Scenarios) * 4(Products) * 2(SQL Type) * 4(Rules).
+
+* Full Route: sql will route to all of physical tables. 
+* Range Route: sql will route to parts of physical tables.
+* Single Route: sql will route to only one physical table.
+
+|       *Scenarios*       |  *Products*           |      *SQL TYPE*        | *Rules*  | 
+| ----------------------- | --------------------- | ---------------------- | ------------------------ |
+| Full Route              |  ShardingSphere-JDBC  |  Select                |   Encrypt                | 
+| Range Route             |  ShardingSphere-Proxy |  Insert/Update/Delete  |   Master-Slave           |  
+| Single Route            |  MYSQL                |                        |   Sharding               | 
+|                         |                       |                        |   Sharding-Master-Slave-Encrypt   | 
+
+## ShardingSphere Benchmark Project Structure
+It's much help to comprehend ShardingSphere Benchmark project structure to perform benchmark test easily. Refer to list below.
+
+```
+project
+│   README.md
+│   README_ZH.md    
+│
+└───src/main/java
+│   │     
+│   └───org/apache/shardingsphere/benchmark
+│       │   
+│       └───org/apache/shardingsphere/benchmark/bean
+│       │
+│       └───org/apache/shardingsphere/benchmark/common
+│       │       └───org/apache/shardingsphere/benchmark/common/file           // File common action such as modification of property file, xml or yaml.
+│       │       └───org/apache/shardingsphere/benchmark/common/statistic      // Statistics for JMeter result.
+│       │       
+│       └───org/apache/shardingsphere/benchmark/db                             // Database action inlcuding querying, inserting, updating, deleting.
+│       │ 
+│       └───org/apache/shardingsphere/benchmark/jemeter                        // JMeter test plan for different scenarios.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/common         // Initialization for base data and physical databases/tables. 
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/fullrouting    // JMeter test plan for full routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/rangerouting   // JMeter test plan for range routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/singlerouting  // JMeter test plan for single routing scenario with different rules such as encrypt, master-slave, sharding, sharding-master-slave-encrypt for ShardingSphere-Proxy and ShardingSphere-JDBC.
+└───src/main/resources
+│   │     
+│   └───common
+│   │    │
+│   │    └───config
+│   │    │ initconfig-testplan.jmx                      // Initialization for creating databases/tables for benchmark and bencmark result.
+│   │    └───datapreparation
+│   │   │   │
+│   │   │   └───jdbc                                    //Base data initialization for different scenarios to MYSQL.
+│   │   │   │ jdbc-cleardata-testplan.jmx               // Clear base data for MYSQL.
+│   │   │   │ jdbc-createdata-testplan.jmx              // Create base data for MYSQL.
+│   │   │   └───shardingsphere                          // Base data initialization for different scenarios to ShardingSphere-JDBC and ShardingSphere-Proxy.
+│   │   │   │   │ 
+│   │   │   │   └───encrypt                             
+│   │   │   │   │ shardingsphere-encrypt-cleardata-testplan.jmx            // Clear base data with encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-encrypt-createdata-testplan.jmx           // Create base data with encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───masterslave
+│   │   │   │   │ shardingsphere-masterslave-cleardata-testplan.jmx        // Clear base data with masterslave rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-masterslave-createdata-testplan.jmx       // Create base data with masterslave rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───sharding
+│   │   │   │   │ shardingsphere-sharding-cleardata-testplan.jmx           // Clear base data with sharding rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-sharding-createdata-testplan.jmx          // Create base data with sharding rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   └───sharding-masterslave-encrypt
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx    // Clear base data with sharding-masterslave-encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx   // Create base data with sharding-masterslave-encrypt rule for ShardingSphere-JDBC and ShardingSphere-Proxy. 
+│   │   │   │   │
+│   └───testplan                                           
+│   │    │       
+│   │    └───fullrouting                // Full routine scenario
+│   │   │   │   │
+│   │   │   │   └───encrypt            //Encrypt rule
+│   │   │   │   │ jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx               // For MYSQL, insert-update-delete test plan with encrypt rule.  
+│   │   │   │   │ jdbc-fullrouting-encrypt-select-testplan.jmx                           // For MYSQL, select test plan with encrypt rule.
+│   │   │   │   │ proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx              // For ShardingSphere-Proxy, insert-update-delete test plan with encrypt rule.
+│   │   │   │   │ proxy-fullrouting-encrypt-select-testplan.jmx                          // For ShardingSphere-Proxy, select test plan with encrypt rule.
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx       // For ShardingSphere-JDBC, insert-update-delete test plan with encrypt rule.
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-select-testplan.jmx                   // For ShardingSphere-JDBC, select test plan with encrypt rule.
+│   │   │   │   └───masterslave        //master-slave rule
+│   │   │   │   │ proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx          // For ShardingSphere-Proxy, insert-update-delete test plan with master-slave rule.  
+│   │   │   │   │ proxy-fullrouting-masterslave-select-testplan.jmx                      // For ShardingSphere-Proxy, select test plan with master-slave rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx   // For ShardingSphere-JDBC, insert-update-delete test plan with master-slave rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-select-testplan.jmx               // For ShardingSphere-JDBC, select test plan with master-slave rule.  
+│   │   │   │   └───sharding           //sharding rule
+│   │   │   │   │ proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx             // For ShardingSphere-Proxy, insert-update-delete test plan with sharding rule.  
+│   │   │   │   │ proxy-fullrouting-sharding-select-testplan.jmx                         // For ShardingSphere-Proxy, select test plan with sharding rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx      // For ShardingSphere-JDBC, insert-update-delete test plan with sharding rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-select-testplan.jmx                  // For ShardingSphere-JDBC, select test plan with sharding rule.  
+│   │   │   │   └───sharding-masterslave-encrypt    //sharding-masterslave-encrypt rule       
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx          // For ShardingSphere-Proxy, insert-update-delete test plan with sharding-master-slave-encrypt rule.  
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx                      // For ShardingSphere-Proxy, select test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx   // For ShardingSphere-JDBC, insert-update-delete test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx               // For ShardingSphere-JDBC, select test plan with sharding-master-slave-encryp rule.  
+│   │   │   │   │
+│   │   └───rangerouting  // Range routine scenario, file names of its test plans are similar with ones under *fullrouting* directory, please refer to them. 
+│   │   │       
+│   │   └───singlerouting // Single routine scenario, file names of its test plans are similar with ones under *fullrouting* directory, please refer to them. 
+│   │   │       
+│   │   └───statistic    
+│   │   │ ss-benchmark-statistic-testplan.jmx  
+│   └───yaml
+│   │    │   server.yaml                                           // It's used by ShardingSphere-Proxy.
+│   │    │   └───fullrouting                //Full routine
+│   │    │   │   └───encrypt                // Encrypt rule.
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-encrypt.yaml            // For ShardingSphere-Proxy, it's for full route with encrypt rule.
+│   │    │   │   │   └───shardingjdbc                                   
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-encrypt.yaml     // For ShardingSphere-JDBC, it's for full route with encrypt rule.
+│   │    │   │   └───masterslave
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-masterslave.yaml        // For ShardingSphere-Proxy, it's for full route with master-slave rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-masterslave.yaml // For ShardingSphere-JDBC, it's for full route with master-slave rule.
+│   │    │   │   └───sharding
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding.yaml           // For ShardingSphere-Proxy, it's for full route with sharding rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding.yaml    // For ShardingSphere-JDBC, it's for full route with sharding rule.
+│   │    │   │   └───sharding-masterslave-encrypt
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding-masterslave-enc.yaml             // For ShardingSphere-Proxy, it's for full route with sharding-masterslave-enrypt rule.
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml  // For ShardingSphere-JDBC, it's for full route with sharding-masterslave-enrypt rule.
+│   │    │   └───rangerouting             // Range routine scenario, file names of its yaml are similar with ones under *fullrouting* directory, please refer to them. 
+│   │    │   │
+│   │    │   └───singlerouting            // Single routine scenario, file names of its yaml are similar with ones under *fullrouting* directory, please refer to them. 
+```
+
+## How to work
+ShardingSphere Benchmark is mainly achieved by JMeter in summary, running as command *jmeter -n -t testplan*.
+
+### Environment Preparation
+Due to the diversity of user system environment, we don't provide an unified installation mode for automatical deployment, please install them below manually. You could skip it if having them.
+
+#### Install MYSQL 
+* Get [MYSQL installation](https://dev.mysql.com/downloads/mysql/) from official website depending on the system you use. It's appreciated to choose MYSQL version above 5.
+* Install and set up MYSQL according to its [MYSQL Doc](https://dev.mysql.com/doc), please choose right version of MYSQL doc in compliance with your installation.
+
+#### Install JDK
+* Get [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html) from official website depending on the system you use. It's appreciated to choose JDK version above 7.
+* Install and set up JDK according to *Installation Instructions* [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html).
+
+#### Install Maven
+* Get [Maven installation](http://maven.apache.org/download.cgi) from official website depending on the system you use. It's appreciated to choose MYSQL version 3.6.
+* Install ans set up Maven according to [Maven doc](http://maven.apache.org/install.html).
+
+#### Get JDBC Jar
+* Get JDBC Jar from official website [JDBC Jar url](https://dev.mysql.com/downloads/connector/j/). Its version depends on MYSQL you use.
+
+#### Build ShardingSphere Benchmark
+* Get source code of ShardingSphere from [ShardingSphere Benchmark Code URL](https://github.com/wcsoft/shardingsphere-benchmark).
+* Build ShardingSphere Benchmark project by running command below.
+```bash
+mvn clean install
+```
+
+#### Install ShardingSphere-Proxy
+* Get source code of ShardingSphere from [ShardingSphere Source Code URL](https://github.com/apache/shardingsphere), the features for different branches refer to [ShardingSphere Doc](https://shardingsphere.apache.org/).
+* Get ShardingSphere-Proxy installation by running command below. For ShardingSphere 4.x, it's located at *{ShardingSphere_project_base_dir}/sharding-distribution/sharding-proxy-distribution/target*; for ShardingSphere 5.x, it's located at *{project_base_dir}/shardingsphere-distribution/shardingsphere-proxy-distribution/target*.
+```bash
+mvn clean install -Prelease
+```
+* Decompress ShardingSphere-proxy above, delete yaml at *{ShardingSphere-Proxy_base_dir}/conf*, copy *server.yaml* and *config-proxy-\*.yaml* which is corresponding test scenarios. These yaml are at *{ShardingSphere Benchmark base dir}/src/main/resources/yaml*.
+* Leave ShardingSphere Benchmark jar and JDBC jar into *{ShardingSphere-Proxy_base_dir}/lib*.
+* Start ShardingSphere-Proxy, startup scripts are at *{ShardingSphere-Proxy_base_dir}/bin*, choose the right script according to your system.
+
+
+#### Install JMeter
+* Get [JMeter installation](https://jmeter.apache.org/download_jmeter.cgi) from official website depending on the JDK you use. It's appreciated to choose JMeter version 5.3.
+* Install and set up JMeter according to [JMeter doc](https://jmeter.apache.org/usermanual/get-started.html).
+* Leave ShardingSphere Benchmark jar into *{JMeter_base_dir}/lib/ext*.
+
+
+#### Configuration
+We have extracted necessary user configuration which is in *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*. You have to change configuration list below as yours. By default we configure any ip with host in the code or yaml to prevent ip leakage and cause security problems。 We provide the unified host configuration at *{ShardingSphere Benchmark base dir}/src/main/resources/config/shardingsphere_benchmark_machline_hosts*, modify ips as yours and replace the host file. There is no need to change those ips if running benchmark at local machine.
+
+```bash
+// It is base directory of ShardingSphere project.
+shardingsphere.project.base.path=/export/jenkins/workspace/ShardingSphere-Benchmark-Deploy
+// It is base directory of ShardingSphere benchmark project.
+shardingsphere.benchmark.project.base.path=/export/benchmark/shardingsphere-benchmark
+// It is base directory of ShardingSphere benchmark result.
+shardingsphere.benchmark.result.base.path=/export/shardingsphere-benchmark/result
+// It is database port of ShardingSphere benchmark result accessing.
+shardingsphere.benchmark.result.database.port=3306
+// It is database username of ShardingSphere benchmark result using.
+shardingsphere.benchmark.result.database.username=root
+// It is database password of ShardingSphere benchmark result, we can leave it empty by default.
+shardingsphere.benchmark.result.database.password=
+// It is host or ip list of ShardingSphere benchmark using.
+shardingsphere.benchmark.database.machine.host.list=ss.benchmark.fullrouting.encrypt.ds0;ss.benchmark.fullrouting.encrypt.ds1;ss.benchmark.fullrouting.encrypt.ds2
+// It is database host of ShardingSphere benchmark result using. Statistics of ShardingSphere benchmark will be stored into the database. 
+shardingsphere.benchmark.result.database.host=ss.benchmark.result
+```
+
+#### Init Database/Table
+We have to prepare database and table for benchmark. They are configured at *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*, run the command below to create physical databases and tables.
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/initdb/initdb-testplan.jmx
+```
+
+#### Init Base Data
+All of initing base data test plans for different scenarios are at *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation*. Here is a command for instance, which scenario to test in final depends on your choice.  
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
+```
+
+#### Run a Test Plan
+All of test plans for different scenarios are at *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/*. Here is a command for instance, which scenario to test in final depends on your choice.  
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
+```
+
+After running the command successfully, it generates a JMeter result file located at *shardingsphere.benchmark.result.base.path* which is configured in *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*. The JMeter result looks like the figure below.
+```bash
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-74,,true,,0,0,100,100,0,0,0
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-65,,true,,0,0,100,100,0,0,0
+1598274390236,8878,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-42,,true,,0,0,100,100,0,0,0
+1598274390234,8917,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-15,,true,,0,0,100,100,0,0,0
+1598274390234,9002,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-3,,true,,0,0,100,100,0,0,0
+```
+
+#### Statistics
+We could calculate the general statistics by JMeter result such as TPS. There are two physical tables to store the statistics, *benchmark_result* and *benchmark_avg_result*. You could query the result from the databases directly as well if you prefer. Trigger the sql below to get latest record for the test.
+
+* Physical table *benchmark_result*: intermediate result will be here, its table structure is below.
+
+|       *Field*       |  *Description*           |   
+| ----------------------- | --------------------- |
+| id              |  Primary key generated automatically.  | 
+| product         |  Tested product that is ShardingJDBC, ShardingProxy or MYSQL. | 
+| version         |  ShardingSphere version configured at user-config.properties.                | 
+| scenario        |  Three kinds for benchmark including FullRouting, RangeRouting, SingleRouting. | 
+| rules           |  Four kinds of rules for benchmark including Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt. | 
+| tps             |  Tps which is got from JMeter file, the formula is *total count / total time*. | 
+| total           |  Sample count which is taken out the head data and tail data.                | 
+| maxCost         |  Max time cost of running every sql.                | 
+| minCost         |  Min time cost of running every sql. | 
+| dbsql           |  Actual sql to run.                | 
+| dboperation     |  Actual sql type to run including Select and Insert+Update+Delete. | 
+| concurrency     |  Count of concurrency configured at user-config.properties.                | 
+| tableshardingcount|  Table sharding count configured at user-config.properties, used at yaml.                 | 
+| dbshardingcount  |  Db sharding count configured at user-config.properties, used at yaml.                | 
+
+
+* Physical table *benchmark_avg_result*: average result will be here, its table structure is below.
+
+|       *Field*       |  *Description*           |   
+| ----------------------- | --------------------- |
+| id              |  Primary key generated automatically.  | 
+| product         |  Tested product that is ShardingJDBC, ShardingProxy or MYSQL. | 
+| version         |  ShardingSphere version configured at user-config.properties.                | 
+| scenario        |  Three kinds for benchmark including FullRouting, RangeRouting, SingleRouting. | 
+| rules           |  Four kinds of rules for benchmark including Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt. | 
+| avg_tps         |  Average tps for the same test, the formula is *total tps / total count*. | 
+| total           |  Sample count which is taken out the head data and tail data.                | 
+| maxCost         |  Max time cost of running every sql.                | 
+| minCost         |  Min time cost of running every sql. | 
+| dbsql           |  Actual sql to run.                | 
+| dboperation     |  Actual sql type to run including Select and Insert+Update+Delete. | 
+| concurrency     |  Count of concurrency configured at user-config.properties.                | 
+| tableshardingcount|  Table sharding count configured at user-config.properties, used at yaml.                 | 
+| dbshardingcount  |  Db sharding count configured at user-config.properties, used at yaml.                | 
+
+Run the command to get statistics.
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
+```
+
+```bash
+select * from benchmark_result order by id limit 1
+select * from benchmark_avg_result order by id limit 1
+```
\ No newline at end of file
diff --git a/shardingsphere-benchmark/README_ZH.md b/shardingsphere-benchmark/README_ZH.md
new file mode 100644
index 0000000..b374e36
--- /dev/null
+++ b/shardingsphere-benchmark/README_ZH.md
@@ -0,0 +1,272 @@
+# ShardingSphere Benchmark是什么
+ShardingSphere Benchmark是测试ShardingSphere的性能基线工具,目前覆盖的核心场景如下表。 覆盖的测试总量为96,计算公式 3(Scenarios) * 4(Products) * 2(SQL Type) * 4(Rules)。
+
+* Full Route:所执行sql会路由到所有物理表中。 
+* Range Route:所执行sql会路由到部分物理表中。
+* Single Route:所执行sql只会路由到一张物理表中。
+
+|       *Scenarios*       |  *Products*           |      *SQL TYPE*        | *Rules*  | 
+| ----------------------- | --------------------- | ---------------------- | ------------------------ |
+| Full Route              |  ShardingSphere-JDBC  |  Select                |   Encrypt                | 
+| Range Route             |  ShardingSphere-Proxy |  Insert/Update/Delete  |   Master-Slave           |  
+| Single Route            |  MYSQL                |                        |   Sharding               | 
+|                         |                       |                        |   Sharding-Master-Slave-Encrypt   | 
+
+
+
+## ShardingSphere Benchmark 项目结构
+更全面的理解ShardingSphere Benchmark项目结构,会帮助你轻松运行ShardingSphere Benchmark相关测试。请参考下面目录及注释。
+
+```
+project
+│   README.md
+│   README_ZH.md    
+│
+└───src/main/java
+│   │     
+│   └───org/apache/shardingsphere/benchmark
+│       │   
+│       └───org/apache/shardingsphere/benchmark/bean
+│       │
+│       └───org/apache/shardingsphere/benchmark/common
+│       │       └───org/apache/shardingsphere/benchmark/common/file           // 文件修改相关操作模块,处理文件类型包括 yaml,xml,properties。
+│       │       └───org/apache/shardingsphere/benchmark/common/statistic      // JMeter生成结果统计模块。
+│       │       
+│       └───org/apache/shardingsphere/benchmark/db                             // 数据库操作模块,包括增删改查。
+│       │ 
+│       └───org/apache/shardingsphere/benchmark/jemeter                        // 不同场景下的JMeter测试计划。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/common         // 初始化基础数据及ShardingSphere benchmark测试需要的物理库/物理表。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/fullrouting    // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在全路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/rangerouting   // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在范围路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│       │       └───org/apache/shardingsphere/benchmark/jemeter/singlerouting  // 对于ShardingSphere-Proxy 和 ShardingSphere-JDBC产品在单路由场景下的测试计划,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+└───src/main/resources
+│   │     
+│   └───common
+│   │    │
+│   │    └───config
+│   │    │ initconfig-testplan.jmx                      // 初始化ShardingSphere Benchmark测试需要的物理库和物理表。
+│   │    └───datapreparation
+│   │   │   │
+│   │   │   └───jdbc                                    // MYSQL产品的基础数据初始化。
+│   │   │   │ jdbc-cleardata-testplan.jmx               // MYSQL基础数据清除。
+│   │   │   │ jdbc-createdata-testplan.jmx              // MYSQL基础数据创建。
+│   │   │   └───shardingsphere                          // ShardingSphere-JDBC 和 ShardingSphere-Proxy基础数据初始化,包括基于不同的规则encrypt,master-slave,sharding,sharding-master-slave-encrypt。
+│   │   │   │   │ 
+│   │   │   │   └───encrypt                             
+│   │   │   │   │ shardingsphere-encrypt-cleardata-testplan.jmx            // 基于脱敏规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-encrypt-createdata-testplan.jmx           // 基于脱敏规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───masterslave
+│   │   │   │   │ shardingsphere-masterslave-cleardata-testplan.jmx        // 基于主从规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-masterslave-createdata-testplan.jmx       // 基于主从规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───sharding
+│   │   │   │   │ shardingsphere-sharding-cleardata-testplan.jmx           // 基于分片规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。 
+│   │   │   │   │ shardingsphere-sharding-createdata-testplan.jmx          // 基于分片规则ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。 
+│   │   │   │   └───sharding-masterslave-encrypt
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx    // 基于混合规则分片-主从-脱敏ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据清除。
+│   │   │   │   │ shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx   // 基于混合规则分片-主从-脱敏ShardingSphere-JDBC和ShardingSphere-Proxy产品的基础数据创建。
+│   │   │   │   │
+│   └───testplan                                           
+│   │    │       
+│   │    └───fullrouting                // 全路由场
+│   │   │   │   │
+│   │   │   │   └───encrypt            //脱敏规则
+│   │   │   │   │ jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx               // 基于脱敏规则,MYSQL产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ jdbc-fullrouting-encrypt-select-testplan.jmx                           // 基于脱敏规则,MYSQL产品全路由场景下的select测试计划。 
+│   │   │   │   │ proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx              // 基于脱敏规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ proxy-fullrouting-encrypt-select-testplan.jmx                          // 基于脱敏规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。 
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx       // 基于脱敏规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-encrypt-select-testplan.jmx                   // 基于脱敏规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。
+│   │   │   │   └───masterslave        //主从规则
+│   │   │   │   │ proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx          // 基于主从规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ proxy-fullrouting-masterslave-select-testplan.jmx                      // 基于主从规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。 
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx   // 基于主从规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-masterslave-select-testplan.jmx               // 基于主从规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。    
+│   │   │   │   └───sharding           //sharding rule
+│   │   │   │   │ proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx             // 基于分片规则,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ proxy-fullrouting-sharding-select-testplan.jmx                         // 基于分片规则,ShardingSphere-Proxy产品全路由场景下的select测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx      // 基于分片规则,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-sharding-select-testplan.jmx                  // 基于分片规则,ShardingSphere-JDBC产品全路由场景下的select测试计划。 
+│   │   │   │   └───sharding-masterslave-encrypt    //sharding-masterslave-encrypt rule       
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx          // 基于混合规则分片-主从-脱敏,ShardingSphere-Proxy产品全路由场景下的insert-update-delete测试计划。
+│   │   │   │   │ proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx                      // 基于混合规则分片-主从-脱敏,ShardingSphere-Proxy产品全路由场景下的select测试计划。
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx   // 基于混合规则分片-主从-脱敏,ShardingSphere-JDBC产品全路由场景下的insert-update-delete测试计划。  
+│   │   │   │   │ shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx               // 基于混合规则分片-主从-脱敏,ShardingSphere-JDBC产品全路由场景下的select测试计划。   
+│   │   │   │   │
+│   │   └───rangerouting  //所有范围路由相关的测试计划文件名称和全路由类似,可参考全路由场景,不在此一一列出所有文件。
+│   │   │       
+│   │   └───singlerouting //所有单路由相关的测试计划文件名称和全路由类似,可参考全路由场景,不在此一一列出所有文件。
+│   │   │       
+│   │   └───statistic     // 统计结果
+│   │   │ ss-benchmark-statistic-testplan.jmx  //统计JMeter结果的测试计划,统计结果入库。
+│   └───yaml
+│   │    │   server.yaml                                           // ShardingSphere-Proxy 使用到的配置文件.
+│   │    │   └───fullrouting                //全路由场景
+│   │    │   │   └───encrypt                // 脱敏规则下的yaml配置文件
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-encrypt.yaml            // ShardingSphere-Proxy产品,配置脱敏规则的配置文件。
+│   │    │   │   │   └───shardingjdbc                                   
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-encrypt.yaml     // ShardingSphere-JDBC产品,配置脱敏规则的配置文件。
+│   │    │   │   └───masterslave
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-masterslave.yaml        // ShardingSphere-Proxy产品,配置主从规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-masterslave.yaml // ShardingSphere-JDBC产品,配置主从规则的配置文件。
+│   │    │   │   └───sharding
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding.yaml           // ShardingSphere-Proxy产品,配置分片规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding.yaml    // ShardingSphere-JDBC产品,配置分片规则的配置文件。
+│   │    │   │   └───sharding-masterslave-encrypt
+│   │    │   │   │   └───proxy
+│   │    │   │   │   │ config-proxy-fullrouting-sharding-masterslave-enc.yaml             // ShardingSphere-Proxy产品,配置混合规则 分片-主从-脱敏 规则的配置文件。
+│   │    │   │   │   └───shardingjdbc
+│   │    │   │   │   │ config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml  // ShardingSphere-JDBC产品,配置混合规则 分片-主从-脱敏 规则的配置文件。
+│   │    │   └───rangerouting             // 范围路由下的所有yaml配置文件,文件名称和全路由类似,可参考全路由场景,一一列出所有文件。 
+│   │    │   │
+│   │    │   └───singlerouting            // 单路由下的所有yaml配置文件,文件名称和全路由类似,可参考全路由场景,一一列出所有文件。
+```
+
+
+
+
+## 运行 ShardingSphere Benchmark
+简单来说ShardingSphere Benchmark主要基于JMeter实现的性能测试工具,执行命令 *jmeter -n -t testplan* 便可运行。
+
+### 环境准备
+由于用户环境的多样性,我们没有提供统一的自动化安装基础环境方式,所以请手动安装基础环境,如已安装,可忽略下列步骤。
+
+#### 安装 MYSQL 
+* 从官网下载MYSQL安装程序,最好为5.x以上版本,MYSQL官网地址:[MYSQL installation](https://dev.mysql.com/downloads/mysql/)。
+* 参考MYSQL官方文档进行安装,请保持版本一致,MYSQL官方文档地址:[MYSQL Doc](https://dev.mysql.com/doc)。
+
+#### 安装 JDK
+* 从官网下载JDK安装程序,版本最好为JDK7以上,JDK下载地址:[JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html)。
+* 参考JDK官方文档进行安装配置,JDK官方文档地址: [JDK installation](https://www.oracle.com/java/technologies/javase-downloads.html)。
+
+#### 安装 Maven
+* 从官网下载Maven安装程序(http://maven.apache.org/download.cgi) from official website depending on the system you use。
+* 参考Maven官方文档进行安装配置 [Maven doc](http://maven.apache.org/install.html)。
+
+#### 获取 JDBC Jar
+* 从官网下载正确版本的JDBC Jar文件。
+
+#### 构建 ShardingSphere Benchmark
+* 获取ShardingSphere Benchmark源码 [ShardingSphere Benchmark Code URL](https://github.com/wcsoft/shardingsphere-benchmark)。
+* 按照如下命令构建ShardingSphere Benchmark。
+```bash
+mvn clean install
+```
+
+#### 安装 ShardingSphere-Proxy
+* 获取ShardingSphere源码 [ShardingSphere Source Code URL](https://github.com/apache/shardingsphere), the features for different branches refer to [ShardingSphere Doc](https://shardingsphere.apache.org/)。
+* 按照如下命令构建ShardingSphere,并获取ShardingSphere-Proxy安装包。对于ShardingSphere 4.x版本,ShardingSphere-Proxy安装包所在路径为 *{project_base_dir}/sharding-distribution/sharding-proxy-distribution/target*; 对于ShardingSphere 5.x版本,它的安装程序所在路径为 *{project_base_dir}/shardingsphere-distribution/shardingsphere-proxy-distribution/target*。
+```bash
+mvn clean install -Prelease
+```
+* 解压ShardingSphere-proxy,将以上获取的JDBC Jar和ShardingSphere Benchmark Jar 放在 *{ShardingSphere-Proxy_base_dir}/lib/* 路径下。
+* 复制ShardingSphere Benchmark jar 和 JDBC jar到 *{ShardingSphere-Proxy_base_dir}/lib*路径下。
+* 启动ShardingSphere-Proxy,启动脚步路径为 *{ShardingSphere-Proxy_base_dir}/bin*,根据当前使用的系统选择正确的启动脚步。
+
+
+#### 安装 JMeter
+* 从官网获取JMeter安装程序 [JMeter installation](https://jmeter.apache.org/download_jmeter.cgi),版本最好选择5.3。
+* 依照官方文档安装配置JMeter [JMeter doc](https://jmeter.apache.org/usermanual/get-started.html)。
+* 拷贝ShardingSphere Benchmark jar到 *{JMeter_base_dir}/lib/ext* 路径下。
+
+
+#### 配置
+我们提取了ShardingSphere benchmark项目中所有用户相关配置,这些配置存在于 *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties*文件中,所以需要根据当前运行环境进行修改。此外ShardingSphere benchmark工程中涉及到ip使用均以host方式进行配置,以防泄露引发安全问题,对于host配置已提供示例文件,文件路径为 *{ShardingSphere Benchmark base dir}/src/main/resources/config/shardingsphere_benchmark_machline_hosts*,需要依据当前环境修改对应ip并添加到host文件中。如果仅在本地测试,无需替换ip。
+
+```bash
+// ShardingSphere工程根目录.
+shardingsphere.project.base.path=/export/jenkins/workspace/ShardingSphere-Benchmark-Deploy
+// ShardingSphere benchmark工程根目录。
+shardingsphere.benchmark.project.base.path=/export/benchmark/shardingsphere-benchmark
+// ShardingSphere benchmark结果输出根目录。
+shardingsphere.benchmark.result.base.path=/export/shardingsphere-benchmark/result
+// 存储ShardingSphere benchmark结果数据库端口号。
+shardingsphere.benchmark.result.database.port=3306
+// 存储ShardingSphere benchmark结果数据库用户名。
+shardingsphere.benchmark.result.database.username=root
+// 存储ShardingSphere benchmark结果数据库密码。
+shardingsphere.benchmark.result.database.password=
+// 存储ShardingSphere benchmark数据库机器ip列表或者host列表。
+shardingsphere.benchmark.database.machine.host.list=ss.benchmark.fullrouting.encrypt.ds0;ss.benchmark.fullrouting.encrypt.ds1;ss.benchmark.fullrouting.encrypt.ds2
+// 存储ShardingSphere benchmark结果数据库机器ip或者host。
+shardingsphere.benchmark.result.database.host=ss.benchmark.result
+```
+
+#### 初始 物理库/物理表
+运行ShardingSphere Benchmark前,需要创建对应的物理数据库和物理表;根据用户配置 分库数量/分表数量/ShardingSphereBenchmark结果输出根路径/ShardingSphere版本/并发量,进行统一自动化部署。以上配置均在 *{ShardingSphere Benchmark base dir}/src/main/resources/config/user-config.properties* 文件中,运行如下命令完成上述任务。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/config/initconfig-testplan.jmx
+```
+
+#### 初始 基础数据
+所有ShardingSphere Benchmark测试场景会在固定基础数据条件下进行,创建测试数据计划文件存储在 *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/*,执行如下命令完成基础数据创建。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
+```
+
+#### 运行 测试计划
+所有的测试计划文件存在 *{ShardingSphere Benchmark base dir}/src/main/resources/testplan/*,提供如下示例命令,该命令完成ShardingJdbc产品在单路由,脱敏规则条件下执行select的基线采集。请根据需要选择你关注的场景。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
+```
+
+测试计划成功运行后,生成JMeter结果文件。JMeter生成结果片段如下图。
+```bash
+timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,Latency,IdleTime,Connect
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-74,,true,,0,0,100,100,0,0,0
+1598274390236,8657,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-65,,true,,0,0,100,100,0,0,0
+1598274390236,8878,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-42,,true,,0,0,100,100,0,0,0
+1598274390234,8917,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-15,,true,,0,0,100,100,0,0,0
+1598274390234,9002,JMeterShardingJDBCFullRoutingEncryptSelect,,,Thread Group 1-3,,true,,0,0,100,100,0,0,0
+```
+
+#### 统计
+对不同场景下生成的JMeter结果进行统一汇总,统计结果主要以TPS为主。这些结果存储在两个物理表中,分别为 *benchmark_result* and *benchmark_avg_result*,同时将统计结果生成测试报告,报告文件格式为excel。
+
+* 物理表 *benchmark_result*: 同一个场景下,每次测试生成的统计结果存储在该表中,表结构如下。
+
+|       *字段*       |  *描述*           |   
+| ----------------------- | --------------------- |
+| id              |  主键,自动生成。  | 
+| product         |  被测试产品包括ShardingJDBC,ShardingProxy 和 MYSQL。| 
+| version         |  ShardingSphere 版本,配置在user-config.properties文件中。                | 
+| scenario        |  三种测试场景包括FullRouting,RangeRouting,SingleRouting。 | 
+| rules           |  四种规则包括 Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt。 | 
+| tps             |  通过JMeter结果文件计算tps,计算公式为 *total count / total time*。 | 
+| total           |  去除头尾的采样数据量。               | 
+| maxCost         |  执行sql中,其中最长耗时。                | 
+| minCost         |  执行sql中,其中最小耗时。  | 
+| dbsql           |  实际运行的sql语句。                | 
+| dboperation     |  执行的sql类型包括Select 和 Insert+Update+Delete。 | 
+| concurrency     |  并发数据,配置在user-config.properties文件中。                | 
+| tableshardingcount|  分表数量,配置在user-config.properties,yaml文件会使用到该值。                 | 
+| dbshardingcount  |  分库数量,配置在user-config.properties,yaml文件会使用到该值。               | 
+
+* 物理表 *benchmark_avg_result*: 同一各场景下,当前所有曾经生成的统计结果的平均值存储在该表中。
+
+|       *字段*       |  *描述*           |   
+| ----------------------- | --------------------- |
+| id              |  主键,自动生成。  | 
+| product         |  被测试产品包括ShardingJDBC,ShardingProxy 和 MYSQL。| 
+| version         |  ShardingSphere 版本,配置在user-config.properties文件中。                | 
+| scenario        |  三种测试场景包括FullRouting,RangeRouting,SingleRouting。 | 
+| rules           |  四种规则包括 Encrypt, MasterSlave, Sharding, Sharding+Master+Slave+Encrypt。 | 
+| avg_tps         |  同一测试场景下总tps平均值,计算公式 *total tps/total count*。 | 
+| total           |  去除头尾的采样数据量。               | 
+| maxCost         |  执行sql中,其中最长耗时。                | 
+| minCost         |  执行sql中,其中最小耗时。  | 
+| dbsql           |  实际运行的sql语句。                | 
+| dboperation     |  执行的sql类型包括Select 和 Insert+Update+Delete。 | 
+| concurrency     |  并发数据,配置在user-config.properties文件中。                | 
+| tableshardingcount|  分表数量,配置在user-config.properties,yaml文件会使用到该值。                 | 
+| dbshardingcount  |  分库数量,配置在user-config.properties,yaml文件会使用到该值。               | 
+
+运行如下命令获取统计结果。
+```bash
+jmeter -n -t {ShardingSphere Benchmark base dir}/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
+```
+
diff --git a/shardingsphere-benchmark/pom.xml b/shardingsphere-benchmark/pom.xml
index c22e592..e131920 100644
--- a/shardingsphere-benchmark/pom.xml
+++ b/shardingsphere-benchmark/pom.xml
@@ -1,20 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -22,28 +6,90 @@
 
     <groupId>shardingsphere-benchmark</groupId>
     <artifactId>shardingsphere-benchmark</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    
+    <version>1.1-SNAPSHOT</version>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>sharding-core-api</artifactId>
+            <artifactId>shardingsphere-infra-common</artifactId>
             <version>[5.0.0-RC1-SNAPSHOT,)</version>
         </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>sharding-jdbc-core</artifactId>
+            <artifactId>shardingsphere-infra-executor</artifactId>
             <version>[5.0.0-RC1-SNAPSHOT,)</version>
         </dependency>
         <dependency>
-            <groupId>io.shardingsphere</groupId>
-            <artifactId>sharding-core</artifactId>
-            <version>3.1.0</version>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-jdbc-core</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
         </dependency>
         <dependency>
-            <groupId>io.shardingsphere</groupId>
-            <artifactId>sharding-jdbc-core</artifactId>
-            <version>3.1.0</version>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-kernel-context</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-sharding-api</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-sharding-common</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-sharding-route</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-sharding-route</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-common</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-encrypt-api</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-encrypt-common</artifactId>
+            <version>[5.0.0-RC1-SNAPSHOT,)</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.curator</groupId>
+            <artifactId>curator-test</artifactId>
+            <version>2.10.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.zaxxer</groupId>
+            <artifactId>HikariCP</artifactId>
+            <version>3.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-pool</groupId>
+            <artifactId>commons-pool</artifactId>
+            <version>1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.4.196</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
@@ -56,11 +102,6 @@
             <version>42.2.5</version>
         </dependency>
         <dependency>
-            <groupId>com.zaxxer</groupId>
-            <artifactId>HikariCP</artifactId>
-            <version>3.2.0</version>
-        </dependency>
-        <dependency>
             <groupId>org.apache.jmeter</groupId>
             <artifactId>ApacheJMeter_core</artifactId>
             <version>4.0</version>
@@ -77,14 +118,36 @@
             <artifactId>lombok</artifactId>
             <version>1.16.4</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-nop</artifactId>
+            <version>1.7.27</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <version>1.7.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.0.1</version>
+        </dependency>
+
     </dependencies>
-    
+
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.6.0</version>
                 <configuration>
                     <source>1.7</source>
                     <target>1.7</target>
@@ -93,9 +156,12 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-shade-plugin</artifactId>
-                <version>3.2.1</version>
+                <configuration>
+                    <createDependencyReducedPom>false</createDependencyReducedPom>
+                </configuration>
                 <executions>
                     <execution>
+                        <phase>package</phase>
                         <goals>
                             <goal>shade</goal>
                         </goals>
@@ -103,31 +169,73 @@
                             <transformers>
                                 <transformer
                                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                                    <resource>META-INF/services/org.apache.shardingsphere.sql.parser.spi.SQLParserConfiguration</resource>
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.sql.parser.spi.SQLParserConfiguration
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapper
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.route.decorator.RouteDecorator
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.rule.ShardingSphereRuleBuilder
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContextDecorator
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.metadata.schema.spi.RuleMetaDataDecorator
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.metadata.schema.spi.RuleMetaDataLoader
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.infra.merge.engine.ResultProcessEngine
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>
+                                        META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm
+                                    </resource>
+                                </transformer>
+                                <transformer
+                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                                    <resource>META-INF/services/java.sql.Driver</resource>
                                 </transformer>
                             </transformers>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
-            <!--<plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptorRefs>
-                        <descriptorRef>jar-with-dependencies</descriptorRef>
-                    </descriptorRefs>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>assemble-all</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>-->
         </plugins>
     </build>
 </project>
diff --git a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcSelect.java b/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcSelect.java
deleted file mode 100644
index ac064f5..0000000
--- a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcSelect.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package jdbc.perf;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.DataSourceUtil;
-
-import java.sql.SQLException;
-
-public class JdbcSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_STMT = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    static {
-        DataSourceUtil.createDataSource("###", "sharding_db", "###", 3306, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("JdbcSelect");
-        results.sampleStart();
-        try {
-            DataSourceUtil.getSelectRes(SELECT_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWrite.java b/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWrite.java
deleted file mode 100644
index 863fb31..0000000
--- a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWrite.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package jdbc.perf;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.DataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- * for mysql insert+update+delete
- */
-public class JdbcWrite extends AbstractJavaSamplerClient {
-    static {
-        DataSourceUtil.createDataSource("###", "sharding_db", "###", 3306, "###");
-    }
-    
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("JdbcWrite");
-        results.sampleStart();
-        try {
-            DataSourceUtil.writeOp( "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWriteRead.java b/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWriteRead.java
deleted file mode 100644
index df521d0..0000000
--- a/shardingsphere-benchmark/src/main/java/jdbc/perf/JdbcWriteRead.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package jdbc.perf;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.DataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- * for mysql compare in master slave scene
- */
-public class JdbcWriteRead extends AbstractJavaSamplerClient {
-    static {
-        DataSourceUtil.createDataSource("###", "sharding_db", "###", 3306, "###");
-    }
-    
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("JdbcWriteRead");
-        results.sampleStart();
-        try {
-            DataSourceUtil.writeReadOp( "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/BenchmarkResultBean.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/BenchmarkResultBean.java
new file mode 100644
index 0000000..ec428a8
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/BenchmarkResultBean.java
@@ -0,0 +1,125 @@
+package org.apache.shardingsphere.benchmark.bean;
+
+import java.util.Map;
+
+/**
+ * Benchmark result bean from jtl.
+ */
+public final class BenchmarkResultBean {
+    
+    public String version;
+    public Map benchmarkResult;
+    public String sql;
+    public String rules;
+    public String product;
+    public String scenario;
+    public String dbAction;
+    public int concurrency;
+    public long updateTime;
+    public int dbShardingCount;
+    public int tableShardingCount;
+    
+    public BenchmarkResultBean(){}
+    
+    public BenchmarkResultBean(String version, Map benchmarkResult, String sql, String rules, String product, String scenario, String dbAction, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount){
+        this.benchmarkResult = benchmarkResult;
+        this.sql = sql;
+        this.rules = rules;
+        this.product = product;
+        this.scenario = scenario;
+        this.dbAction = dbAction;
+        this.version = version;
+        this.concurrency = concurrency;
+        this.updateTime = updateTime;
+        this.dbShardingCount = dbShardingCount;
+        this.tableShardingCount = tableShardingCount;
+    }
+    
+    public void setVersion(String version){
+        this.version = version;
+    }
+    
+    public void setSql(String sql){
+        this.sql = sql;
+    }
+    
+    public void setRules(String rules){
+        this.rules = rules;
+    }
+    
+    public void setProduct(String product){
+        this.product = product;
+    }
+    
+    public void setScenario(String scenario){
+        this.scenario = scenario;
+    }
+    
+    public void setDbAction(String dbAction){
+        this.dbAction = dbAction;
+    }
+    
+    public void setBenchmarkResult(Map benchmarkResult){
+        this.benchmarkResult = benchmarkResult;
+    }
+    
+    public String getVersion(){
+        return this.version;
+    }
+    
+    public Map getBenchmarkResult(){
+        return this.benchmarkResult;
+    }
+    
+    public String getScenario(){
+        return this.scenario;
+    }
+    
+    public String getRules(){
+        return this.rules;
+    }
+    
+    public String getSql(){
+        return this.sql;
+    }
+    
+    public String getProduct(){
+        return this.product;
+    }
+    
+    public String getDbAction(){
+        return this.dbAction;
+    }
+    
+    public void setConcurrency(int concurrency){
+        this.concurrency = concurrency;
+    }
+    
+    public int getConcurrency(){
+        return this.concurrency;
+    }
+    
+    public void setUpdateTime(long updateTime){
+        this.updateTime = updateTime;
+    }
+    
+    public long getUpdateTime(){
+        return this. updateTime;
+    }
+    
+    public void setDbShardingCount(int dbShardingCount){
+        this.dbShardingCount = dbShardingCount;
+    }
+    
+    public int getDbShardingCount(){
+        return this.dbShardingCount;
+    }
+    
+    public void setTableShardingCount(int tableShardingCount){
+        this.tableShardingCount = tableShardingCount;
+    }
+    
+    public int getTableShardingCount(){
+        return this.tableShardingCount;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/Iou.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/Iou.java
new file mode 100644
index 0000000..92c9bc1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/bean/Iou.java
@@ -0,0 +1,28 @@
+package org.apache.shardingsphere.benchmark.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * operation object for jmeter performance
+ */
+@Getter
+@Setter
+public class Iou implements Serializable {
+
+    private static final long serialVersionUID = 5377660875939152645L;
+
+    private int k;
+
+    private String c;
+
+    private String pad;
+
+    @Override
+    public String toString() {
+        return String.format("k: %s, c: %s, pad: %s", k, c, pad);
+    }
+
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/excel/BenchmarkExcelWriter.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/excel/BenchmarkExcelWriter.java
new file mode 100644
index 0000000..42ab606
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/excel/BenchmarkExcelWriter.java
@@ -0,0 +1,192 @@
+package org.apache.shardingsphere.benchmark.common.file.excel;
+
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Benchmark excel writer to generate report.
+ */
+public final class BenchmarkExcelWriter {
+    
+    private static List<String> CELL_HEADS;
+    static{
+        CELL_HEADS = new ArrayList<String>(10);
+        CELL_HEADS.add("Version");
+        CELL_HEADS.add("Scenario");
+        CELL_HEADS.add("Rules");
+        CELL_HEADS.add("Database Action");
+        CELL_HEADS.add("Product");
+        CELL_HEADS.add("TPS");
+        CELL_HEADS.add("Concurrency Count");
+        CELL_HEADS.add("Sample Amount");
+        CELL_HEADS.add("Max Cost");
+        CELL_HEADS.add("Min Cost");
+        CELL_HEADS.add("SQL");
+        CELL_HEADS.add("Sharding Database Count");
+        CELL_HEADS.add("Sharding Table Count");
+    }
+    
+    /**
+     * Write jtl result to excel.
+     * @param excelPath
+     * @param sheetName
+     * @param isHeader
+     * @param rowNum
+     * @param dataList
+     */
+    public static void writeExcel(String excelPath, String sheetName, boolean isHeader, int rowNum, List<BenchmarkResultBean> dataList){
+        Workbook workbook = null;
+        File exportFile = null;
+        FileOutputStream fileOut = null;
+        if (dataList.size() > 0) {
+            try {
+                exportFile = new File(excelPath);
+                if(exportFile.exists()){
+                    workbook = new HSSFWorkbook(new FileInputStream(excelPath));
+                } else {
+                    workbook = new HSSFWorkbook();
+                    exportFile.createNewFile();
+                }
+                workbook = buildDataSheet(workbook, sheetName, isHeader, rowNum, dataList);
+        
+                fileOut = new FileOutputStream(excelPath);
+                workbook.write(fileOut);
+                fileOut.flush();
+        
+            } catch (FileNotFoundException ex) {
+                ex.printStackTrace();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            } finally {
+                try {
+                    if (fileOut != null) {
+                        fileOut.close();
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+    
+    /**
+     * Build excel sheet.
+     * @param result
+     * @param sheetName
+     * @param isHeader
+     * @param rowNum
+     * @param dataList
+     * @return
+     */
+    private static Workbook buildDataSheet(Workbook result, String sheetName, boolean isHeader, int rowNum, List<BenchmarkResultBean> dataList) {
+        
+        Sheet sheet = null;
+        if(null == result.getSheet(sheetName)){
+            sheet = result.createSheet(sheetName);
+        } else {
+            sheet = result.getSheet(sheetName);
+        }
+        
+        CellStyle cellStyle = buildHeadCellStyle(sheet.getWorkbook());
+        if(isHeader){
+            for (int i=0; i < CELL_HEADS.size(); i++) {
+                sheet.setColumnWidth(i, 6000);
+            }
+            sheet.setDefaultRowHeight((short) 400);
+            Row head = sheet.createRow(0);
+            for (int i = 0; i < CELL_HEADS.size(); i++) {
+                Cell cell = head.createCell(i);
+                
+                cell.setCellValue(CELL_HEADS.get(i));
+                cell.setCellStyle(cellStyle);
+            }
+        }
+        
+        for (int i = 0; i < dataList.size(); i++) {
+            BenchmarkResultBean benchmarkResultBean = dataList.get(i);
+            Row row = sheet.createRow(rowNum++);
+            convertDataToRow(benchmarkResultBean, row);
+        }
+        return result;
+    }
+    
+    /**
+     * Build cell style.
+     * @param workbook
+     * @return
+     */
+    private static CellStyle buildHeadCellStyle(Workbook workbook) {
+        CellStyle result = workbook.createCellStyle();
+        result.setAlignment(HorizontalAlignment.CENTER);
+        result.setBorderBottom(BorderStyle.THIN);
+        result.setBottomBorderColor(IndexedColors.BLACK.getIndex());
+        result.setBorderLeft(BorderStyle.THIN);
+        result.setLeftBorderColor(IndexedColors.BLACK.getIndex());
+        result.setBorderRight(BorderStyle.THIN);
+        result.setRightBorderColor(IndexedColors.BLACK.getIndex());
+        result.setBorderTop(BorderStyle.THIN);
+        result.setTopBorderColor(IndexedColors.BLACK.getIndex());
+        result.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        result.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        Font font = workbook.createFont();
+        font.setBold(true);
+        result.setFont(font);
+        return result;
+    }
+    
+    /**
+     * Fill jtl data into each row of excel.
+     * @param data
+     * @param row
+     */
+    private static void convertDataToRow(BenchmarkResultBean data, Row row){
+        int cellNum = 0;
+        Cell cell;
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getVersion());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getScenario());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getRules());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getDbAction());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getProduct());
+        Map benchmarkResult = data.getBenchmarkResult();
+        cell = row.createCell(cellNum++);
+        cell.setCellValue((double)benchmarkResult.get("tps"));
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getConcurrency());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue((int)benchmarkResult.get("total"));
+        cell = row.createCell(cellNum++);
+        cell.setCellValue((double)benchmarkResult.get("maxCost"));
+        cell = row.createCell(cellNum++);
+        cell.setCellValue((double)benchmarkResult.get("minCost"));
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getSql());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getDbShardingCount());
+        cell = row.createCell(cellNum++);
+        cell.setCellValue(data.getTableShardingCount());
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultDirManagement.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultDirManagement.java
new file mode 100644
index 0000000..173bf02
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultDirManagement.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.common.file.jmeter;
+
+import org.apache.shardingsphere.benchmark.common.file.util.FileUtil;
+
+import java.io.File;
+import java.util.Map;
+
+public final class BenchmarkResultDirManagement {
+    
+    /**
+     * Manage benchmark result directory of jtl.
+     * @param userConfig
+     */
+    public static void manageResultDir(Map userConfig){
+        String benchmarkResultPath = (String)userConfig.get("shardingsphere.benchmark.result.base.path");
+        String benchmarkResultFullRoutingEncryptPath = benchmarkResultPath + "/fullrouting/encrypt";
+        String benchmarkResultFullRoutingMasterSlavePath = benchmarkResultPath + "/fullrouting/masterslave";
+        String benchmarkResultFullRoutingShardingPath = benchmarkResultPath + "/fullrouting/sharding";
+        String benchmarkResultFullRoutingShardingMasterSlaveEncryptPath = benchmarkResultPath + "/fullrouting/shardingmasterslaveencrypt";
+        String benchmarkResultRangeRoutingEncryptPath = benchmarkResultPath + "/rangerouting/encrypt";
+        String benchmarkResultRangeRoutingMasterSlavePath = benchmarkResultPath + "/rangerouting/masterslave";
+        String benchmarkResultRangeRoutingShardingPath = benchmarkResultPath + "/rangerouting/sharding";
+        String benchmarkResultRangeRoutingShardingMasterSlaveEncryptPath = benchmarkResultPath + "/rangerouting/shardingmasterslaveencrypt";
+        String benchmarkResultSingleRoutingEncryptPath = benchmarkResultPath + "/singlerouting/encrypt";
+        String benchmarkResultSingleRoutingMasterSlavePath = benchmarkResultPath + "/singlerouting/masterslave";
+        String benchmarkResultSingleRoutingShardingPath = benchmarkResultPath + "/singlerouting/sharding";
+        String benchmarkResultSingleRoutingShardingMasterSlaveEncryptPath = benchmarkResultPath + "/singlerouting/shardingmasterslaveencrypt";
+        manageEachScenarioResultDir(benchmarkResultFullRoutingEncryptPath);
+        manageEachScenarioResultDir(benchmarkResultFullRoutingMasterSlavePath);
+        manageEachScenarioResultDir(benchmarkResultFullRoutingShardingPath);
+        manageEachScenarioResultDir(benchmarkResultFullRoutingShardingMasterSlaveEncryptPath);
+        manageEachScenarioResultDir(benchmarkResultRangeRoutingEncryptPath);
+        manageEachScenarioResultDir(benchmarkResultRangeRoutingMasterSlavePath);
+        manageEachScenarioResultDir(benchmarkResultRangeRoutingShardingPath);
+        manageEachScenarioResultDir(benchmarkResultRangeRoutingShardingMasterSlaveEncryptPath);
+        manageEachScenarioResultDir(benchmarkResultSingleRoutingEncryptPath);
+        manageEachScenarioResultDir(benchmarkResultSingleRoutingMasterSlavePath);
+        manageEachScenarioResultDir(benchmarkResultSingleRoutingShardingPath);
+        manageEachScenarioResultDir(benchmarkResultSingleRoutingShardingMasterSlaveEncryptPath);
+    }
+    
+    /**
+     * Manage each scenario result directory.
+     * @param path
+     */
+    public static void manageEachScenarioResultDir(String path){
+        if (false == FileUtil.isExisted(path)){
+            FileUtil.createDirs(path);
+        } else {
+            FileUtil.deleteFile(new File(path));
+        }
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultParser.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultParser.java
new file mode 100644
index 0000000..8881ac3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultParser.java
@@ -0,0 +1,82 @@
+package org.apache.shardingsphere.benchmark.common.file.jmeter;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Benchmark result parser for jtl.
+ */
+public final class BenchmarkResultParser {
+    
+    /**
+     * Benchmark statistic.
+     * @param filePath
+     * @param skipBegin
+     * @param skipEnd
+     * @return
+     */
+    public static Map benchmarkStatistic(String filePath, int skipBegin, int skipEnd) {
+        int failCount = 0;
+        int successCount = 0;
+        FileInputStream fileStream = null;
+        Map result = new HashMap(1,1);
+        List jMeterCostsList = new ArrayList<>(10);
+        List jMeterTimeList = new ArrayList<>(10);
+        
+        if (new File(filePath).exists()) {
+            try {
+                int totalCount = 0;
+                fileStream = new FileInputStream(filePath);
+                InputStreamReader readStream = new InputStreamReader(fileStream);
+                BufferedReader reader = new BufferedReader(readStream);
+                String eachJMeterResult = "";
+                while ((eachJMeterResult = reader.readLine()) != null) {
+                    totalCount = totalCount + 1;
+                    if (totalCount > skipBegin && totalCount < skipEnd) {
+                        Map eachPerformanceInfo = BenchmarkResultRowParser.convertResult(eachJMeterResult);
+                        jMeterCostsList.add(eachPerformanceInfo.get("jMeterCost"));
+                        jMeterTimeList.add(eachPerformanceInfo.get("jMeterTime"));
+                        if ("true".equals(eachPerformanceInfo.get("isJMeterSuccess"))) {
+                            successCount = successCount + 1;
+                        } else {
+                            failCount = failCount + 1;
+                        }
+                    }
+                }
+                if (jMeterCostsList.size() > 0) {
+                    int concurrentCount = jMeterCostsList.size();
+                    double startTime = Double.valueOf((Double) jMeterTimeList.get(0)).doubleValue();
+                    double endTime = Double.valueOf((Double) jMeterTimeList.get(concurrentCount - 1)).doubleValue();
+                    double totalTimeCost = (endTime - startTime) / 1000;
+                    double benchmarkTps = concurrentCount / totalTimeCost;
+                    if (filePath.contains("insertupdatedelete")) {
+                        benchmarkTps = benchmarkTps * 4;
+                    }
+                    Collections.sort(jMeterCostsList);
+                    int tp50thIndex = (int) 0.5 * jMeterCostsList.size();
+                    double tp50th = Double.valueOf((Double) jMeterCostsList.get(tp50thIndex)).doubleValue();
+                    int tp90thIndex = (int) 0.9 * jMeterCostsList.size();
+                    double tp90th = Double.valueOf((Double) jMeterCostsList.get(tp90thIndex)).doubleValue();
+                    int tp95thIndex = (int) 0.95 * jMeterCostsList.size();
+                    double tp95th = Double.valueOf((Double) jMeterCostsList.get(tp95thIndex)).doubleValue();
+                    double maxCost = Double.valueOf((Double) jMeterCostsList.get(concurrentCount - 1)).doubleValue();
+                    double minCost = Double.valueOf((Double) jMeterCostsList.get(0)).doubleValue();
+                    result.put("tps", benchmarkTps);
+                    result.put("total", concurrentCount);
+                    result.put("tp50th", tp50th);
+                    result.put("tp90th", tp90th);
+                    result.put("tp95th", tp95th);
+                    result.put("maxCost", maxCost);
+                    result.put("minCost", minCost);
+                }
+            } catch (FileNotFoundException ex) {
+                ex.printStackTrace();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+        return result;
+    }
+}
+
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultRowParser.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultRowParser.java
new file mode 100644
index 0000000..2cd1fe9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/jmeter/BenchmarkResultRowParser.java
@@ -0,0 +1,24 @@
+package org.apache.shardingsphere.benchmark.common.file.jmeter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Benchmark result row parser.
+ */
+public final class BenchmarkResultRowParser {
+    
+    /**
+     * Convert result of each row for jtl.
+     * @param eachJMeterResult
+     * @return
+     */
+    public static Map convertResult(String eachJMeterResult) {
+        Map performanceInfo = new HashMap<>(1,1);
+        String[] eachJMeterDetails = eachJMeterResult.split(",");
+        performanceInfo.put("jMeterTime", Double.valueOf(eachJMeterDetails[0]).doubleValue());
+        performanceInfo.put("jMeterCost", Double.valueOf(eachJMeterDetails[1]).doubleValue());
+        performanceInfo.put("isJMeterSuccess", (String) eachJMeterDetails[7]);
+        return performanceInfo;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/properties/BenchmarkConfigProperties.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/properties/BenchmarkConfigProperties.java
new file mode 100644
index 0000000..13d02e2
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/properties/BenchmarkConfigProperties.java
@@ -0,0 +1,75 @@
+package org.apache.shardingsphere.benchmark.common.file.properties;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+import java.util.Properties;
+
+/**
+ * Benchmark config properties.
+ */
+public final class BenchmarkConfigProperties {
+    
+    /**
+     * Get all of benchmark output paths of result for jtl.
+     * @param benchmarkBasePath
+     * @param outputBasePath
+     * @return
+     */
+    public static Properties getBenchmarkOutputConfig(String benchmarkBasePath, String outputBasePath) {
+        Properties result = new Properties();
+        try {
+            InputStream in = BenchmarkConfigProperties.class.getResourceAsStream("/config/benchmark-result.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            result.load(in);
+            Iterator<String> it = result.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                String value = result.getProperty(key);
+                value = value.replace("/export/shardingsphere-benchmark/result", outputBasePath);
+                result.setProperty(key, value);
+            }
+            in.close();
+            br.close();
+            
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return result;
+    }
+    
+    /**
+     * Modify benchmark output path with root directory configured from user-config.properties.
+     * @param benchmarkBasePath
+     * @param outputBasePath
+     */
+    public static void modifyBenchmarkOutputConfig(String benchmarkBasePath, String outputBasePath){
+         FileOutputStream fileOutputStream = null;
+        try {
+            Properties benchmarkResultConfigProp = getBenchmarkOutputConfig(benchmarkBasePath, outputBasePath);
+            String filePath = benchmarkBasePath + "/src/main/resources/config/benchmark-result.properties";
+            fileOutputStream = new FileOutputStream(filePath);
+            benchmarkResultConfigProp.store(fileOutputStream, "");
+        } catch (FileNotFoundException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } finally {
+            try {
+                fileOutputStream.close();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+    
+    public static void main(String[] args){
+        String benchmarkBasePath = "D:/shardingsphere-benchmark";
+        String outputBasePath = "/export/shardingsphere-benchmark/result";
+        modifyBenchmarkOutputConfig(benchmarkBasePath, outputBasePath);
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/FileUtil.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/FileUtil.java
new file mode 100644
index 0000000..c0bd4f6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/FileUtil.java
@@ -0,0 +1,135 @@
+package org.apache.shardingsphere.benchmark.common.file.util;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.apache.commons.compress.utils.IOUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+
+public final class FileUtil {
+    
+    /**
+     * Create directories with given path.
+     * @param dirsPath
+     */
+    public static void createDirs(String dirsPath) {
+        File dirs = new File(dirsPath);
+        dirs.mkdirs();
+    }
+    
+    /**
+     * Copy file from source to destination.
+     * @param sourcePath
+     * @param destPath
+     */
+    public static void copyFile(String sourcePath, String destPath) {
+        FileChannel inputChannel = null;
+        FileChannel outputChannel = null;
+        try {
+            inputChannel = new FileInputStream(sourcePath).getChannel();
+            outputChannel = new FileOutputStream(destPath).getChannel();
+            outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
+        } catch (FileNotFoundException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } finally {
+            try {
+                inputChannel.close();
+                outputChannel.close();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+    
+    /**
+     * Check whether the file or directory existed with given path.
+     * @param filePath
+     * @return
+     */
+    public static boolean isExisted(String filePath) {
+        File file = new File(filePath);
+        if (file.exists()){
+            return true;
+        }
+        return false;
+    }
+    
+    /**
+     * Delete files by recursion by the given path
+     * @param file
+     */
+    public static void deleteFileByRecursion(File file) {
+        File[] fs = file.listFiles();
+        for (int i = 0; i < fs.length; i++) {
+            File f = fs[i];
+            if (f.isFile()) {
+                f.delete();
+            } else if (f.isDirectory()) {
+                deleteFileByRecursion(f);
+                f.delete();
+            }
+        }
+        file.delete();
+    }
+    
+    /**
+     * Delete file in the give path, not including its sub files.
+     * @param file
+     */
+    public static void deleteFile(File file) {
+        File[] fileList = file.listFiles();
+        for (int i = 0; i < fileList.length; i++) {
+            File f = fileList[i];
+            f.delete();
+        }
+    }
+    
+    /**
+     * Decompress file.
+     * @param sourceFilePath
+     * @param destFilePath
+     */
+    public static void decompressFile(String sourceFilePath, String destFilePath){
+        TarArchiveEntry entry;
+        File sourceFile = new File(sourceFilePath);
+        try {
+            TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(sourceFile)));
+            File extraceFolder = new File(destFilePath);
+            while ((entry = fin.getNextTarEntry()) != null) {
+                if (entry.isDirectory()) {
+                    continue;
+                }
+                File curfile = new File(extraceFolder, entry.getName());
+                File parent = curfile.getParentFile();
+                if (!parent.exists()) {
+                    parent.mkdirs();
+                }
+                IOUtils.copy(fin, new FileOutputStream(curfile));
+            }
+        } catch (FileNotFoundException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    public static void deleteFileBySuffix(String filePath, String suffix){
+        File file = null;
+        File[] filelist = file.listFiles();
+        for (int i = 0; i < filelist.length; i++) {
+            file = filelist[i];
+            if (file.getName().endsWith("apk") && !file.getName().endsWith(suffix))
+            {
+                file.delete();
+            }
+        }
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/ProcessUtil.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/ProcessUtil.java
new file mode 100644
index 0000000..764f810
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/ProcessUtil.java
@@ -0,0 +1,171 @@
+package org.apache.shardingsphere.benchmark.common.file.util;
+
+import org.apache.commons.lang.StringUtils;
+
+import java.awt.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class ProcessUtil {
+    
+    public static void killProcess(String processName){
+        if (System.getProperty("os.name").toLowerCase().contains("linux")){
+            String pid = getLinuxProcess(processName);
+            killLinuxProcess(pid);
+        } else {
+            killWindowsProcess(processName);
+        }
+    }
+    
+    public static void startUpProcess(String file){
+        if (System.getProperty("os.name").toLowerCase().contains("linux")){
+            startLinuxProcess(file);
+        } else {
+            startWindowsProcess(file);
+        }
+    }
+    
+    
+    public static boolean startLinuxProcess(String shScriptPath){
+    
+        String line = "";
+        Process process = null;
+        BufferedReader input = null;
+        try {
+            String[] cmd = {"/bin/sh", "-c", shScriptPath};
+            process = Runtime.getRuntime().exec(cmd);
+            input = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            StringBuffer sb = new StringBuffer("");
+            while ((line = input.readLine()) != null) {
+                sb.append(line).append("\r\n");
+            }
+            if(process != null){
+                int extValue = process.waitFor(); 
+                if(0 == extValue){
+                    return true;
+                }
+            }
+            return false;
+        } catch (Exception e) {
+            return false;
+        } finally {
+            try {
+                input.close();
+                process.destroy();
+            } catch (Exception e) {}
+        }
+    }
+    
+    
+    public static String getLinuxProcess(String processName) {
+        
+        BufferedReader reader = null;
+        try {
+            Process process = Runtime.getRuntime().exec("ps -ef | grep " + processName);
+            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            String line = null;
+            while ((line = reader.readLine()) != null) {
+                if (line.contains(processName)) {
+                    String[] strs = line.split("\\s+");
+                    return strs[1];
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) { }
+            }
+        }
+        return null;
+    }
+    
+    
+    public static void killLinuxProcess(String Pid) {
+        
+        Process process = null;
+        BufferedReader reader = null;
+        try {
+            process = Runtime.getRuntime().exec("kill -9 " + Pid);
+            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            String line = null;
+            while ((line = reader.readLine()) != null) {
+                System.out.println("kill PID return info -----> " + line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (process != null) {
+                process.destroy();
+            }
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) { }
+            }
+        }
+    }
+    
+    public static void startWindowsProcess(String processName) {
+        if (StringUtils.isNotBlank(processName)) {
+            try {
+                Desktop.getDesktop().open(new File(processName));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static void killWindowsProcess(String processName) {
+        if (StringUtils.isNotBlank(processName)) {
+            try {
+                executeWindowsCmd("taskkill /F /IM " + processName);
+            } catch (IOException exception) {
+                exception.printStackTrace();
+            }
+        }
+    }
+    
+    public static String executeWindowsCmd(String command) throws IOException {
+        Runtime runtime = Runtime.getRuntime();
+        Process process = runtime.exec("cmd /c " + command);
+        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
+        String line = null;
+        StringBuilder build = new StringBuilder();
+        while ((line = br.readLine()) != null) {
+            build.append(line);
+        }
+        return build.toString();
+    }
+
+
+    
+    public static boolean getWindowsProcess(String processName) {
+        BufferedReader bufferedReader = null;
+        try {
+            Process proc = Runtime.getRuntime().exec("tasklist -fi " + '"' + "imagename eq " + processName + '"');
+            bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+            String line = null;
+            while ((line = bufferedReader.readLine()) != null) {
+                if (line.contains(processName)) {
+                    return true;
+                }
+            }
+            return false;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return false;
+        } finally {
+            if (bufferedReader != null) {
+                try {
+                    bufferedReader.close();
+                } catch (Exception ex) {
+                }
+            }
+        }
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/PropertiesUtil.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/PropertiesUtil.java
new file mode 100644
index 0000000..b82ea3b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/util/PropertiesUtil.java
@@ -0,0 +1,65 @@
+package org.apache.shardingsphere.benchmark.common.file.util;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Properties util.
+ */
+public class PropertiesUtil {
+
+    public static Map SQL = new HashMap<>(1,1);
+    static {
+        Properties prop = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/sqlconfig.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            prop.load(in);
+            String values = "";
+            Iterator<String> it = prop.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                if (key.contains(".values")) {
+                    values = prop.getProperty(key);
+                    if (values != null && values.length() > 0 && values.contains(",")) {
+                        String[] arrayValues = values.split(",");
+                        List listValues = new ArrayList();
+                        for (int i = 0; i < arrayValues.length; i++) {
+                            String[] subs = arrayValues[i].split(":");
+                            if (subs.equals("Int")) {
+                                listValues.add(Integer.valueOf(subs[1]));
+                            } else if (subs[0].equals("Float")) {
+                                listValues.add(Float.valueOf(subs[1]));
+                            } else if (subs[0].equals("Long")) {
+                                listValues.add(Long.valueOf(subs[1]));
+                            } else if (subs[0].equals("String")) {
+                                listValues.add(String.valueOf(subs[1]));
+                            } else {
+                                listValues.add(subs[1]);
+                            }
+                        }
+                        SQL.put(key, listValues);
+                    } else {
+                        SQL.put(key, prop.getProperty(key));
+                    }
+                } else {
+                    SQL.put(key, prop.getProperty(key));
+                }
+            }
+            in.close();
+            br.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println(SQL.toString());
+        Map m = new HashMap();
+        m.put("key1", "abc");
+        m.put("key2", 1);
+        System.out.println(m.toString());
+        System.out.println(Boolean.TRUE.toString());
+        System.out.println(Boolean.FALSE.toString());
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/xml/BenchmarkConfigJmx.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/xml/BenchmarkConfigJmx.java
new file mode 100644
index 0000000..e1e92ca
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/xml/BenchmarkConfigJmx.java
@@ -0,0 +1,182 @@
+package org.apache.shardingsphere.benchmark.common.file.xml;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Benchmark config jmx.
+ */
+public final class BenchmarkConfigJmx {
+    
+    public static FileFilter jmxFilter = new JmxFileFilter();
+    
+    /**
+     * Modify benchmark output directory for jmx with configured root path in the user-config.properties. 
+     * @param benchmarkBasePath
+     * @param benchmarkOutputBasePath
+     * @param jmeterConcurrencyCount
+     * @param jmeterLoopCount
+     */
+    public static void modifyBenchmarkOutputBasePath(String benchmarkBasePath, String benchmarkOutputBasePath, int jmeterConcurrencyCount, int jmeterLoopCount){
+        File jmxFile = null;
+        List<File> jmxFileList = getJmxFileList(benchmarkBasePath);
+        for (int i = 0; i < jmxFileList.size(); i++){
+            jmxFile = jmxFileList.get(i);
+            Document xmlDocument = getOutputElement(jmxFile, benchmarkOutputBasePath, jmeterConcurrencyCount, jmeterLoopCount);
+            saveJmxFile(jmxFile, xmlDocument);
+        }
+    }
+    
+    /**
+     * Filter target files with its suffix.
+     * @param targetDir
+     * @param filter
+     * @param resultFiles
+     * @return
+     */
+    public static List<File> filterTargetFiles(File targetDir, FileFilter filter, List<File> resultFiles) {
+        File[] files = targetDir.listFiles(filter);
+        for (File file : files) {
+            if (file.isDirectory()) {
+                filterTargetFiles(file, filter, resultFiles);
+            } else {
+                resultFiles.add(file);
+            }
+        }
+        return resultFiles;
+    }
+    
+    /**
+     * Get all of jmx files.
+     * @param benchmarkBasePath
+     * @return
+     */
+    public static List<File> getJmxFileList(String benchmarkBasePath){
+        
+        List<File> jmxFileList = new ArrayList<File>(10);
+        String jmxBasePath = benchmarkBasePath + "/src/main/resources/testplan";
+        File jmxBaseDir = new File(jmxBasePath);
+        return filterTargetFiles(jmxBaseDir, jmxFilter, jmxFileList);
+    }
+    
+    /**
+     * Save jmx file.
+     * @param testPlanFile
+     * @param xmlDocument
+     */
+    public static void saveJmxFile(File testPlanFile, Document xmlDocument){
+        TransformerFactory transFactory = TransformerFactory.newInstance();
+        Transformer transformer = null;
+        try {
+            transformer = transFactory.newTransformer();
+            transformer.setOutputProperty("indent", "yes");
+            DOMSource source = new DOMSource();
+            source.setNode(xmlDocument);
+            StreamResult result = new StreamResult();
+            result.setOutputStream(new FileOutputStream(testPlanFile));
+            transformer.transform(source, result);
+        } catch (TransformerConfigurationException ex) {
+            ex.printStackTrace();
+        } catch (FileNotFoundException ex) {
+            ex.printStackTrace();
+        } catch (TransformerException ex) {
+            ex.printStackTrace();
+        } finally {}
+    
+    }
+    
+    /**
+     * Get xml element of jmx.
+     * @param testPlanFile
+     * @param outPutBasePath
+     * @param jmeterConcurrencyCount
+     * @param jmeterLoopCount
+     * @return
+     */
+    public static Document getOutputElement(File testPlanFile, String outPutBasePath, int jmeterConcurrencyCount, int jmeterLoopCount){
+        Element root = null;
+        Document result = null;
+        DocumentBuilder documentBuilder = null;
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setIgnoringElementContentWhitespace(true);
+        try {
+            documentBuilder = factory.newDocumentBuilder();
+            result = (Document) documentBuilder.parse(testPlanFile);
+            root = result.getDocumentElement();
+            XPathFactory xpathFactory = XPathFactory.newInstance();
+            XPath xpath = xpathFactory.newXPath();
+            String resultCollectorXpath = "//jmeterTestPlan/hashTree/hashTree/hashTree/hashTree/ResultCollector";
+            NodeList nodeList = (NodeList) xpath.evaluate(resultCollectorXpath, root, XPathConstants.NODESET);
+            Element resultCollectorElement = (Element) nodeList.item(1);
+            String stringPropXpath = "./stringProp";
+            Element stringPropElement = (Element) xpath.evaluate(stringPropXpath, resultCollectorElement, XPathConstants.NODE);
+            String outputPath = stringPropElement.getTextContent();
+            outputPath = outputPath.replace("/export/shardingsphere-benchmark/result", outPutBasePath);
+            stringPropElement.setTextContent(outputPath);
+            if (testPlanFile.getName().contains("insertupdatedelete") || testPlanFile.getName().contains("select")){
+                String jmeterLoopXpath = "//jmeterTestPlan/hashTree/hashTree/ThreadGroup/elementProp/stringProp";
+                String jmeterConcurrencyXpath = "//jmeterTestPlan/hashTree/hashTree/ThreadGroup/stringProp[@name='ThreadGroup.num_threads']";
+                Element jmeterLoopElement = (Element) xpath.evaluate(jmeterLoopXpath, root, XPathConstants.NODE);
+                Element jmeterConcurrencyElement = (Element) xpath.evaluate(jmeterConcurrencyXpath, root, XPathConstants.NODE);
+                jmeterLoopElement.setTextContent("" + jmeterLoopCount);
+                jmeterConcurrencyElement.setTextContent("" + jmeterConcurrencyCount);
+            }
+        } catch (ParserConfigurationException ex) {
+            ex.printStackTrace();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (XPathExpressionException ex) {
+            ex.printStackTrace();
+        } catch (SAXException ex) {
+            ex.printStackTrace();
+        } finally {
+        }
+        return result;
+    }
+    
+    
+    /**
+     * Jmx file filter.
+     */
+    private final static class JmxFileFilter implements FileFilter {
+        
+        @Override
+        public boolean accept(File file) {
+            if (file.isDirectory()) {
+                return true;
+            }
+            String fileName = file.getName();
+            return fileName.matches("(?i).+jmx$");
+        }
+        
+    }
+    
+    public static void main(String[] args) {
+        
+        String benchmarkBasePath = "D:/shardingsphere-benchmark";
+        String outputBasePath = "/export/shardingsphere-benchmark/result";
+        modifyBenchmarkOutputBasePath(benchmarkBasePath, outputBasePath, 10,1000);
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/yaml/BenchmarkConfigYaml.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/yaml/BenchmarkConfigYaml.java
new file mode 100644
index 0000000..56bcbb3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/file/yaml/BenchmarkConfigYaml.java
@@ -0,0 +1,127 @@
+package org.apache.shardingsphere.benchmark.common.file.yaml;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Benchmark config yaml
+ */
+public final class BenchmarkConfigYaml {
+    
+    public static FileFilter yamlFilter = new BenchmarkConfigYaml.YamlFileFilter();
+    
+    /**
+     * Modify benchmark yaml file
+     * @param benchmarkBasePath
+     * @param shardingDbCount
+     * @param shardingTableCount
+     * @param maxConnectionCount
+     * @param minConnectionCount
+     * @param maxConnectionPerQuery
+     */
+    public static void modifyBenchmarkYamlFile(String benchmarkBasePath, int shardingDbCount, int shardingTableCount, int maxConnectionCount, int minConnectionCount, int maxConnectionPerQuery){
+        String line = "";
+        File yamlFile = null;
+        List<File> yamlFileList = getYamlFileList(benchmarkBasePath);
+        try {
+            for(int i = 0; i < yamlFileList.size(); i++) {
+                yamlFile = yamlFileList.get(i);
+                StringBuffer bufAll = new StringBuffer();
+                BufferedReader br = new BufferedReader(new FileReader(yamlFile));
+                while ((line = br.readLine()) != null) {
+                    if (line.contains("${0..2}.sbtest${0..99}")){
+                        line = line.replace("${0..2}.sbtest${0..99}", "${0.." + (shardingDbCount-1) + "}.sbtest${0.." + (shardingTableCount-1) + "}");
+                    }
+                    if (line.contains("maximumPoolSize: 200")){
+                        line = line.replaceAll("maximumPoolSize: 200", "maximumPoolSize: " + maxConnectionCount);
+                    }
+                    if (line.contains("{id % 3}")) {
+                        line = line.replace("{id % 3}", "{id % " + shardingDbCount + "}");
+                    }
+                    if (line.contains("{k % 100}")){
+                        line = line.replace("{k % 100}", "{k % " + shardingTableCount + "}");
+                    } 
+                    if (line.contains("max.connections.size.per.query: 2")){
+                        line = line.replace("max.connections.size.per.query: 2", "max.connections.size.per.query: " + maxConnectionPerQuery);
+                    }
+                    if (line.contains("maxPoolSize: 200")){
+                        line = line.replaceAll("maxPoolSize: 200", "maxPoolSize: " + maxConnectionCount);
+                    }
+                    if (line.contains("minPoolSize: 200")){
+                        line = line.replaceAll("minPoolSize: 200", "minPoolSize: " + minConnectionCount);
+                    }
+    
+                    bufAll.append(line);
+                    bufAll.append(System.getProperty("line.separator"));
+                }
+                br.close();
+                BufferedWriter bw = new BufferedWriter(new FileWriter(yamlFile));
+                bw.write(bufAll.toString());
+                bw.close();
+            } 
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } finally {
+        }
+    }
+    
+    /**
+     * Get all of yaml files.
+     * @param benchmarkBasePath
+     * @return
+     */
+    public static List<File> getYamlFileList(String benchmarkBasePath){
+        String yamlBasePath =  benchmarkBasePath + "/src/main/resources/yaml";
+        File yamlBaseDir = new File(yamlBasePath);
+        List<File> yamlFileList = new ArrayList<File>(10);
+        return filterTargetFiles(yamlBaseDir, yamlFilter, yamlFileList);
+    }
+    
+    /**
+     * File target files with its suffix.
+     * @param targetDir
+     * @param filter
+     * @param resultFiles
+     * @return
+     */
+    public static List<File> filterTargetFiles(File targetDir, FileFilter filter, List<File> resultFiles) {
+        File[] files = targetDir.listFiles(filter);
+        for (File file : files) {
+            if (file.isDirectory()) {
+                filterTargetFiles(file, filter, resultFiles);
+            } else {
+                resultFiles.add(file);
+            }
+        }
+        return resultFiles;
+    }
+    
+    /**
+     * Yaml file filter.
+     */
+    private static class YamlFileFilter implements FileFilter {
+        
+        @Override
+        public boolean accept(File file) {
+            if (file.isDirectory()) {
+                return true;
+            }
+            String fileName = file.getName();
+            return fileName.matches("(?i).+yaml$");
+        }
+    }
+    
+    public static void main(String[] args) {
+        String path = "D:\\shardingsphere-benchmark\\src\\main\\resources\\yaml\\fullrouting\\sharding-masterslave-encrypt\\shardingjdbc\\config-shardingjdbc-fullrouting-sharding-masterslave-encrypt-test.yaml";
+        String benchmarkBasePath = "D:/shardingsphere-benchmark";
+        modifyBenchmarkYamlFile(benchmarkBasePath, 1000,1000, 99, 9, 8);
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/prepare/ProxyPreparation.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/prepare/ProxyPreparation.java
new file mode 100644
index 0000000..e22d44f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/prepare/ProxyPreparation.java
@@ -0,0 +1,54 @@
+package org.apache.shardingsphere.benchmark.common.prepare;
+
+import org.apache.shardingsphere.benchmark.common.file.util.FileUtil;
+import org.apache.shardingsphere.benchmark.common.file.util.ProcessUtil;
+
+import java.io.File;
+import java.util.Map;
+
+/**
+ * Proxy preparation which is to startup/top its process, update its config.
+ */
+public final class ProxyPreparation {
+    
+    /**
+     * Proxy prepare.
+     * @param userConfig
+     * @param ruleConfigPath
+     * @param serverConfigFile
+     */
+    public static void prepare(Map userConfig, String ruleConfigPath, String serverConfigFile){
+        String benchmarkVersion = (String)userConfig.get("shardingsphere.version");
+        String shardingSphereBasePath = (String)userConfig.get("shardingsphere.project.base.path");
+        String proxyBasePath = (String)userConfig.get("shardingsphere.benchmark.proxy.machine.proxy.dest.base.path");
+        String benchmarkBasePath = (String)userConfig.get("shardingsphere.benchmark.project.base.path");
+        String ruleConfigFullPath = benchmarkBasePath + "/" + ruleConfigPath;
+        String serverConfigFullFile = benchmarkBasePath + "/" + serverConfigFile;
+        String proxySourcePath = "";
+        String proxyDestBasePath = "";
+    
+        if (benchmarkVersion.equals("4.1.1")){
+            proxySourcePath = shardingSphereBasePath + "/sharding-distribution/sharding-proxy-distribution/target/apache-shardingsphere-5.0.0-RC1-SNAPSHOT-sharding-proxy-bin.tar.gz";
+            proxyDestBasePath = proxyBasePath + "/apache-shardingsphere-5.0.0-RC1-SNAPSHOT-sharding-proxy-bin";
+        } else {
+            proxySourcePath = shardingSphereBasePath + "/shardingsphere-distribution/shardingsphere-proxy-distribution/target/apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin.tar.gz";
+            proxyDestBasePath = proxyBasePath + "/apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin";
+        }
+        ProcessUtil.killProcess("proxy");
+        if (FileUtil.isExisted(proxyDestBasePath)){
+            FileUtil.deleteFileByRecursion(new File(proxyDestBasePath));
+        }
+        FileUtil.decompressFile(proxySourcePath, proxyBasePath);
+        String proxyConfigPath = proxyDestBasePath + "/conf";
+        FileUtil.deleteFileBySuffix(proxyConfigPath, "yaml");
+        FileUtil.copyFile(ruleConfigFullPath, proxyConfigPath);
+        FileUtil.copyFile(serverConfigFullFile, proxyConfigPath);
+        String startUpScript = "";
+        if (System.getProperty("os.name").toLowerCase().contains("linux")){
+            startUpScript = proxyDestBasePath + "/bin/start.sh";
+        } else {
+            startUpScript = proxyDestBasePath + "/bin/start.bat";
+        }
+        ProcessUtil.startUpProcess(startUpScript);
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkFullroutingStatistic.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkFullroutingStatistic.java
new file mode 100644
index 0000000..ac3c5e9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkFullroutingStatistic.java
@@ -0,0 +1,214 @@
+package org.apache.shardingsphere.benchmark.common.statistic;
+
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+import org.apache.shardingsphere.benchmark.common.file.jmeter.BenchmarkResultParser;
+
+import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Statistic for benchmark full routing scenario.
+ */
+public class BenchmarkFullroutingStatistic extends BenchmarkStatistic{
+    
+    public List<BenchmarkResultBean> result = new ArrayList<BenchmarkResultBean>(10);
+    
+    /**
+     * Calculate result for full routing scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     * @return
+     */
+    public List<BenchmarkResultBean> calculateFullroutingScenarioResult(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        calculateFullroutingEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurency, updateTime, dbShardingCount, tableShardingCount);
+        calculateFullroutingMasterslave(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurency, updateTime, dbShardingCount, tableShardingCount);
+        calculateFullroutingSharding(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurency, updateTime, dbShardingCount, tableShardingCount);
+        calculateFullroutingShardingMasterslaveEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurency, updateTime, dbShardingCount, tableShardingCount);
+        return result;
+    }
+    
+    /**
+     * Calculate result for full routing encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateFullroutingEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyFullRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.fullrouting.encrypt.select.result");
+        Map proxyFullRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyFullRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxyFullRoutingEncryptSelectResult.size() > 0){
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.sql");
+            BenchmarkResultBean proxyFullRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyFullRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingProxy", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(proxyFullRoutingEncryptSelectResultBean);
+        }
+        String shardingjdbcFullRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.fullrouting.encrypt.select.result");
+        Map shardingjdbcFullRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcFullRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcFullRoutingEncryptSelectResult.size() > 0){
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.sql");
+            BenchmarkResultBean shardingjdbcFullRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcFullRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingJDBC", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(shardingjdbcFullRoutingEncryptSelectResultBean);
+        }
+        String jdbcFullRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.fullrouting.encrypt.select.result");
+        Map jdbcFullRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcFullRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcFullRoutingEncryptSelectResult.size() > 0){
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.select.sql");
+            BenchmarkResultBean jdbcFullRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcFullRoutingEncryptSelectResult, jdbcSelectSql, "Encrypt", "MYSQL", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(jdbcFullRoutingEncryptSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for full routing master-slave scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateFullroutingMasterslave(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyFullRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.fullrouting.masterslave.select.result");
+        Map proxyFullRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyFullRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (proxyFullRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.sql");
+            BenchmarkResultBean proxyFullRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyFullRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingProxy", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(proxyFullRoutingMasterSlaveSelectResultBean);
+        }
+        String shardingjdbcFullRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.fullrouting.masterslave.select.result");
+        Map shardingjdbcFullRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcFullRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcFullRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.sql");
+            BenchmarkResultBean shardingjdbcFullRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcFullRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingJDBC", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(shardingjdbcFullRoutingMasterSlaveSelectResultBean);
+        }
+        String jdbcFullRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.fullrouting.masterslave.select.result");
+        Map jdbcFullRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcFullRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (jdbcFullRoutingMasterSlaveSelectResult.size() > 0){
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.fullrouting.masterslave.select.sql");
+            BenchmarkResultBean jdbcFullRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcFullRoutingMasterSlaveSelectResult, jdbcSelectSql, "MasterSlave", "MYSQL", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(jdbcFullRoutingMasterSlaveSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for full routing sharding scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateFullroutingSharding(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyFullRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.fullrouting.sharding.select.result");
+        Map proxyFullRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyFullRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (proxyFullRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            BenchmarkResultBean proxyFullRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyFullRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingProxy", "FullRouting", "Select", concurency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyFullRoutingShardingSelectResultBean);
+        }
+        String shardingjdbcFullRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.fullrouting.sharding.select.result");
+        Map shardingjdbcFullRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcFullRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcFullRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            BenchmarkResultBean shardingjdbcFullRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcFullRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingJDBC", "FullRouting", "Select", concurency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcFullRoutingShardingSelectResultBean);
+        }
+        String jdbcFullRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.fullrouting.sharding.select.result");
+        Map jdbcFullRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcFullRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (jdbcFullRoutingShardingSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.fullrouting.sharding.select.sql");
+            BenchmarkResultBean jdbcFullRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcFullRoutingShardingSelectResult, jdbcSelectSql, "Sharding", "MYSQL", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(jdbcFullRoutingShardingSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for full routing sharding-master-slave-encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateFullroutingShardingMasterslaveEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyFullRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.fullrouting.shardingmasterslaveencrypt.select.result");
+        Map proxyFullRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyFullRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxyFullRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean proxyFullRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyFullRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingProxy", "FullRouting", "Select", concurency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyFullRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.fullrouting.shardingmasterslaveencrypt.select.result");
+        Map shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingJDBC", "FullRouting", "Select", concurency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcFullRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String jdbcFullRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.fullrouting.shardingmasterslaveencrypt.select.result");
+        Map jdbcFullRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcFullRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcFullRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean jdbcFullRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcFullRoutingShardingMasterSlaveEncryptSelectResult, jdbcSelectSql, "Sharding+Master+Slave+Encrypt", "MYSQL", "FullRouting", "Select", concurency, updateTime, 0, 0);
+            result.add(jdbcFullRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate average result for full scenario.
+     * 
+     * @param datasource
+     * @param sqlConfig
+     * @param noShardingParams
+     * @param shardingParams
+     * @return
+     */
+    public  List<BenchmarkResultBean> calculateFullroutingScenarioAvgResult(DataSource datasource, Map sqlConfig, List noShardingParams, List shardingParams){
+        List<BenchmarkResultBean> fullRoutingCalResult = new ArrayList<BenchmarkResultBean>(10);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.encrypt.shardingjdbc.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.encrypt.proxy.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.encrypt.mysql.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.masterslave.shardingjdbc.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.masterslave.proxy.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.masterslave.mysql.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.sharding.shardingjdbc.select.sql"), shardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.sharding.proxy.select.sql"), shardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.sharding.mysql.select.sql"), noShardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.shardingjdbc.select.sql"), shardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.proxy.select.sql"), shardingParams, fullRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.mysql.select.sql"), noShardingParams, fullRoutingCalResult);
+        return fullRoutingCalResult;
+    }
+
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkRangeroutingStatistic.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkRangeroutingStatistic.java
new file mode 100644
index 0000000..3e4cf1f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkRangeroutingStatistic.java
@@ -0,0 +1,309 @@
+package org.apache.shardingsphere.benchmark.common.statistic;
+
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+import org.apache.shardingsphere.benchmark.common.file.jmeter.BenchmarkResultParser;
+
+import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Benchmark range routing statistic.
+ */
+public class BenchmarkRangeroutingStatistic extends BenchmarkStatistic{
+    
+    public List<BenchmarkResultBean> result = new ArrayList<BenchmarkResultBean>(10);
+    
+    /**
+     * Calculate result for range routing scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     * @return
+     */
+    public List<BenchmarkResultBean> calculateRangeRoutingScenarioResult(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        calculateRangeroutingEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateRangeRoutingMasterslave(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateRangeRoutingSharding(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateRangeRoutingShardingMasterslaveEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        return result;
+    }
+    
+    /**
+     * Calculate result for range routing encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateRangeroutingEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyRangeRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.encrypt.insertupdatedelete.result");
+        Map proxyRangeRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxyRangeRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxyRangeRoutingEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Encrypt", "ShardingProxy", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(proxyRangeRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcRangeRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.encrypt.insertupdatedelete.result");
+        Map shardingjdbcRangeRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcRangeRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Encrypt", "ShardingJDBC", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcRangeRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String jdbcRangeRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.encrypt.insertupdatedelete.result");
+        Map jdbcRangeRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingEncryptInsertupdatedeleteResult.size() > 0){
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcRangeRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingEncryptInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Encrypt", "MYSQL", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String proxyRangeRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.encrypt.select.result");
+        Map proxyRangeRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.sql");
+            BenchmarkResultBean proxyRangeRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyRangeRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingProxy", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(proxyRangeRoutingEncryptSelectResultBean);
+        }
+        String shardingjdbcRangeRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.encrypt.select.result");
+        Map shardingjdbcRangeRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.sql");
+            BenchmarkResultBean shardingjdbcRangeRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingJDBC", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcRangeRoutingEncryptSelectResultBean);
+        }
+        String jdbcRangeRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.encrypt.select.result");
+        Map jdbcRangeRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingEncryptSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.select.sql");
+            BenchmarkResultBean jdbcRangeRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingEncryptSelectResult, jdbcSelectSql, "Encrypt", "MYSQL", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingEncryptSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for range routing master-slave scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateRangeRoutingMasterslave(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyRangeRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.masterslave.insertupdatedelete.result");
+        Map proxyRangeRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxyRangeRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxyRangeRoutingMasterSlaveInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "MasterSlave", "ShardingProxy", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(proxyRangeRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.masterslave.insertupdatedelete.result");
+        Map shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "MasterSlave", "ShardingJDBC", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcRangeRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String jdbcRangeRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.masterslave.insertupdatedelete.result");
+        Map jdbcRangeRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcRangeRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingMasterSlaveInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "MasterSlave", "MYSQL", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String proxyRangeRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.masterslave.select.result");
+        Map proxyRangeRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.sql");
+            BenchmarkResultBean proxyRangeRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyRangeRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingProxy", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(proxyRangeRoutingMasterSlaveSelectResultBean);
+        }
+        String shardingjdbcRangeRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.masterslave.select.result");
+        Map shardingjdbcRangeRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.sql");
+            BenchmarkResultBean shardingjdbcRangeRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingJDBC", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcRangeRoutingMasterSlaveSelectResultBean);
+        }
+        String jdbcRangeRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.masterslave.select.result");
+        Map jdbcRangeRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingMasterSlaveSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.select.sql");
+            BenchmarkResultBean jdbcRangeRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingMasterSlaveSelectResult, jdbcSelectSql, "MasterSlave", "MYSQL", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingMasterSlaveSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for range routing sharding scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateRangeRoutingSharding(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyRangeRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.sharding.insertupdatedelete.result");
+        Map proxyRangeRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxyRangeRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxyRangeRoutingShardingInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding", "ShardingProxy", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyRangeRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcRangeRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.sharding.insertupdatedelete.result");
+        Map shardingjdbcRangeRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcRangeRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingShardingInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding", "ShardingJDBC", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcRangeRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String jdbcRangeRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.sharding.insertupdatedelete.result");
+        Map jdbcRangeRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.rangerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcRangeRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingShardingInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Sharding", "MYSQL", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String proxyRangeRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.sharding.select.result");
+        Map proxyRangeRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.select.sql");
+            BenchmarkResultBean proxyRangeRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyRangeRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingProxy", "RangeRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyRangeRoutingShardingSelectResultBean);
+        }
+        String shardingjdbcRangeRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.sharding.select.result");
+        Map shardingjdbcRangeRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.sharding.select.sql");
+            BenchmarkResultBean shardingjdbcRangeRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingJDBC", "RangeRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcRangeRoutingShardingSelectResultBean);
+        }
+        String jdbcRangeRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.sharding.select.result");
+        Map jdbcRangeRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingShardingSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.rangerouting.sharding.select.sql");
+            BenchmarkResultBean jdbcRangeRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingShardingSelectResult, jdbcSelectSql, "Sharding", "MYSQL", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingShardingSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for range routing sharding-master-slave-encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateRangeRoutingShardingMasterslaveEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "ShardingProxy", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "ShardingJDBC", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "MYSQL", "RangeRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String proxyRangeRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.rangerouting.shardingmasterslaveencrypt.select.result");
+        Map proxyRangeRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxyRangeRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxyRangeRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean proxyRangeRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxyRangeRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingProxy", "RangeRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxyRangeRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.rangerouting.shardingmasterslaveencrypt.select.result");
+        Map shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingJDBC", "RangeRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcRangeRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String jdbcRangeRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.rangerouting.shardingmasterslaveencrypt.select.result");
+        Map jdbcRangeRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcRangeRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcRangeRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean jdbcRangeRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcRangeRoutingShardingMasterSlaveEncryptSelectResult, jdbcSelectSql, "Sharding+Master+Slave+Encrypt", "MYSQL", "RangeRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcRangeRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate average result for range routing scenario.
+     *
+     * @param datasource
+     * @param sqlConfig
+     * @param noShardingParams
+     * @param shardingParams
+     * @return
+     */
+    public  List<BenchmarkResultBean> calculateRangeroutingScenarioAvgResult(DataSource datasource, Map sqlConfig, List noShardingParams, List shardingParams){
+        List<BenchmarkResultBean> rangeRoutingCalResult = new ArrayList<BenchmarkResultBean>(10);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.shardingjdbc.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.proxy.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.mysql.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.shardingjdbc.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.proxy.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.encrypt.mysql.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.shardingjdbc.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.proxy.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.mysql.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.shardingjdbc.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.proxy.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.masterslave.mysql.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.shardingjdbc.select.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.proxy.select.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.mysql.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.shardingjdbc.insertupdatedelete.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.proxy.insertupdatedelete.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.sharding.mysql.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.shardingjdbc.select.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.proxy.select.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.mysql.select.sql"), noShardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.shardingjdbc.insertupdatedelete.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.proxy.insertupdatedelete.sql"), shardingParams, rangeRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.mysql.insertupdatedelete.sql"), noShardingParams, rangeRoutingCalResult);
+        return rangeRoutingCalResult;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkSingleroutingStatistic.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkSingleroutingStatistic.java
new file mode 100644
index 0000000..6a2749f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkSingleroutingStatistic.java
@@ -0,0 +1,310 @@
+package org.apache.shardingsphere.benchmark.common.statistic;
+
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+import org.apache.shardingsphere.benchmark.common.file.jmeter.BenchmarkResultParser;
+
+import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Benchmark single routing statistic.
+ */
+public class BenchmarkSingleroutingStatistic extends BenchmarkStatistic{
+    
+    public List<BenchmarkResultBean> result = new ArrayList<BenchmarkResultBean>(10);
+    
+    /**
+     * Calculate result for single routing scenario.
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     * @return
+     */
+    public List<BenchmarkResultBean> calculateSingleRoutingScenarioResult(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        calculateSingleRoutingEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateSingleRoutingMasterslave(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateSingleRoutingSharding(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        calculateSingleRoutingShardingMasterslaveEncrypt(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        return result;
+    }
+    
+    /**
+     * Calculate result for single routing encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateSingleRoutingEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxySingleRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.encrypt.insertupdatedelete.result");
+        Map proxySingleRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxySingleRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxySingleRoutingEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Encrypt", "ShardingProxy", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(proxySingleRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcSingleRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.encrypt.insertupdatedelete.result");
+        Map shardingjdbcSingleRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcSingleRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Encrypt", "ShardingJDBC", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcSingleRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String jdbcSingleRoutingEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.encrypt.insertupdatedelete.result");
+        Map jdbcSingleRoutingEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingEncryptInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcSingleRoutingEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingEncryptInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Encrypt", "MYSQL", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingEncryptInsertupdatedeleteResultBean);
+        }
+        String proxySingleRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.encrypt.select.result");
+        Map proxySingleRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.sql");
+            BenchmarkResultBean proxySingleRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxySingleRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingProxy", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(proxySingleRoutingEncryptSelectResultBean);
+        }
+        String shardingjdbcSingleRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.encrypt.select.result");
+        Map shardingjdbcSingleRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.sql");
+            BenchmarkResultBean shardingjdbcSingleRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingEncryptSelectResult, ssSelectSql, "Encrypt", "ShardingJDBC", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcSingleRoutingEncryptSelectResultBean);
+        }
+        String jdbcSingleRoutingEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.encrypt.select.result");
+        Map jdbcSingleRoutingEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingEncryptSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.select.sql");
+            BenchmarkResultBean jdbcSingleRoutingEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingEncryptSelectResult, jdbcSelectSql, "Encrypt", "MYSQL", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingEncryptSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for single routing master-slave scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateSingleRoutingMasterslave(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxySingleRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.masterslave.insertupdatedelete.result");
+        Map proxySingleRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxySingleRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxySingleRoutingMasterSlaveInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "MasterSlave", "ShardingProxy", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(proxySingleRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.masterslave.insertupdatedelete.result");
+        Map shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "MasterSlave", "ShardingJDBC", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcSingleRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String jdbcSingleRoutingMasterSlaveInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.masterslave.insertupdatedelete.result");
+        Map jdbcSingleRoutingMasterSlaveInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingMasterSlaveInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingMasterSlaveInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcSingleRoutingMasterSlaveInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingMasterSlaveInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "MasterSlave", "MYSQL", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingMasterSlaveInsertupdatedeleteResultBean);
+        }
+        String proxySingleRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.masterslave.select.result");
+        Map proxySingleRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.sql");
+            BenchmarkResultBean proxySingleRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxySingleRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingProxy", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(proxySingleRoutingMasterSlaveSelectResultBean);
+        }
+        String shardingjdbcSingleRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.masterslave.select.result");
+        Map shardingjdbcSingleRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingMasterSlaveSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.sql");
+            BenchmarkResultBean shardingjdbcSingleRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingMasterSlaveSelectResult, ssSelectSql, "MasterSlave", "ShardingJDBC", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(shardingjdbcSingleRoutingMasterSlaveSelectResultBean);
+        }
+        String jdbcSingleRoutingMasterSlaveSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.masterslave.select.result");
+        Map jdbcSingleRoutingMasterSlaveSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingMasterSlaveSelectResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingMasterSlaveSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.select.sql");
+            BenchmarkResultBean jdbcSingleRoutingMasterSlaveSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingMasterSlaveSelectResult, jdbcSelectSql, "MasterSlave", "MYSQL", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingMasterSlaveSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for single routing sharding scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateSingleRoutingSharding(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxySingleRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.sharding.insertupdatedelete.result");
+        Map proxySingleRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxySingleRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxySingleRoutingShardingInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding", "ShardingProxy", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxySingleRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcSingleRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.sharding.insertupdatedelete.result");
+        Map shardingjdbcSingleRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcSingleRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingShardingInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding", "ShardingJDBC", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcSingleRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String jdbcSingleRoutingShardingInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.sharding.insertupdatedelete.result");
+        Map jdbcSingleRoutingShardingInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingShardingInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingShardingInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.singlerouting.sharding.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.sharding.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.sharding.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcSingleRoutingShardingInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingShardingInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Sharding", "MYSQL", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingShardingInsertupdatedeleteResultBean);
+        }
+        String proxySingleRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.sharding.select.result");
+        Map proxySingleRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.select.sql");
+            BenchmarkResultBean proxySingleRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxySingleRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingProxy", "SingleRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxySingleRoutingShardingSelectResultBean);
+        }
+        String shardingjdbcSingleRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.sharding.select.result");
+        Map shardingjdbcSingleRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingShardingSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.sharding.select.sql");
+            BenchmarkResultBean shardingjdbcSingleRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingShardingSelectResult, ssSelectSql, "Sharding", "ShardingJDBC", "SingleRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcSingleRoutingShardingSelectResultBean);
+        }
+        String jdbcSingleRoutingShardingSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.sharding.select.result");
+        Map jdbcSingleRoutingShardingSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingShardingSelectResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingShardingSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.singlerouting.sharding.select.sql");
+            BenchmarkResultBean jdbcSingleRoutingShardingSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingShardingSelectResult, jdbcSelectSql, "Sharding", "MYSQL", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingShardingSelectResultBean);
+        }
+    }
+    
+    /**
+     * Calculate result for single routing sharding-master-slave-encrypt scenario.
+     * 
+     * @param benchmarkResultPath
+     * @param sqlConfig
+     * @param benchmarkVersion
+     * @param skipBegin
+     * @param skipEnd
+     * @param concurrency
+     * @param updateTime
+     * @param dbShardingCount
+     * @param tableShardingCount
+     */
+    public void calculateSingleRoutingShardingMasterslaveEncrypt(Map benchmarkResultPath, Map sqlConfig, String benchmarkVersion, int skipBegin, int skipEnd, int concurrency, long updateTime, int dbShardingCount, int tableShardingCount) {
+        String proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion,proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "ShardingProxy", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxySingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String ssInsertUpdateDeleteSQL = (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, ssInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "ShardingJDBC", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result");
+        Map jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult.size() > 0) {
+            String jdbcInsertUpdateDeleteSQL = (String)sqlConfig.get("jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql") + ";\r\n" + (String)sqlConfig.get("jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql") +  ";\r\n";
+            BenchmarkResultBean jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResult, jdbcInsertUpdateDeleteSQL, "Sharding+Master+Slave+Encrypt", "MYSQL", "SingleRouting", "Insert+Update+delete", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingShardingMasterSlaveEncryptInsertupdatedeleteResultBean);
+        }
+        String proxySingleRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.proxy.singlerouting.shardingmasterslaveencrypt.select.result");
+        Map proxySingleRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(proxySingleRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (proxySingleRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean proxySingleRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, proxySingleRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingProxy", "SingleRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(proxySingleRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.shardingjdbc.singlerouting.shardingmasterslaveencrypt.select.result");
+        Map shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String ssSelectSql = (String)sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResult, ssSelectSql, "Sharding+Master+Slave+Encrypt", "ShardingJDBC", "SingleRouting", "Select", concurrency, updateTime, dbShardingCount, tableShardingCount);
+            result.add(shardingjdbcSingleRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+        String jdbcSingleRoutingShardingMasterSlaveEncryptSelectResultPath = (String) benchmarkResultPath.get("ss.benchmark.jdbc.singlerouting.shardingmasterslaveencrypt.select.result");
+        Map jdbcSingleRoutingShardingMasterSlaveEncryptSelectResult = BenchmarkResultParser.benchmarkStatistic(jdbcSingleRoutingShardingMasterSlaveEncryptSelectResultPath, skipBegin, skipEnd);
+        if (jdbcSingleRoutingShardingMasterSlaveEncryptSelectResult.size() > 0) {
+            String jdbcSelectSql = (String)sqlConfig.get("jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql");
+            BenchmarkResultBean jdbcSingleRoutingShardingMasterSlaveEncryptSelectResultBean = new BenchmarkResultBean(benchmarkVersion, jdbcSingleRoutingShardingMasterSlaveEncryptSelectResult, jdbcSelectSql, "Sharding+Master+Slave+Encrypt", "MYSQL", "SingleRouting", "Select", concurrency, updateTime, 0, 0);
+            result.add(jdbcSingleRoutingShardingMasterSlaveEncryptSelectResultBean);
+        }
+    }
+    
+    
+    /**
+     * Calculate average result for single routing scenario.
+     *
+     * @param datasource
+     * @param sqlConfig
+     * @param noShardingParams
+     * @param shardingParams
+     * @return
+     */
+    public  List<BenchmarkResultBean> calculateSingleroutingScenarioAvgResult(DataSource datasource, Map sqlConfig, List noShardingParams, List shardingParams){
+        List<BenchmarkResultBean> singleRoutingCalResult = new ArrayList<BenchmarkResultBean>(10);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.shardingjdbc.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.proxy.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.mysql.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.shardingjdbc.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.proxy.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.encrypt.mysql.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.shardingjdbc.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.proxy.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.mysql.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.shardingjdbc.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.proxy.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.masterslave.mysql.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.shardingjdbc.select.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.proxy.select.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.mysql.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.shardingjdbc.insertupdatedelete.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.proxy.insertupdatedelete.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.sharding.mysql.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.shardingjdbc.select.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.proxy.select.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.mysql.select.sql"), noShardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.shardingjdbc.insertupdatedelete.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.proxy.insertupdatedelete.sql"), shardingParams, singleRoutingCalResult);
+        getTargetResult(datasource, (String)sqlConfig.get("ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.mysql.insertupdatedelete.sql"), noShardingParams, singleRoutingCalResult);
+    
+        return singleRoutingCalResult;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkStatistic.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkStatistic.java
new file mode 100644
index 0000000..613e027
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/common/statistic/BenchmarkStatistic.java
@@ -0,0 +1,118 @@
+package org.apache.shardingsphere.benchmark.common.statistic;
+
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class BenchmarkStatistic {
+    
+    public void updateBenchmarkRecordInDb(DataSource dataSource, List<BenchmarkResultBean> benchMarkResults, String sql){
+        Connection connection = null;
+        for(int i = 0; i < benchMarkResults.size(); i++){
+            try {
+                connection = dataSource.getConnection();
+                if (benchMarkResults.get(i) != null) {
+                    BenchmarkResultBean benchmarkResultBean = benchMarkResults.get(i);
+                    List insertParams = Arrays.asList(
+                            benchmarkResultBean.getProduct(),
+                            benchmarkResultBean.getVersion(),
+                            benchmarkResultBean.getScenario(),
+                            benchmarkResultBean.getRules(),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("tps"),
+                            (int)benchmarkResultBean.getBenchmarkResult().get("total"),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("tp50th"),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("tp90th"),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("tp95th"),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("maxCost"),
+                            (double)benchmarkResultBean.getBenchmarkResult().get("minCost"),
+                            benchmarkResultBean.getSql(),
+                            benchmarkResultBean.getDbAction(),
+                            benchmarkResultBean.getConcurrency(),
+                            benchmarkResultBean.getUpdateTime(),
+                            benchmarkResultBean.getTableShardingCount(),
+                            benchmarkResultBean.getDbShardingCount());
+                    JDBCDataSourceUtil.insert(connection, sql, insertParams);
+                }
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            } finally {
+                if(null != connection){
+                    try {
+                        connection.close();
+                    } catch (SQLException ex) {
+                        ex.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+    
+    public BenchmarkResultBean getTargetResult(DataSource dataSource, String sql, List params, List<BenchmarkResultBean> result){
+        Connection connection = null;
+        BenchmarkResultBean benchmarkResultBean = new BenchmarkResultBean();
+        try {
+            double totalTps = 0;
+            int totalCount = 0;
+            int totalRequestCount = 0;
+            double totalMaxTime = 0;
+            double totalMinTime = 0;
+            double totalTp95Th = 0;
+            double totalTp90Th = 0;
+            double totalTp50Th = 0;
+            connection = dataSource.getConnection();
+            ResultSet rs = JDBCDataSourceUtil.select(connection, sql, params);
+            while(rs.next()){
+                totalCount =  totalCount + 1;
+                benchmarkResultBean.setProduct(rs.getString(2));
+                benchmarkResultBean.setVersion(rs.getString(3));
+                benchmarkResultBean.setScenario(rs.getString(4));
+                benchmarkResultBean.setRules(rs.getString(5));
+                totalTps = totalTps + rs.getDouble(6);
+                totalRequestCount = totalRequestCount + rs.getInt(7);
+                totalTp50Th = totalTp50Th + rs.getDouble(8);
+                totalTp90Th = totalTp50Th + rs.getDouble(9);
+                totalTp95Th = totalTp50Th + rs.getDouble(10);
+                totalMaxTime = totalMaxTime + rs.getDouble(11);
+                totalMinTime = totalMinTime + rs.getDouble(12);
+                benchmarkResultBean.setSql(rs.getString(13));
+                benchmarkResultBean.setDbAction(rs.getString(14));
+                benchmarkResultBean.setConcurrency(rs.getInt(15));
+                benchmarkResultBean.setUpdateTime(rs.getLong(16));
+                benchmarkResultBean.setDbShardingCount(rs.getInt(17));
+                benchmarkResultBean.setTableShardingCount(rs.getInt(18));
+            }
+            if (totalCount > 0){
+                Map benchmarkPerformanceData = new HashMap<>(1,1);
+                benchmarkPerformanceData.put("tps", totalTps / totalCount);
+                benchmarkPerformanceData.put("total" , totalRequestCount / totalCount);
+                benchmarkPerformanceData.put("maxCost" , totalMaxTime / totalCount);
+                benchmarkPerformanceData.put("minCost" , totalMinTime / totalCount);
+                benchmarkPerformanceData.put("tp50th", totalTp50Th / totalCount);
+                benchmarkPerformanceData.put("tp90th", totalTp90Th / totalCount);
+                benchmarkPerformanceData.put("tp95th", totalTp95Th / totalCount);
+                benchmarkResultBean.setBenchmarkResult(benchmarkPerformanceData);
+                result.add(benchmarkResultBean);
+            } else {
+                return null;
+            }
+            
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+        }
+        return benchmarkResultBean;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/BaseDataSource.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/BaseDataSource.java
new file mode 100644
index 0000000..868ba88
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/BaseDataSource.java
@@ -0,0 +1,73 @@
+package org.apache.shardingsphere.benchmark.db;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+
+import javax.sql.DataSource;
+
+public class BaseDataSource {
+
+    /**
+     * create HikariDataSource
+     *
+     * @param dataSourceName
+     * @param host
+     * @param port
+     * @param userName
+     * @param password
+     * @return
+     */
+    public DataSource createHikariDataSource(String dataSourceName, String host, int port, String userName, String password) {
+        HikariConfig config = new HikariConfig();
+        config.setDriverClassName("com.mysql.jdbc.Driver");
+        config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC", host, port, dataSourceName));
+        config.setUsername(userName);
+        config.setPassword(password);
+        config.setMaximumPoolSize(200);
+        config.setConnectionTimeout(30000);
+        config.setIdleTimeout(60000);
+        config.setMaxLifetime(1800000);
+        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cachePrepStmts", "true");
+        config.addDataSourceProperty("prepStmtCacheSize", 250);
+        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
+        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
+        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
+        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
+        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
+        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
+        return new HikariDataSource(config);
+    }
+
+
+    /**
+     * create C3p0DataSource
+     *
+     * @param dataSourceName
+     * @param host
+     * @param port
+     * @param userName
+     * @param password
+     * @return
+     */
+    public DataSource createC3p0DataSource(String dataSourceName, String host, int port, String userName, String password) {
+        return null;
+    }
+
+    /**
+     * create DhcpDataSource
+     *
+     * @param dataSourceName
+     * @param host
+     * @param port
+     * @param userName
+     * @param password
+     * @return
+     */
+    public DataSource createDhcpDataSource(String dataSourceName, String host, int port, String userName, String password) {
+        return null;
+
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/jdbc/JDBCDataSourceUtil.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/jdbc/JDBCDataSourceUtil.java
new file mode 100644
index 0000000..96ae4ec
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/jdbc/JDBCDataSourceUtil.java
@@ -0,0 +1,196 @@
+package org.apache.shardingsphere.benchmark.db.jdbc;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+
+import javax.sql.DataSource;
+import java.sql.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Jdbc Util to operate insert/delete/update/select action.
+ */
+public class JDBCDataSourceUtil {
+
+    private static final Map<String, DataSource> DATASOURCES = new HashMap<>(1,1);
+
+    /**
+     *  Init datasource.
+     *
+     * @param dataSourceName
+     * @param host
+     * @param port
+     * @param userName
+     * @param password
+     * @return
+     */
+    public static DataSource initDb(String dataSourceName, String host, int port, String userName, String password) {
+        HikariConfig config = new HikariConfig();
+        config.setDriverClassName("com.mysql.jdbc.Driver");
+        config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC&useServerPrepStmts=true&cachePrepStmts=true", host, port, dataSourceName));
+        config.setUsername(userName);
+        config.setPassword(password);
+        config.setMaximumPoolSize(200);
+        config.setConnectionTimeout(30000);
+        config.setIdleTimeout(60000);
+        config.setMaxLifetime(1800000);
+        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cachePrepStmts", "true");
+        config.addDataSourceProperty("prepStmtCacheSize", 250);
+        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
+        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
+        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.TRUE.toString());
+        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
+        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
+        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
+        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
+        return new HikariDataSource(config);
+    }
+    
+    /**
+     * Create an row data by criteria.
+     * 
+     * @param conn
+     * @param insertSql
+     * @param params
+     * @return
+     * @throws SQLException
+     */
+    public static ResultSet insert(Connection conn, String insertSql, List params) throws SQLException {
+        ResultSet result = null;
+        PreparedStatement preparedStatement = null;
+
+        if(conn != null){
+            preparedStatement = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);
+            preparedStatement = setParams(preparedStatement, params);
+            preparedStatement.execute();
+            result = preparedStatement.getGeneratedKeys();
+        }
+        return result;
+    }
+    
+    /**
+     * Create row datas by batch.
+     * 
+     * @param conn
+     * @param insertSql
+     * @param params
+     * @return
+     * @throws SQLException
+     */
+    public static ResultSet insertBatch(Connection conn, String insertSql, List params) throws SQLException {
+        
+        ResultSet result = null;
+        PreparedStatement preparedStatement = null;
+        if(conn != null){
+            preparedStatement = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);
+            preparedStatement = setParams(preparedStatement, params);
+            preparedStatement.addBatch();
+            preparedStatement.executeBatch();
+            result = preparedStatement.getGeneratedKeys();
+        }
+        return result;
+    }
+    
+    /**
+     * Update an row data by criteria..
+     * 
+     * @param conn
+     * @param updateSql
+     * @param params
+     * @return
+     * @throws SQLException
+     */
+    public static ResultSet update(Connection conn, String updateSql, List params) throws SQLException {
+        ResultSet result = null;
+        PreparedStatement preparedStatement=null;
+
+        if(conn != null){
+            preparedStatement = conn.prepareStatement(updateSql);
+            preparedStatement = setParams(preparedStatement, params);
+            preparedStatement.executeUpdate();
+        }
+        return result;
+    }
+
+
+    /**
+     * Delete an item by criteria.
+     *
+     * @param conn
+     * @param deleteSql
+     * @return
+     * @throws SQLException
+     */
+    public static ResultSet delete(Connection conn, String deleteSql, List params) throws SQLException {
+        ResultSet result = null;
+        PreparedStatement preparedStatement=null;
+
+        if(conn != null){
+            preparedStatement = conn.prepareStatement(deleteSql);
+            preparedStatement = setParams(preparedStatement, params);
+            preparedStatement.executeUpdate();
+        }
+        return result;
+    }
+
+
+    /**
+     * Query items by criteria.
+     *
+     * @param conn
+     * @param selectSql
+     */
+    public static ResultSet select(Connection conn, String selectSql, List params) throws SQLException {
+        ResultSet rs = null;
+        PreparedStatement preparedStatement=null;
+        if(conn != null){
+            preparedStatement = conn.prepareStatement(selectSql);
+            preparedStatement = setParams(preparedStatement, params);
+            rs = preparedStatement.executeQuery();
+        }
+        return rs;
+    }
+
+    /**
+     * Allocate values to PreparedStatement.
+     *
+     * @param ps
+     * @param params
+     * @return
+     * @throws SQLException
+     */
+    public static PreparedStatement setParams(PreparedStatement result, List params) throws SQLException {
+        if(params != null){
+            for (int i = 0; i < params.size(); i++){
+                if (params.get(i) instanceof Long){
+                    result.setLong(i+1, (Long) params.get(i));
+                } else if(params.get(i) instanceof Integer){
+                    result.setInt(i+1, (Integer) params.get(i));
+                } else if(params.get(i) instanceof  String){
+                    result.setString(i+1, (String)params.get(i));
+                } else if(params.get(i) instanceof Double){
+                    result.setDouble(i+1, (Double)params.get(i));
+                }
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * Close database connection.
+     *
+     * @param conn
+     * @throws SQLException
+     */
+    public static void close(Connection conn) throws SQLException {
+        if(conn != null){
+            conn.close();
+        }
+    }
+
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingConfigType.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingConfigType.java
new file mode 100644
index 0000000..15ebd16
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingConfigType.java
@@ -0,0 +1,20 @@
+package org.apache.shardingsphere.benchmark.db.shardingjdbc;
+
+public enum ShardingConfigType {
+
+    FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG,
+    FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG,
+    FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG,
+    FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG,
+    RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG,
+    RANGEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG,
+    RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG,
+    RANGEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG,
+    SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG,
+    SINGLEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG,
+    SINGLEROUTING_SHARDING_SHARDINGJDBC_CONFIG,
+    SINGLEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG,
+    FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG,
+    FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG,
+
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingJDBCDataSourceFactory.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingJDBCDataSourceFactory.java
new file mode 100644
index 0000000..d5a9628
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/db/shardingjdbc/ShardingJDBCDataSourceFactory.java
@@ -0,0 +1,103 @@
+package org.apache.shardingsphere.benchmark.db.shardingjdbc;
+
+import org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory;
+
+import javax.sql.DataSource;
+import java.io.*;
+import java.sql.SQLException;
+
+
+public class ShardingJDBCDataSourceFactory {
+
+    private static final String FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH = "/yaml/fullrouting/encrypt/shardingjdbc/config-shardingjdbc-fullrouting-encrypt.yaml";
+    private static final String FULLROUTING_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH = "/yaml/fullrouting/masterslave/shardingjdbc/config-shardingjdbc-fullrouting-masterslave.yaml";
+    private static final String FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG_PATH = "/yaml/fullrouting/sharding/shardingjdbc/config-shardingjdbc-fullrouting-sharding.yaml";
+    private static final String FULLROUTING_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH = "/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml";
+    private static final String RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH = "/yaml/rangerouting/encrypt/shardingjdbc/config-shardingjdbc-rangerouting-encrypt.yaml";
+    private static final String RANGEROUTING_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH = "/yaml/rangerouting/masterslave/shardingjdbc/config-shardingjdbc-rangerouting-masterslave.yaml";
+    private static final String RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG_PATH = "/yaml/rangerouting/sharding/shardingjdbc/config-shardingjdbc-rangerouting-sharding.yaml";
+    private static final String RANGEROUTING_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH = "/yaml/rangerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-rangerouting-sharding-masterslave-encrypt.yaml";
+    private static final String SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH = "/yaml/singlerouting/encrypt/shardingjdbc/config-shardingjdbc-singlerouting-encrypt.yaml";
+    private static final String SINGLEROUTIN_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH = "/yaml/singlerouting/masterslave/shardingjdbc/config-shardingjdbc-singlerouting-masterslave.yaml";
+    private static final String SINGLEROUTIN_SHARDING_SHARDINGJDBC_CONFIG_PATH = "/yaml/singlerouting/sharding/shardingjdbc/config-shardingjdbc-singlerouting-sharding.yaml";
+    private static final String SINGLEROUTIN_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH = "/yaml/singlerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-singlerouting-sharding-masterslave-encrypt.yaml";
+    private static final String FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG_PATH = "/yaml/fullrouting-smallshards/sharding/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding.yaml";
+    private static final String FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG_PATH = "/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding-masterslave-encrypt.yaml";
+    
+    
+    public static DataSource newInstance(ShardingConfigType shardingConfigType) throws IOException, SQLException {
+        switch (shardingConfigType) {
+            case FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH));
+            case FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH));
+            case FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG_PATH));
+            case FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH));
+            case RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH));
+            case RANGEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(RANGEROUTING_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH));
+            case RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG_PATH));
+            case RANGEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(RANGEROUTING_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH));
+            case SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG_PATH));
+            case SINGLEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(SINGLEROUTIN_MASTERSLAVE_SHARDINGJDBC_CONFIG_PATH));
+            case SINGLEROUTING_SHARDING_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(SINGLEROUTIN_SHARDING_SHARDINGJDBC_CONFIG_PATH));
+            case FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG_PATH));
+            case FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG_PATH));
+            case SINGLEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG:
+                return YamlShardingSphereDataSourceFactory.createDataSource
+                        (getFileContents(SINGLEROUTIN_SHARDING_SHARDINGMASTERSLAVEENCRYPT_CONFIG_PATH));
+            default:
+                throw new UnsupportedOperationException(shardingConfigType.name());
+        }
+    }
+
+    private static File getFile(final String fileName) {
+        return new File(ShardingJDBCDataSourceFactory.class.getResource(fileName).getFile());
+    }
+
+    public static byte[] getFileContents(String fileName) {
+        byte[] yamlContentBytes = null;
+        try {
+
+            String line = "";
+            StringBuilder yamlContent = new StringBuilder();
+
+            InputStream in = ShardingJDBCDataSourceFactory.class.getResourceAsStream(fileName);
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+
+            while ((line = br.readLine()) != null) {
+                yamlContent.append(line).append("\n");
+            }
+
+            yamlContentBytes = yamlContent.toString().getBytes();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return yamlContentBytes;
+    }
+
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/JMeterBenchmarkBase.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/JMeterBenchmarkBase.java
new file mode 100644
index 0000000..144691c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/JMeterBenchmarkBase.java
@@ -0,0 +1,303 @@
+package org.apache.shardingsphere.benchmark.jmeter;
+
+import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.common.file.util.PropertiesUtil;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+public class JMeterBenchmarkBase extends AbstractJavaSamplerClient {
+
+    public static Map sqlConfig = new HashMap<>();
+    public static Map dbConfig = new HashMap<>();
+    public static Map userConfig = new HashMap<>();
+    public static Map benchmarkResultPath = new HashMap<>();
+    public static List<String> initDbSqlList = new ArrayList<String>();
+    public static String benchmarkVersion;
+
+    static {
+        initSqlConfig();
+        initDbConfig();
+        initBenchmarkResultPath();
+        initBenchmarkVersion();
+        initDbSqls();
+        initUserConfig();
+    }
+
+    /**
+     * Init dataSource config for all of benchmark scenarios.
+     */
+    public static void initDbConfig() {
+        Properties dbConfigProp = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/dbconfig.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            dbConfigProp.load(in);
+            Iterator<String> it = dbConfigProp.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                if (key.contains(".port") || key.equals("maximumpoolsize") || key.equals("connectiontimeout") || key.equals("idletimeout")
+                        || key.equals("maxlifetime") || key.equals("prepstmtcachesize") || key.equals("prepstmtcachesqllimit") || key.equals("nettimeoutforstreamingresults")) {
+                    dbConfig.put(key, Integer.valueOf(dbConfigProp.getProperty(key)).intValue());
+                } else {
+                    dbConfig.put(key, dbConfigProp.getProperty(key));
+                }
+            }
+            in.close();
+            br.close();
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Init sql config for all of benchmark scenarios.
+     */
+    public static void initSqlConfig() {
+        Properties sqlProp = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/sqlconfig.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            sqlProp.load(in);
+            String values = "";
+            Iterator<String> it = sqlProp.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                if (key.contains(".values")) {
+                    values = sqlProp.getProperty(key);
+                    if (values != null && values.length() > 0) {
+                        String[] arrayValues = values.split(",");
+                        List listValues = new ArrayList();
+                        for (int i = 0; i < arrayValues.length; i++) {
+                            String[] subs = arrayValues[i].split(":");
+                            if ("Int".equals(subs[0])) {
+                                listValues.add(Integer.valueOf(subs[1]).intValue());
+                            } else if ("Float".equals(subs[0])) {
+                                listValues.add(Float.valueOf(subs[1]).floatValue());
+                            } else if ("Long".equals(subs[0])) {
+                                listValues.add(Long.valueOf(subs[1]).longValue());
+                            } else if ("String".equals(subs[0])) {
+                                listValues.add(String.valueOf(subs[1]));
+                            } else if ("".equals(((String) arrayValues[i]))) {
+                                listValues.add((String) arrayValues[i]);
+                            } else {
+                                listValues.add((String) subs[1]);
+                            }
+                        }
+                        sqlConfig.put(key, listValues);
+                    } else {
+                        sqlConfig.put(key, sqlProp.getProperty(key));
+                    }
+
+                } else {
+                    sqlConfig.put(key, sqlProp.getProperty(key));
+                }
+
+
+            }
+            in.close();
+            br.close();
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Store path of JMeter result file for benchmark into memory.
+     */
+    public static void initBenchmarkResultPath() {
+        Properties dbConfigProp = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/benchmark-result.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            dbConfigProp.load(in);
+            Iterator<String> it = dbConfigProp.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                benchmarkResultPath.put(key, dbConfigProp.getProperty(key));
+            }
+            in.close();
+            br.close();
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    /**
+     * Init benchmark sql.
+     */
+    public static void initDbSqls(){
+        InputStream in = PropertiesUtil.class.getResourceAsStream("/config/benchmark.sql");
+        BufferedReader br = new BufferedReader(new InputStreamReader(in));
+        String line = "";
+        try {
+            while ((line = br.readLine()) != null) {
+                initDbSqlList.add(line);
+            }
+        } catch(IOException exception){
+            exception.printStackTrace();
+        } catch (Exception exception){
+            exception.printStackTrace();
+        } finally {
+            try {
+                br.close();
+            } catch (IOException exception) {
+                exception.printStackTrace();
+            }
+        }
+
+    }
+    
+    /**
+     * Init user config.
+     */
+    public static void initUserConfig(){
+        Properties dbConfigProp = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/user-config.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            dbConfigProp.load(in);
+            Iterator<String> it = dbConfigProp.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                userConfig.put(key, dbConfigProp.getProperty(key));
+            }
+            in.close();
+            br.close();
+        
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
+        return null;
+    }
+    
+    /**
+     * Set params.
+     * 
+     * @param values
+     * @return
+     */
+    public List setParams(List values) {
+        List sqlValues = new ArrayList();
+        if (values != null) {
+            for (int i = 0; i < values.size(); i++) {
+                sqlValues.add(values.get(i));
+            }
+        }
+        return sqlValues;
+    }
+    
+    /**
+     * Convert params for sql which is for generating random values.
+     * 
+     * @param values
+     * @param counter
+     * @return
+     */
+    public List convertParams(List values, int counter) {
+        List sqlValues = new ArrayList();
+        if (values != null) {
+            for (int i = 0; i < values.size(); i++) {
+                if (values.get(i) instanceof Integer) {
+                    sqlValues.add(counter);
+                } else if(values.get(i) instanceof String){
+                    sqlValues.add((String)values.get(i) + counter);
+                }else {
+                    sqlValues.add(values.get(i));
+                }
+            }
+        }
+        return sqlValues;
+    }
+    
+    /**
+     * Convert params without any modification.
+     * 
+     * @param values
+     * @return
+     */
+    public List convertParams(List values) {
+        List sqlValues = new ArrayList();
+        if (values != null) {
+            for (int i = 0; i < values.size(); i++) {
+                sqlValues.add(values.get(i));
+            }
+        }
+        return sqlValues;
+    }
+    
+    public static void initBenchmarkVersion(){
+        Properties dbConfigProp = new Properties();
+        try {
+            InputStream in = PropertiesUtil.class.getResourceAsStream("/config/benchmark-version.properties");
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            dbConfigProp.load(in);
+            Iterator<String> it = dbConfigProp.stringPropertyNames().iterator();
+            while (it.hasNext()) {
+                String key = it.next();
+                if("ss.benchmark.version".equals(key)){
+                    benchmarkVersion = dbConfigProp.getProperty(key);
+                    break;
+                }
+            }
+            in.close();
+            br.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    public int getInsertCount(String sql){
+        String[] strs = sql.split("values");
+        return strs[1].split("\\),").length;
+    }
+    
+    public List<Long> batchInsert(ResultSet rs, int count) throws SQLException {
+        List<Long> ids = new ArrayList<Long>(count);
+        for(int i = 0; i < count; i++){
+            ids.add(rs.getLong(1));
+        }
+        return ids;
+    }
+    
+    public List<Long> batchInsert(int count, Connection connection, String insertSql, List insertParams) throws SQLException {
+        ResultSet rs = null;
+        List<Long> ids = new ArrayList<Long>(count);
+        for(int i = 0; i < count; i++){
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            ids.add(rs.getLong(1));
+        }
+        return ids;
+    }
+    
+    public List appendIds(List ids, List params){
+        for (int i = 0; i < ids.size(); i++){
+            params.add(ids.get(i));
+        }
+        
+        return params;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterConfigBenchmark.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterConfigBenchmark.java
new file mode 100644
index 0000000..841c0fd
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterConfigBenchmark.java
@@ -0,0 +1,134 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.config;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.common.file.jmeter.BenchmarkResultDirManagement;
+import org.apache.shardingsphere.benchmark.common.file.properties.BenchmarkConfigProperties;
+import org.apache.shardingsphere.benchmark.common.file.xml.BenchmarkConfigJmx;
+import org.apache.shardingsphere.benchmark.common.file.yaml.BenchmarkConfigYaml;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class JMeterConfigBenchmark extends JMeterBenchmarkBase {
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterConfigBenchmark");
+        results.sampleStart();
+        String benchmarkBasePath = (String)userConfig.get("shardingsphere.benchmark.project.base.path");
+        String benchmarkOutputBasePath = (String)userConfig.get("shardingsphere.benchmark.result.base.path");
+        int shardingDbCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.db.count")).intValue();
+        int shardingTableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+        int maxConnectionCount = Integer.valueOf((String)userConfig.get("shardingsphere.maximum.connection.count")).intValue();
+        int minConnectionCount = Integer.valueOf((String)userConfig.get("shardingsphere.minimum.connection.count")).intValue();
+        int maxConnectionPerQueryCount = Integer.valueOf((String)userConfig.get("shardingsphere.maximum.connection.count.for.each.query")).intValue();
+        int jmeterLoopCount = Integer.valueOf((String)userConfig.get("shardingsphere.jmeter.loop.count")).intValue();
+        int jmeterConcurrencyCount = Integer.valueOf((String)userConfig.get("shardingsphere.jmeter.concurrency.count")).intValue();
+        String createdDatabaseName = (String)userConfig.get("shardingsphere.benchmark.database.name");
+        String createTableName = (String)userConfig.get("shardingsphere.sharding.benchmark.table_name");
+        String databaseMachineList = (String)userConfig.get("shardingsphere.benchmark.database.machine.host.list");
+        // Config jmx files
+        BenchmarkConfigJmx.modifyBenchmarkOutputBasePath(benchmarkBasePath, benchmarkOutputBasePath, jmeterConcurrencyCount, jmeterLoopCount);
+        // Config property files
+        BenchmarkConfigProperties.modifyBenchmarkOutputConfig(benchmarkBasePath, benchmarkOutputBasePath);
+        // Config yaml files
+        BenchmarkConfigYaml.modifyBenchmarkYamlFile(benchmarkBasePath, shardingDbCount, shardingTableCount, maxConnectionCount, minConnectionCount, maxConnectionPerQueryCount);
+        // Manage benchmark result dirs
+        BenchmarkResultDirManagement.manageResultDir(userConfig);
+        // Create databases/tables
+       String[] databaseMachineArrays = databaseMachineList.split(";");
+        try {
+            for(int i = 0; i < databaseMachineArrays.length; i++){
+                String dbHost = databaseMachineArrays[i];
+                initBenchmarkDB(dbHost, createdDatabaseName, createTableName, shardingTableCount);
+            }
+            initBenchmarkResultDB((String)userConfig.get("shardingsphere.benchmark.result.database.host"), (String)userConfig.get("shardingsphere.benchmark.result.datasource"));
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        } finally {
+            results.sampleEnd();
+        }
+        
+        results.sampleEnd();
+        return results;
+    }
+    
+    /**
+     * Create datasource and table for benchmark result.
+     * 
+     * @param host
+     * @param createdResultDatabaseName
+     */
+    public void initBenchmarkResultDB(String host, String createdResultDatabaseName){
+        String createdDatabaseSql = initDbSqlList.get(2);
+        String createdResultTableSql = initDbSqlList.get(3);
+        String createdAvgResultTableSql = initDbSqlList.get(3);
+        DataSource dataSource1 = JDBCDataSourceUtil.initDb("information_schema", host, (int) userConfig.get("shardingsphere.benchmark.database.port"), (String) userConfig.get("shardingsphere.benchmark.database.username"), (String) userConfig.get("shardingsphere.benchmark.database.password"));
+        Connection connection1 = null;
+        try {
+            connection1 = dataSource1.getConnection();
+            Statement stat1 = connection1.createStatement();
+            stat1.executeUpdate(createdDatabaseSql);
+            stat1.close();
+            connection1.close();
+            DataSource createdDataSource1 = JDBCDataSourceUtil.initDb(createdResultDatabaseName, host, (int) userConfig.get("shardingsphere.benchmark.database.port"), (String) userConfig.get("shardingsphere.benchmark.database.username"), (String) userConfig.get("shardingsphere.benchmark.database.password"));
+            Connection createdConnection1 = createdDataSource1.getConnection();
+            Statement createdStat1 = createdConnection1.createStatement();
+            createdStat1.executeUpdate(createdAvgResultTableSql);
+            createdStat1.close();
+            createdConnection1.close();
+            createdDataSource1 = JDBCDataSourceUtil.initDb(createdResultDatabaseName, host, (int) userConfig.get("shardingsphere.benchmark.database.port"), (String) userConfig.get("shardingsphere.benchmark.database.username"), (String) userConfig.get("shardingsphere.benchmark.database.password"));
+            createdConnection1 = createdDataSource1.getConnection();
+            createdStat1 = createdConnection1.createStatement();
+            createdStat1.executeUpdate(createdResultTableSql);
+            createdStat1.close();
+            createdConnection1.close();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        } finally {}
+    }
+    
+    /**
+     * Create benchmark datasource and tables.
+     * 
+     * @param host
+     * @param createdDatabaseName
+     * @param createdTableName
+     * @param tableCount
+     * @throws SQLException
+     */
+    public void initBenchmarkDB(String host, String createdDatabaseName, String createdTableName, int tableCount) throws SQLException {
+        String createdDatabaseSql = initDbSqlList.get(0);
+        createdDatabaseSql = createdDatabaseSql.replace("default_database", createdDatabaseName);
+        String createdTableSql = initDbSqlList.get(1);
+        DataSource dataSource1 = JDBCDataSourceUtil.initDb("information_schema", host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+        Connection connection1 = dataSource1.getConnection();
+        Statement stat1 = connection1.createStatement();
+        stat1.executeUpdate(createdDatabaseSql);
+        stat1.close();
+        connection1.close();
+        DataSource createdDataSource1 = JDBCDataSourceUtil.initDb(createdDatabaseName, host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+        Connection createdConnection1 = createdDataSource1.getConnection();
+        Statement createdStat1 = createdConnection1.createStatement();
+        String createdNoShardingSql = createdTableSql.replace("default_table", createdTableName);
+        createdStat1.executeUpdate(createdNoShardingSql);
+        createdStat1.close();
+        createdConnection1.close();
+        String shardingTableSql = "";
+        for (int i = 0; i < tableCount; i++) {
+            Connection createdConnection2 = createdDataSource1.getConnection();
+            Statement createdStat2 = createdConnection2.createStatement();
+            shardingTableSql = createdTableSql.replace("default_table", createdTableName + i);
+            System.out.println(shardingTableSql);
+            createdStat2.executeUpdate(shardingTableSql);
+            createdStat2.close();
+            createdConnection2.close();
+        }
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterInitDB.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterInitDB.java
new file mode 100644
index 0000000..d15fee9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/config/JMeterInitDB.java
@@ -0,0 +1,112 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.config;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class JMeterInitDB extends JMeterBenchmarkBase {
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterInitDB");
+        results.sampleStart();
+
+        int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+        String createdDatabaseName = (String)userConfig.get("shardingsphere.benchmark.database.name");
+        String createTableName = (String)userConfig.get("shardingsphere.sharding.benchmark.table_name");
+        
+        String databaseMachineList = (String)userConfig.get("shardingsphere.benchmark.database.machine.host.list");
+        String[] databaseMachineArrays = databaseMachineList.split(";");
+
+        try {
+            for(int i = 0; i < databaseMachineArrays.length; i++){
+                String dbHost = databaseMachineArrays[i];
+                initDb(dbHost, createdDatabaseName, createTableName, tableCount);
+            }
+            initBenchmarkResultDb((String)userConfig.get("shardingsphere.benchmark.result.database.host"), (String)userConfig.get("shardingsphere.benchmark.result.datasource"));
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        } finally {
+            results.sampleEnd();
+        }
+        return results;
+    }
+    
+    
+    public void initBenchmarkResultDb(String host, String createdResultDatabaseName){
+        String createdDatabaseSql = initDbSqlList.get(2);
+        String createdResultTableSql = initDbSqlList.get(3);
+        String createdAvgResultTableSql = initDbSqlList.get(3);
+    
+        DataSource dataSource1 = JDBCDataSourceUtil.initDb("information_schema", host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+        Connection connection1 = null;
+        try {
+            connection1 = dataSource1.getConnection();
+            Statement stat1 = connection1.createStatement();
+            stat1.executeUpdate(createdDatabaseSql);
+            stat1.close();
+            connection1.close();
+    
+            DataSource createdDataSource1 = JDBCDataSourceUtil.initDb(createdResultDatabaseName, host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+            Connection createdConnection1 = createdDataSource1.getConnection();
+            Statement createdStat1 = createdConnection1.createStatement();
+            createdStat1.executeUpdate(createdAvgResultTableSql);
+            createdStat1.close();
+            createdConnection1.close();
+    
+            createdDataSource1 = JDBCDataSourceUtil.initDb(createdResultDatabaseName, host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+            createdConnection1 = createdDataSource1.getConnection();
+            createdStat1 = createdConnection1.createStatement();
+            createdStat1.executeUpdate(createdResultTableSql);
+            createdStat1.close();
+            createdConnection1.close();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        } finally {
+        }
+    }
+    
+    public void initDb(String host, String createdDatabaseName, String createdTableName, int tableCount) throws SQLException {
+        
+        String createdDatabaseSql = initDbSqlList.get(0);
+        createdDatabaseSql = createdDatabaseSql.replace("default_database", createdDatabaseName);
+        String createdTableSql = initDbSqlList.get(1);
+        
+        DataSource dataSource1 = JDBCDataSourceUtil.initDb("information_schema", host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+        Connection connection1 = dataSource1.getConnection();
+        Statement stat1 = connection1.createStatement();
+        stat1.executeUpdate(createdDatabaseSql);
+        stat1.close();
+        connection1.close();
+    
+        DataSource createdDataSource1 = JDBCDataSourceUtil.initDb(createdDatabaseName, host, (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+        Connection createdConnection1 = createdDataSource1.getConnection();
+        Statement createdStat1 = createdConnection1.createStatement();
+        String createdNoShardingSql = createdTableSql.replace("default_table", createdTableName);
+        createdStat1.executeUpdate(createdNoShardingSql);
+        createdStat1.close();
+        createdConnection1.close();
+        
+        String shardingTableSql = "";
+        for (int i = 0; i < tableCount; i++) {
+            Connection createdConnection2 = createdDataSource1.getConnection();
+            Statement createdStat2 = createdConnection2.createStatement();
+            shardingTableSql = createdTableSql.replace("default_table", createdTableName + i);
+            System.out.println(shardingTableSql);
+            createdStat2.executeUpdate(shardingTableSql);
+            createdStat2.close();
+            createdConnection2.close();
+        }
+    }
+    
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonClear.java
new file mode 100644
index 0000000..07eb57c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonClear.java
@@ -0,0 +1,49 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCCommonClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingMasterSlaveEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.jdbc.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonInsert.java
new file mode 100644
index 0000000..3421ccb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/JMeterJDBCCommonInsert.java
@@ -0,0 +1,54 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterJDBCCommonInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public Random r = new Random(1);
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingMasterSlaveEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.jdbc.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.jdbc.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptClear.java
new file mode 100644
index 0000000..ccfdad2
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptClear.java
@@ -0,0 +1,49 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCCommonEncryptClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.jdbc.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptInsert.java
new file mode 100644
index 0000000..45a5bf0
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/encrypt/JMeterJDBCCommonEncryptInsert.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterJDBCCommonEncryptInsert extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    public Random r = new Random(1);
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.jdbc.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.jdbc.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveClear.java
new file mode 100644
index 0000000..7636331
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveClear.java
@@ -0,0 +1,49 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCCommonMasterSlaveClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonMasterSlaveClear");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.jdbc.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveInsert.java
new file mode 100644
index 0000000..fb78025
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/masterslave/JMeterJDBCCommonMasterSlaveInsert.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterJDBCCommonMasterSlaveInsert extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    public Random r = new Random(1);
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonMasterSlaveInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.jdbc.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.jdbc.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingClear.java
new file mode 100644
index 0000000..787db07
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingClear.java
@@ -0,0 +1,49 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCCommonShardingClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.jdbc.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingInsert.java
new file mode 100644
index 0000000..3fb88dd
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/sharding/JMeterJDBCCommonShardingInsert.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterJDBCCommonShardingInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public Random r = new Random(1);
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.jdbc.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.jdbc.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptClear.java
new file mode 100644
index 0000000..2843949
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptClear.java
@@ -0,0 +1,49 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCCommonShardingMasterSlaveEncryptClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingMasterSlaveEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.jdbc.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptInsert.java
new file mode 100644
index 0000000..c6efa5a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/jdbc/shardingmasterslaveencrypt/JMeterJDBCCommonShardingMasterSlaveEncryptInsert.java
@@ -0,0 +1,54 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterJDBCCommonShardingMasterSlaveEncryptInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public Random r = new Random(1);
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCCommonShardingMasterSlaveEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.jdbc.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.jdbc.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptClear.java
new file mode 100644
index 0000000..bfe0ac6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptClear.java
@@ -0,0 +1,56 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonEncryptClear extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptInsert.java
new file mode 100644
index 0000000..522f271
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/encrypt/JMeterShardingSphereCommonEncryptInsert.java
@@ -0,0 +1,60 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonEncryptInsert extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+        
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveClear.java
new file mode 100644
index 0000000..0bb1aa7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveClear.java
@@ -0,0 +1,57 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonMasterSlaveClear extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonMasterSlaveClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveInsert.java
new file mode 100644
index 0000000..8e54e3a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/masterslave/JMeterShardingSphereCommonMasterSlaveInsert.java
@@ -0,0 +1,60 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonMasterSlaveInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonMasterSlaveInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingClear.java
new file mode 100644
index 0000000..b697140
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingClear.java
@@ -0,0 +1,57 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonShardingClear extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonShardingClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingInsert.java
new file mode 100644
index 0000000..1cb6f6a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonShardingInsert.java
@@ -0,0 +1,60 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonShardingInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonShardingInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingClear.java
new file mode 100644
index 0000000..28db807
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingClear.java
@@ -0,0 +1,56 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonSmallShardsShardingClear extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonSmallShardsShardingClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingInsert.java
new file mode 100644
index 0000000..165e32a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/sharding/JMeterShardingSphereCommonSmallShardsShardingInsert.java
@@ -0,0 +1,62 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonSmallShardsShardingInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonSmallShardsShardingInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptClear.java
new file mode 100644
index 0000000..7d710ce
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptClear.java
@@ -0,0 +1,56 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonShardingMasterSlaveEncryptClear extends JMeterBenchmarkBase {
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonShardingMasterSlaveEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert.java
new file mode 100644
index 0000000..f0a6886
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+        
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql,insertParams);
+            //insertRecords(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear.java
new file mode 100644
index 0000000..8c03674
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear.java
@@ -0,0 +1,56 @@
+
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            JDBCDataSourceUtil.delete(connection, (String) sqlConfig.get("common.ss.clear"), null);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
+
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert.java
new file mode 100644
index 0000000..5829356
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/common/datapreparation/shardingsphere/shardingmasterslaveencrypt/JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Random;
+
+public class JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    public int tableCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+    public Random r = new Random(1);
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        }
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String insertSql = (String) sqlConfig.get("common.ss.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("common.ss.insert.values"), r.nextInt(tableCount));
+            JDBCDataSourceUtil.insert(connection, insertSql,insertParams);
+            //insertRecords(connection, insertSql, insertParams);
+        } catch (SQLException ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } catch (Exception ex) {
+            results.setSuccessful(false);
+            ex.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/JMeterJDBCFullRoutingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/JMeterJDBCFullRoutingSelect.java
new file mode 100644
index 0000000..5702b1c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/JMeterJDBCFullRoutingSelect.java
@@ -0,0 +1,63 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * Refactor old case test_plan/jdbc_sharding_new/select_one.jmx
+ * <p>
+ * Sharding scenario
+ * <p>
+ * Its actualDataNodes: ds{0..2}.sbtest${0..99}
+ * Its dataSource.algorithm expression: ds_${id % 3}
+ * Its table.algorithm expression: sbtest${k % 100}
+ * Its type: INLINE
+ **/
+
+public class JMeterJDBCFullRoutingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..5f7a96f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,69 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * Refactor old case
+ * <p>
+ * Sharding scenario:
+ * Its actualDataNodes: {0..2}.sbtest${0..99}
+ * Its dataSource.algorithm expression: ds_${id % 3}
+ * Its type: INLINE
+ */
+public class JMeterJDBCFullRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptSelect.java
new file mode 100644
index 0000000..7e49f61
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterJDBCFullRoutingEncryptSelect.java
@@ -0,0 +1,63 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * Refactor old case test_plan/jdbc_sharding_new/select_one.jmx
+ * <p>
+ * Sharding scenario
+ * <p>
+ * Its actualDataNodes: ds{0..2}.sbtest${0..99}
+ * Its dataSource.algorithm expression: ds_${id % 3}
+ * Its table.algorithm expression: sbtest${k % 100}
+ * Its type: INLINE
+ **/
+
+public class JMeterJDBCFullRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..6f5d520
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,59 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.encrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.encrypt.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptSelect.java
new file mode 100644
index 0000000..472693b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterProxyFullRoutingEncryptSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+
+public class JMeterProxyFullRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..14a81ba
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+    
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.encrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.encrypt.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptSelect.java
new file mode 100644
index 0000000..d3f75c6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/encrypt/JMeterShardingJDBCFullRoutingEncryptSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+
+public class JMeterShardingJDBCFullRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..5ec55f0
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCFullRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.masterslave.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..22a0758
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterJDBCFullRoutingMasterSlaveSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCFullRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.masterslave.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..b830136
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,57 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.masterslave.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..b5466db
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterProxyFullRoutingMasterSlaveSelect.java
@@ -0,0 +1,51 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterProxyFullRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..58b8699
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.masterslave.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.masterslave.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..7b0005c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/masterslave/JMeterShardingJDBCFullRoutingMasterSlaveSelect.java
@@ -0,0 +1,60 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingJDBCFullRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..11577a1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCFullRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingSelect.java
new file mode 100644
index 0000000..f69ef4b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterJDBCFullRoutingShardingSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCFullRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..835dceb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,57 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingSelect.java
new file mode 100644
index 0000000..db68c01
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterProxyFullRoutingShardingSelect.java
@@ -0,0 +1,51 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterProxyFullRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..43cd0c4
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.sharding.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingSelect.java
new file mode 100644
index 0000000..82ead67
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/sharding/JMeterShardingJDBCFullRoutingShardingSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingJDBCFullRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            //System.out.println(selectSql);
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..bbde31b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..d77cc0f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterJDBCFullRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterJDBCFullRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..e3bfd95
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,57 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..55ab147
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterProxyFullRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,51 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterProxyFullRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..8c2ea95
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String updateSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.values"));
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            /*String deleteSql = (String)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List)sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.values"));
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);*/
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..734f957
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullrouting/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,60 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            //List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, null);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterJDBCFullRoutingSmallShardsShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterJDBCFullRoutingSmallShardsShardingSelect.java
new file mode 100644
index 0000000..55e3ee9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterJDBCFullRoutingSmallShardsShardingSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCFullRoutingSmallShardsShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.sharding.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterProxyFullRoutingSmallShardsShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterProxyFullRoutingSmallShardsShardingSelect.java
new file mode 100644
index 0000000..f6ead8d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterProxyFullRoutingSmallShardsShardingSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingSmallShardsShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterShardingJDBCFullRoutingSmallShardsShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterShardingJDBCFullRoutingSmallShardsShardingSelect.java
new file mode 100644
index 0000000..05f2eb4
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/sharding/JMeterShardingJDBCFullRoutingSmallShardsShardingSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingSmallShardsShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..fb8f3b5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterProxyFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterProxyFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..7d20665
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterProxyFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyFullRoutingSmallShardsShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..56c1321
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/fullroutingsmallshards/shardingmasterslaveencrypt/JMeterShardingJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.FULLROUTING_SMALLSHARDS_SHARDING_MASTERSLAVE_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingInsertUpdateDelete.java
new file mode 100644
index 0000000..bfc1f9e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingInsertUpdateDelete.java
@@ -0,0 +1,77 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCRangeRoutingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+    
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingSelect.java
new file mode 100644
index 0000000..a3e8e4e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/JMeterJDBCRangeRoutingSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCRangeRoutingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.rangerouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCRangeRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..2d38df7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,77 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCRangeRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+    
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptSelect.java
new file mode 100644
index 0000000..c27533c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterJDBCRangeRoutingEncryptSelect.java
@@ -0,0 +1,56 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCRangeRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.rangerouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCRangeRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.rangerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..4a7e741
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,76 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptSelect.java
new file mode 100644
index 0000000..e631575
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterProxyRangeRoutingEncryptSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..4a378d2
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,87 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptSelect.java
new file mode 100644
index 0000000..c385052
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/encrypt/JMeterShardingJDBCRangeRoutingEncryptSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..30cceed
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,76 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..c0e2220
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterProxyRangeRoutingMasterSlaveSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..e012a98
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,87 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.insert.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..ad4c482
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/masterslave/JMeterShardingJDBCRangeRoutingMasterSlaveSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..7c02ad7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,76 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.single.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.single.values"));
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingSelect.java
new file mode 100644
index 0000000..f545980
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterProxyRangeRoutingShardingSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..8b9d9e1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,84 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.single.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.insert.single.values"));
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingSelect.java
new file mode 100644
index 0000000..e47333e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/sharding/JMeterShardingJDBCRangeRoutingShardingSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..8c55989
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,76 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql.single");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values.single"));
+            //JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+    
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..d40dec8
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterProxyRangeRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxyRangeRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..77c45ff
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,87 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql.single");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values.single"));
+    
+            String insertSqlBatch = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql");
+            int insertCount = getInsertCount(insertSqlBatch);
+/*           
+            List insertBatchParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSqlBatch, insertParams);
+            List batchIds = batchInsert(rs, insertCount);*/
+            List batchIds = batchInsert(insertCount, connection, insertSql, insertParams);
+            
+            String updateSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.values"));
+            updateParams = appendIds(batchIds, updateParams);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.values"));
+            deleteParams = appendIds(batchIds, deleteParams);         
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+    
+            //JDBCDataSourceUtil.insertUpdateDelete(connection, insertSql, insertParams, updateSql,updateParams,deleteSql,deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..5edb753
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/rangerouting/shardingmasterslaveencrypt/JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.RANGEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingInsertUpdateDelete.java
new file mode 100644
index 0000000..151f30e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCSingleRoutingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingSelect.java
new file mode 100644
index 0000000..b176ecb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/JMeterJDBCSingleRoutingSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCSingleRoutingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.host"), (int) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.username"), (String) dbConfig.get("jdbc.benchmark.singlerouting.masterslave.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCRangeRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..1bc89fb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCSingleRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+
+            String updateSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptSelect.java
new file mode 100644
index 0000000..2e31331
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterJDBCSingleRoutingEncryptSelect.java
@@ -0,0 +1,56 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterJDBCSingleRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.datasource"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.host"), (int) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.port"),
+                (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.username"), (String) dbConfig.get("jdbc.benchmark.singlerouting.encrypt.ds0.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterJDBCRangeRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("jdbc.benchmark.singlerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..f3149de
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,70 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+    
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+            
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+            
+            
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptSelect.java
new file mode 100644
index 0000000..21cd8a1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterProxySingleRoutingEncryptSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..8de3d5d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptInsertUpdateDelete.java
@@ -0,0 +1,80 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+            
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptSelect.java
new file mode 100644
index 0000000..1c1e35c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/encrypt/JMeterShardingJDBCSingleRoutingEncryptSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_ENCRYPT_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.encrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..7416d0f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,69 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+    
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+            
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..54f8cbe
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterProxySingleRoutingMasterSlaveSelect.java
@@ -0,0 +1,53 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveInsertUpdateDelete.java
new file mode 100644
index 0000000..33f2379
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveInsertUpdateDelete.java
@@ -0,0 +1,79 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingMasterSlaveInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveSelect.java
new file mode 100644
index 0000000..1036002
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/masterslave/JMeterShardingJDBCSingleRoutingMasterSlaveSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingMasterSlaveSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_MASTER_SLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.masterslave.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..3a58ccb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,69 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+    
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingSelect.java
new file mode 100644
index 0000000..f025b64
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterProxySingleRoutingShardingSelect.java
@@ -0,0 +1,52 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingInsertUpdateDelete.java
new file mode 100644
index 0000000..6507b42
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingInsertUpdateDelete.java
@@ -0,0 +1,80 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingShardingInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingSelect.java
new file mode 100644
index 0000000..eac390b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/sharding/JMeterShardingJDBCSingleRoutingShardingSelect.java
@@ -0,0 +1,61 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingShardingSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_SHARDING_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.sharding.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.sharding.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..9382ef5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,67 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptInsert");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+            rs.next();
+            Long id = rs.getLong(1);
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..9536060
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterProxySingleRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,54 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterProxySingleRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) dbConfig.get("ss.proxy.db.datasource"),
+                (String) dbConfig.get("ss.proxy.host"), (int) dbConfig.get("ss.proxy.port"),
+                (String) dbConfig.get("ss.proxy.db.username"), (String) dbConfig.get("ss.proxy.db.password"));
+    }
+
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterProxyFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
new file mode 100644
index 0000000..2cbe223
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete.java
@@ -0,0 +1,81 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        ResultSet rs = null;
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("SJPerformanceMSSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+
+            String insertSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql");
+            List insertParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.values"));
+            rs = JDBCDataSourceUtil.insert(connection, insertSql, insertParams);
+    
+            rs.next();
+            Long id = rs.getLong(1);
+            String updateSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql");
+            List updateParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.values"));
+            updateParams.add(id);
+            JDBCDataSourceUtil.update(connection, updateSql, updateParams);
+
+            String deleteSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql");
+            List deleteParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.values"));
+            deleteParams.add(id);
+            JDBCDataSourceUtil.delete(connection, deleteSql, deleteParams);
+
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null && !rs.isClosed()) {
+                    rs.close();
+                }
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+            results.sampleEnd();
+        }
+
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptSelect.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptSelect.java
new file mode 100644
index 0000000..1b9a561
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/singlerouting/shardingmasterslaveencrypt/JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptSelect.java
@@ -0,0 +1,62 @@
+package org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingConfigType;
+import org.apache.shardingsphere.benchmark.db.shardingjdbc.ShardingJDBCDataSourceFactory;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptSelect extends JMeterBenchmarkBase {
+
+    public static DataSource dataSource;
+
+    static {
+        try {
+            dataSource = ShardingJDBCDataSourceFactory.newInstance(ShardingConfigType.SINGLEROUTING_SHARDING_MASTERSLAVE_SHARDINGJDBC_CONFIG);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterShardingJDBCFullRoutingEncryptSelect");
+        results.sampleStart();
+        Connection connection = null;
+
+        try {
+            connection = dataSource.getConnection();
+            String selectSql = (String) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql");
+            List selectParams = convertParams((List) sqlConfig.get("ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.values"));
+            JDBCDataSourceUtil.select(connection, selectSql, selectParams);
+            results.setSuccessful(true);
+        } catch (SQLException e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+        } catch (Exception e) {
+            results.setSuccessful(false);
+            e.printStackTrace();
+
+        } finally {
+            results.sampleEnd();
+            try {
+                connection.close();
+            } catch (SQLException throwables) {
+                throwables.printStackTrace();
+            }
+        }
+        return results;
+    }
+}
diff --git a/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/statistic/JMeterShardigSphereBenchmarkStatistic.java b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/statistic/JMeterShardigSphereBenchmarkStatistic.java
new file mode 100644
index 0000000..c57854e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/java/org/apache/shardingsphere/benchmark/jmeter/statistic/JMeterShardigSphereBenchmarkStatistic.java
@@ -0,0 +1,78 @@
+package org.apache.shardingsphere.benchmark.jmeter.statistic;
+
+import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.shardingsphere.benchmark.bean.BenchmarkResultBean;
+import org.apache.shardingsphere.benchmark.common.file.excel.BenchmarkExcelWriter;
+import org.apache.shardingsphere.benchmark.common.statistic.BenchmarkFullroutingStatistic;
+import org.apache.shardingsphere.benchmark.common.statistic.BenchmarkRangeroutingStatistic;
+import org.apache.shardingsphere.benchmark.common.statistic.BenchmarkSingleroutingStatistic;
+import org.apache.shardingsphere.benchmark.db.jdbc.JDBCDataSourceUtil;
+import org.apache.shardingsphere.benchmark.jmeter.JMeterBenchmarkBase;
+
+import javax.sql.DataSource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * JMeter test plan for benchmark statistic.
+ */
+public class JMeterShardigSphereBenchmarkStatistic extends JMeterBenchmarkBase {
+    
+    public static DataSource dataSource;
+    static {
+        dataSource = JDBCDataSourceUtil.initDb((String) userConfig.get("shardingsphere.benchmark.result.datasource"),
+                (String) userConfig.get("shardingsphere.benchmark.result.database.host"), Integer.valueOf((String)userConfig.get("shardingsphere.benchmark.result.database.port")).intValue(),
+                (String) userConfig.get("shardingsphere.benchmark.result.database.username"), (String) userConfig.get("shardingsphere.benchmark.result.database.password"));
+    }
+    
+    @Override
+    public SampleResult runTest(JavaSamplerContext context) {
+        
+        SampleResult results = new SampleResult();
+        results.setSampleLabel("JMeterSSBenchmarkStatistic");
+        results.sampleStart();
+        int concurrency = Integer.valueOf((String)userConfig.get("shardingsphere.jmeter.concurrency.count")).intValue();
+        String[] sampleArray = ((String)userConfig.get("shardingsphere.result.sample.amount")).split(",");
+        int skipBegin = Integer.valueOf(sampleArray[0]).intValue();
+        int skipEnd = Integer.valueOf(sampleArray[1]).intValue();
+        long updateTime = System.currentTimeMillis();
+        int dbShardingCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.db.count")).intValue();
+        int tableShardingCount = Integer.valueOf((String)userConfig.get("shardingsphere.sharding.table.count")).intValue();
+        String benchmarkVersion = (String)userConfig.get("shardingsphere.version");
+        String benchmarkInsertSql = (String) sqlConfig.get("ss.benchmark.result.insert.sql");
+        String benchmarkAvgInsertSql = (String)sqlConfig.get("ss.benchmark.avg.result.insert.sql");
+        String currentTime = String.valueOf(System.currentTimeMillis());
+        BenchmarkFullroutingStatistic benchmarkFullroutingStatistic= new BenchmarkFullroutingStatistic();
+        List<BenchmarkResultBean> fullRoutingResult = benchmarkFullroutingStatistic.calculateFullroutingScenarioResult(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        BenchmarkRangeroutingStatistic benchmarkRangeroutingStatistic = new BenchmarkRangeroutingStatistic();
+        List<BenchmarkResultBean> rangeRoutingResult = benchmarkRangeroutingStatistic.calculateRangeRoutingScenarioResult(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        BenchmarkSingleroutingStatistic benchmarkSingleroutingStatistic = new BenchmarkSingleroutingStatistic();
+        List<BenchmarkResultBean> singleRoutingResult = benchmarkSingleroutingStatistic.calculateSingleRoutingScenarioResult(benchmarkResultPath, sqlConfig, benchmarkVersion, skipBegin, skipEnd, concurrency, updateTime, dbShardingCount, tableShardingCount);
+        benchmarkFullroutingStatistic.updateBenchmarkRecordInDb(dataSource, fullRoutingResult, benchmarkInsertSql);
+        benchmarkRangeroutingStatistic.updateBenchmarkRecordInDb(dataSource, rangeRoutingResult, benchmarkInsertSql);
+        benchmarkSingleroutingStatistic.updateBenchmarkRecordInDb(dataSource, singleRoutingResult, benchmarkInsertSql);
+        List shardingParams = Arrays.asList(benchmarkVersion, tableShardingCount, dbShardingCount, concurrency);
+        List noShardingParams = Arrays.asList(benchmarkVersion, 0, 0, concurrency);
+    
+        List<BenchmarkResultBean> fullRoutingCalResult = benchmarkFullroutingStatistic.calculateFullroutingScenarioAvgResult(dataSource, sqlConfig, noShardingParams, shardingParams);
+        List<BenchmarkResultBean> rangeRoutingCalResult = benchmarkRangeroutingStatistic.calculateRangeroutingScenarioAvgResult(dataSource, sqlConfig, noShardingParams, shardingParams);
+        List<BenchmarkResultBean> singleRoutingCalResult = benchmarkSingleroutingStatistic.calculateSingleroutingScenarioAvgResult(dataSource, sqlConfig, noShardingParams, shardingParams);
+    
+        benchmarkFullroutingStatistic.updateBenchmarkRecordInDb(dataSource, fullRoutingCalResult, benchmarkAvgInsertSql);
+        benchmarkRangeroutingStatistic.updateBenchmarkRecordInDb(dataSource, rangeRoutingCalResult, benchmarkAvgInsertSql);
+        benchmarkSingleroutingStatistic.updateBenchmarkRecordInDb(dataSource, singleRoutingCalResult, benchmarkAvgInsertSql);
+        
+        String resultExcelPath = (String)userConfig.get("shardingsphere.benchmark.result.base.path") + "/" + (String)userConfig.get("shardingsphere.benchmark.result.excel.name");
+        String resultAvgExcelPath = (String)userConfig.get("shardingsphere.benchmark.result.base.path")  + "/" + (String)userConfig.get("shardingsphere.benchmark.avg.result.excel.name");
+        BenchmarkExcelWriter.writeExcel(resultExcelPath, "full-routing-" + currentTime, true, 1, fullRoutingResult);
+        BenchmarkExcelWriter.writeExcel(resultExcelPath, "range-routing-" + currentTime, true, 1, rangeRoutingResult);
+        BenchmarkExcelWriter.writeExcel(resultExcelPath, "single-routing-" + currentTime, true, 1, singleRoutingResult);
+        BenchmarkExcelWriter.writeExcel(resultAvgExcelPath, "full-routing-" + currentTime, true, 1, fullRoutingCalResult);
+        BenchmarkExcelWriter.writeExcel(resultAvgExcelPath, "range-routing-" + currentTime, true, 1, rangeRoutingCalResult);
+        BenchmarkExcelWriter.writeExcel(resultAvgExcelPath, "single-routing-" + currentTime, true, 1, singleRoutingCalResult);
+        
+        results.sampleEnd();
+        return results;
+    }
+}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/perfstmt/ShardingPerfStmt.java b/shardingsphere-benchmark/src/main/java/perfstmt/ShardingPerfStmt.java
deleted file mode 100644
index 9c2f3ad..0000000
--- a/shardingsphere-benchmark/src/main/java/perfstmt/ShardingPerfStmt.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package perfstmt;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * sql statements used for performance.
- *
- * @author nancyzrh
- */
-@RequiredArgsConstructor
-@Getter
-public enum ShardingPerfStmt {
-    
-    /**
-     *  stmt for perf.
-     */
-    CLEAN_ALL_STMT("delete from ssperf"),
-    
-    DELETE_STMT("delete from ssperf where k=? and id=?"),
-    
-    INSERT_STMT("INSERT INTO ssperf(k,c,pad) VALUES (?,?,?)"),
-    
-    INSET_DEMO_STMT("INSERT INTO ssperf(id,k,c,pad) VALUES (?,?,?,?)"),
-    
-    SELECT_STMT("SELECT id,k from ssperf where id=1 and k=1"),
-    
-    UPDATE_STMT("update ssperf set c=?,pad=? where id=? and k=?"),
-    
-    INSERT_SQL_STMT("INSERT INTO ssperf(k,c,pad) VALUES (?,?,?)"),
-    
-    UPDATE_SQL_STMT("update ssperf set c=?,pad =? where id=? and k=?"),
-    
-    DELETE_SQL_STMT("delete from ssperf where k=? and id=?"),
-    
-    SINGLE_ROUTE_SELECT("SELECT id,k from ssperf where id=1 and k=1"),
-    
-    FULL_ROUTE_SELECT("SELECT max(id) from ssperf where id%4=1");
-    
-    private final String value;
-    
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/api/entity/Iou.java b/shardingsphere-benchmark/src/main/java/service/api/entity/Iou.java
deleted file mode 100644
index 20ed67a..0000000
--- a/shardingsphere-benchmark/src/main/java/service/api/entity/Iou.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.api.entity;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * Iou entity.
- * @author nancyzrh
- */
-@Setter
-@Getter
-public class Iou implements Serializable {
-    private static final long serialVersionUID = -4245146895898370269L;
-    
-    private int k;
-    
-    private String c;
-    
-    private String pad;
-    
-    /**
-     *  impliment to string.
-     * @return result string
-     */
-    @Override
-    public String toString() {
-        return String.format("k: %s, c: %s, pad: %s", k, c, pad);
-    }
-    
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/service/api/service/SJPerfService.java b/shardingsphere-benchmark/src/main/java/service/api/service/SJPerfService.java
deleted file mode 100644
index 343ce4b..0000000
--- a/shardingsphere-benchmark/src/main/java/service/api/service/SJPerfService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.api.service;
-
-import lombok.Getter;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * sj performance service.
- * @author nancyzrh
- */
-@Getter
-public class SJPerfService {
-    private final DataSource dataSource;
-    
-    public SJPerfService(final DataSource dataSource) throws SQLException {
-        this.dataSource = dataSource;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingDatabaseAlgorithm.java b/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingDatabaseAlgorithm.java
deleted file mode 100644
index 64fd089..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingDatabaseAlgorithm.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.algorithm;
-
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
-
-import java.util.Collection;
-
-/**
- * precise module sharding database algorithm.
- * @author nancyzrh
- */
-public class PreciseModuleShardingDatabaseAlgorithm implements PreciseShardingAlgorithm<Integer> {
-    
-    /**
-     * do sharding.
-     * @param databaseNames database names
-     * @param shardingValue sharding value
-     * @return string
-     */
-    @Override
-    public String doSharding(final Collection<String> databaseNames, final PreciseShardingValue<Integer> shardingValue) {
-        for (String each : databaseNames) {
-            if (each.endsWith(shardingValue.getValue() % 2 + "")) {
-                return each;
-            }
-        }
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingTableAlgorithm.java b/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingTableAlgorithm.java
deleted file mode 100644
index fd942ec..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/algorithm/PreciseModuleShardingTableAlgorithm.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.algorithm;
-
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
-
-import java.util.Collection;
-
-/**
- * precise module sharding table algorithm.
- * @author nancyzrh
- */
-public class PreciseModuleShardingTableAlgorithm implements PreciseShardingAlgorithm<Integer> {
-    
-    /**
-     * do sharding.
-     * @param tableNames table names
-     * @param shardingValue sharding value
-     * @return string
-     */
-    @Override
-    public String doSharding(final Collection<String> tableNames, final PreciseShardingValue<Integer> shardingValue) {
-        for (String each : tableNames) {
-            if (each.endsWith(shardingValue.getValue() % 2 + "")) {
-                return each;
-            }
-        }
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingDatabaseAlgorithm.java b/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingDatabaseAlgorithm.java
deleted file mode 100644
index f8dcccf..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingDatabaseAlgorithm.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.algorithm;
-
-import com.google.common.collect.Range;
-import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * range module sharding database algorithm.
- * @author nancyzrh
- */
-public class RangeModuleShardingDatabaseAlgorithm implements RangeShardingAlgorithm<Integer> {
-    
-    /**
-     * do sharding.
-     * @param databaseNames database names
-     * @param shardingValue sharding value
-     * @return collection result
-     */
-    @Override
-    public Collection<String> doSharding(final Collection<String> databaseNames, final RangeShardingValue<Integer> shardingValue) {
-        Set<String> result = new LinkedHashSet<>();
-        if (Range.closed(1, 5).encloses(shardingValue.getValueRange())) {
-            for (String each : databaseNames) {
-                if (each.endsWith("0")) {
-                    result.add(each);
-                }
-            }
-        } else if (Range.closed(6, 10).encloses(shardingValue.getValueRange())) {
-            for (String each : databaseNames) {
-                if (each.endsWith("1")) {
-                    result.add(each);
-                }
-            }
-        } else if (Range.closed(1, 10).encloses(shardingValue.getValueRange())) {
-            result.addAll(databaseNames);
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        return result;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingTableAlgorithm.java b/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingTableAlgorithm.java
deleted file mode 100644
index cf0ffe9..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/algorithm/RangeModuleShardingTableAlgorithm.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.algorithm;
-
-import com.google.common.collect.Range;
-import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * range module sharding table algorithm.
- * @author nancyzrh
- */
-public class RangeModuleShardingTableAlgorithm implements RangeShardingAlgorithm<Long> {
-    
-    /**
-     * do sharding.
-     * @param tableNames table names
-     * @param shardingValue sharding value
-     * @return collection result
-     */
-    @Override
-    public Collection<String> doSharding(final Collection<String> tableNames, final RangeShardingValue<Long> shardingValue) {
-        Set<String> result = new LinkedHashSet<>();
-        if (Range.closed(200000000000000000L, 400000000000000000L).encloses(shardingValue.getValueRange())) {
-            for (String each : tableNames) {
-                if (each.endsWith("0")) {
-                    result.add(each);
-                }
-            }
-        } else {
-            throw new UnsupportedOperationException();
-        }
-        return result;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/config/DataSourceUtil.java b/shardingsphere-benchmark/src/main/java/service/util/config/DataSourceUtil.java
deleted file mode 100644
index b5dec38..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/config/DataSourceUtil.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.config;
-
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-
-import javax.sql.DataSource;
-import java.sql.*;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * datasource utils for MySQL Jdbc.
- */
-public class DataSourceUtil {
-    private static final Map<String, DataSource> datasourceMap = new HashMap<>();
-    
-    /**
-     * create data source for jdbc
-     * @param userName user name
-     * @param dataSourceName datasource name
-     * @param host host
-     * @param port port
-     * @param password pwd
-     */
-    public static void createDataSource(final String userName, final String dataSourceName, final String host, final int port, final String password) {
-        HikariConfig config = new HikariConfig();
-        config.setDriverClassName("com.mysql.jdbc.Driver");
-        config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC", host, port, dataSourceName));
-        config.setUsername(userName);
-        config.setPassword(password);
-        config.setMaximumPoolSize(200);
-        config.setConnectionTimeout(30000);
-        config.setIdleTimeout(60000);
-        config.setMaxLifetime(1800000);
-        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cachePrepStmts", "true");
-        config.addDataSourceProperty("prepStmtCacheSize", 250);
-        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
-        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
-        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
-        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
-        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
-        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
-        DataSource dataSource = new HikariDataSource(config);
-        datasourceMap.put(dataSourceName, dataSource);
-    }
-    
-    /**
-     * get datasource from name.
-     * @param dataSourceName input name
-     * @return datasource
-     */
-    public static DataSource getDataSource(final String dataSourceName) {
-        return datasourceMap.get(dataSourceName);
-    }
-    
-    /**
-     * for master slave compare
-     * @param datasource
-     * @throws SQLException
-     */
-    public static void  writeReadOp(final String datasource) throws SQLException {
-        String sql = "INSERT INTO ssperf (k,c,pad) VALUES (?,?,?)";
-        Connection connection = null;
-        try {
-            connection = getDataSource(datasource).getConnection();
-            PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.executeUpdate();
-            ResultSet result = preparedStatement.getGeneratedKeys();
-            result.next();
-            Long id = result.getLong(1);
-            sql = "select count(id) from ssperf";
-            preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.executeQuery();
-            sql = "select max(id) from ssperf ignore index(`PRIMARY`)";
-            preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.executeQuery();
-            sql = "delete from ssperf where k=? and id=?";
-            preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setLong(2, id);
-            preparedStatement.executeUpdate();
-            preparedStatement.close();
-            result.close();
-        }catch (final SQLException ex) {
-            ex.printStackTrace();
-        } finally {
-            connection.close();
-        }
-    }
-    
-    /**
-     * for mysql compare without master slave scene
-     * @param datasource
-     * @throws SQLException
-     */
-    public static void  writeOp(final String datasource) throws SQLException {
-        String sql = "INSERT INTO ssperf (k,c,pad) VALUES (?,?,?)";
-        Connection connection = null;
-        try {
-            connection = getDataSource(datasource).getConnection();
-            PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.executeUpdate();
-            ResultSet result = preparedStatement.getGeneratedKeys();
-            result.next();
-            Long id = result.getLong(1);
-            sql = "update ssperf set c=?,pad =? where id=? and k=1";
-            preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, "##-#####");
-            preparedStatement.setString(2, "##-#####");
-            preparedStatement.setLong(3, id);
-            preparedStatement.executeUpdate();
-            sql = "delete from ssperf where k=? and id=?";
-            preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setLong(2, id);
-            preparedStatement.executeUpdate();
-            preparedStatement.close();
-            result.close();
-        }catch (final SQLException ex) {
-            ex.printStackTrace();
-        } finally {
-            connection.close();
-        }
-    }
-    
-    /**
-     * for select
-     * @param sql sql stmt
-     * @param datasource dataSource name
-     * @throws SQLException
-     */
-    public static void getSelectRes(final String sql, String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            ResultSet resultSet = preparedStatement.executeQuery();
-        }
-    }
-    
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceFactory.java b/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceFactory.java
deleted file mode 100644
index ca9ec80..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceFactory.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.config;
-
-import com.google.common.collect.Lists;
-import org.apache.shardingsphere.encrypt.api.EncryptColumnRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.EncryptRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.EncryptTableRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.EncryptorRuleConfiguration;
-import org.apache.shardingsphere.api.config.masterslave.LoadBalanceStrategyConfiguration;
-import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration;
-import org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration;
-import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
-import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
-import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
-
-import org.apache.shardingsphere.shardingjdbc.api.MasterSlaveDataSourceFactory;
-import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Properties;
-import java.util.Arrays;
-import java.util.List;
-import java.util.LinkedHashMap;
-
-/**
- * create datasource operation for Sharding-Jdbc.
- * @author nancyzrh
- */
-public class SJDataSourceFactory {
-    
-    /**
-     * create datasource for master slave.
-     * @return datasource db
-     * @throws SQLException ex
-     */
-    public static DataSource createMSDataSource() throws SQLException {
-        Map<String, DataSource> dataSourceMap = new HashMap<>();
-        dataSourceMap.put("ds_master", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        dataSourceMap.put("ds_slave0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration("ds_master_slave", "ds_master", Arrays.asList("ds_slave0"));
-        Properties properties = new Properties();
-        properties.setProperty("max.connections.size.per.query", "200");
-        properties.setProperty("executor.size", "200");
-        DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig, properties);
-        return dataSource;
-    }
-    
-    /**
-     * create sharding datasource.
-     * @return datasource db
-     * @throws SQLException ex
-     */
-    public static DataSource createShardingDataSource() throws SQLException {
-        TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration("ssperf", "ds_${0..3}.ssperf${0..1023}");
-        tableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "ds_${id % 4}"));
-        tableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("k", "ssperf${k % 1024}"));
-        tableRuleConfig.setKeyGeneratorConfig(getKeyGeneratorConfiguration());
-        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-        shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
-        Properties properties = new Properties();
-        properties.setProperty("max.connections.size.per.query", "200");
-        properties.setProperty("executor.size", "200");
-        return ShardingDataSourceFactory.createDataSource(createShardingDataSourceMap(), shardingRuleConfig, properties);
-    }
-    
-    /**
-     * create sharding datasource map.
-     * @return datasource map
-     */
-    private static Map<String, DataSource> createShardingDataSourceMap() {
-        Map<String, DataSource> result = new HashMap<>();
-        result.put("ds_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_1", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_2", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_3", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        return result;
-    }
-    
-    /**
-     * create datasource for master slave & encrypt & sharding scene.
-     * @return datasource
-     * @throws SQLException sqlexception
-     */
-    public static DataSource createMSEncShardingDataSource() throws SQLException {
-        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-        TableRuleConfiguration tableRuleConfiguration = new TableRuleConfiguration("ssperf", "ms_ds_${0..3}.test${0..1023}");
-        tableRuleConfiguration.setKeyGeneratorConfig(getKeyGeneratorConfiguration());
-        shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfiguration);
-        shardingRuleConfig.getBindingTableGroups().add("ssperf");
-        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "ms_ds_${id % 2}"));
-        shardingRuleConfig.setDefaultTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("k", "test${k % 1024}"));
-        shardingRuleConfig.setMasterSlaveRuleConfigs(getMSEncRuleConfigurations());
-        shardingRuleConfig.setEncryptRuleConfig(getMsEncRuleConfiguration());
-        Properties properties = new Properties();
-        properties.setProperty("max.connections.size.per.query", "200");
-        properties.setProperty("executor.size", "200");
-        return ShardingDataSourceFactory.createDataSource(createMSEncDataSourceMap(), shardingRuleConfig, properties);
-    }
-    
-    /**
-     * * get master slave configurations for master slave & encrypt & sharding.
-     * @return master slave rule configuration
-     */
-    private static List<MasterSlaveRuleConfiguration> getMSEncRuleConfigurations() {
-        LoadBalanceStrategyConfiguration loadBalanceStrategyConfiguration = new LoadBalanceStrategyConfiguration("ROUND_ROBIN");
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration("ms_ds_0", "master_0", Arrays.asList("master_0_slave_0"), loadBalanceStrategyConfiguration);
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration("ms_ds_1", "master_1", Arrays.asList("master_1_slave_1"), loadBalanceStrategyConfiguration);
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig3 = new MasterSlaveRuleConfiguration("ms_ds_2", "master_2", Arrays.asList("master_2_slave_2"), loadBalanceStrategyConfiguration);
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig4 = new MasterSlaveRuleConfiguration("ms_ds_3", "master_3", Arrays.asList("master_3_slave_3"), loadBalanceStrategyConfiguration);
-        return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2, masterSlaveRuleConfig3, masterSlaveRuleConfig4);
-    }
-    
-    /**
-     * create datasourceMap for master slave & encrypt & sharding.
-     * @return datasource map
-     */
-    private static Map<String, DataSource> createMSEncDataSourceMap() {
-        final Map<String, DataSource> result = new HashMap<>();
-        result.put("master_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_0_slave_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_1", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_1_slave_1", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_2", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_2_slave_2", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_3", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        result.put("master_3_slave_3", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, ""));
-        return result;
-    }
-    
-    /**
-     * get encrypt configuration for master slave & encrypt & sharding.
-     * @return encryptRuleConfiguration
-     */
-    private static EncryptRuleConfiguration getMsEncRuleConfiguration() {
-        Properties props = new Properties();
-        props.setProperty("aes.key.value", "123456abc");
-        Map<String, EncryptColumnRuleConfiguration> columns = new LinkedHashMap<>();
-        EncryptorRuleConfiguration encryptorConfig = new EncryptorRuleConfiguration("AES", props);
-        EncryptColumnRuleConfiguration columnConfig = new EncryptColumnRuleConfiguration("c_plain", "c", "", "aes");
-        columns.put("c", columnConfig);
-        EncryptorRuleConfiguration encryptorConfigMd5 = new EncryptorRuleConfiguration("md5", new Properties());
-        EncryptColumnRuleConfiguration columnConfigMd5 = new EncryptColumnRuleConfiguration("", "pad", "", "md5");
-        columns.put("pad", columnConfigMd5);
-        EncryptTableRuleConfiguration tableConfig = new EncryptTableRuleConfiguration(columns);
-        EncryptRuleConfiguration encryptRuleConfig = new EncryptRuleConfiguration();
-        encryptRuleConfig.getEncryptors().put("aes", encryptorConfig);
-        encryptRuleConfig.getEncryptors().put("md5", encryptorConfigMd5);
-        encryptRuleConfig.getTables().put("test", tableConfig);
-        return encryptRuleConfig;
-    }
-    
-    /**
-     * get key generator config.
-     * @return keyGeneratorConfiguration
-     */
-    private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {
-        return new KeyGeneratorConfiguration("SNOWFLAKE", "id", new Properties());
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceUtil.java b/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceUtil.java
deleted file mode 100644
index 6a2c67a..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/config/SJDataSourceUtil.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.config;
-
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-import perfstmt.ShardingPerfStmt;
-import service.api.entity.Iou;
-
-import javax.sql.DataSource;
-import java.sql.ResultSet;
-import java.sql.PreparedStatement;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * datasource utils for Sharding-Jdbc.
- * @author nancyzrh
- */
-public class SJDataSourceUtil {
-    private static final String DEFAULT_SCHEMA = "test";
-    
-    public static DataSource createDataSource(final String usrName, final String dataSourceName, final String host, final int port, final String password) {
-        HikariConfig config = new HikariConfig();
-        config.setDriverClassName("com.mysql.jdbc.Driver");
-        config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC", host, port, dataSourceName));
-        config.setUsername(usrName);
-        config.setPassword(password);
-        config.setMaximumPoolSize(200);
-        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cachePrepStmts", "true");
-        config.addDataSourceProperty("prepStmtCacheSize", 250);
-        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
-        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
-        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
-        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
-        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
-        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
-        DataSource dataSource = new HikariDataSource(config);
-        return dataSource;
-    }
-    
-    /**
-     * insert data for update.
-     * @param sql stmt
-     * @param datasource datasource from service
-     * @throws SQLException ex
-     */
-    public static void insertDemo(final String sql, final DataSource datasource) throws SQLException {
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setInt(2, 1);
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.setString(4, "##-####");
-            preparedStatement.execute();
-        } catch (final SQLException ignored) {
-        }
-    }
-    
-    /**
-     * for select stmt.
-     * @param sql stmt
-     * @param dataSource datasource from service
-     * @throws SQLException ex
-     */
-    public static void getSelect(final String sql, final DataSource dataSource) throws SQLException {
-        List<Iou> result = new LinkedList<>();
-        try (Connection connection = dataSource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql);
-             ResultSet resultSet = preparedStatement.executeQuery()) {
-            while (resultSet.next()) {
-                Iou iou = new Iou();
-                iou.setK(resultSet.getInt(2));
-                result.add(iou);
-            }
-        }
-    }
-    
-    /**
-     * for update stmt.
-     * @param sql stmt
-     * @param datasource datasource from service
-     * @return res
-     * @throws SQLException ex
-     */
-    public static int updateStmt(final String sql, final DataSource datasource) throws SQLException {
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setString(1, "##-#####");
-            preparedStatement.setString(2, "##-#####");
-            preparedStatement.setInt(3, 1);
-            preparedStatement.setInt(4, 1);
-            return preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * for delete stmt.
-     * @param sql stmt
-     * @param datasource datasource from service
-     * @return res
-     * @throws SQLException ex
-     */
-    public static int delete(final String sql, final DataSource datasource) throws SQLException {
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setInt(2, 1);
-            return preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * for clean up.
-     * @param sql stmt
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void clean(final String sql, final DataSource datasource) throws SQLException {
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * * Insert+Update+Delete as one operation.
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void writeOp(final DataSource datasource) throws SQLException {
-        String sqlStmt = ShardingPerfStmt.INSERT_SQL_STMT.getValue();
-        Long id = Long.MIN_VALUE;
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt, Statement.RETURN_GENERATED_KEYS)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.executeUpdate();
-            ResultSet result = preparedStatement.getGeneratedKeys();
-            result.next();
-            id = result.getLong(1);
-        } catch (final SQLException ex) {
-            ex.printStackTrace();
-        }
-        sqlStmt = ShardingPerfStmt.UPDATE_SQL_STMT.getValue();
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt)) {
-            preparedStatement.setString(1, "##-#####");
-            preparedStatement.setString(2, "##-#####");
-            preparedStatement.setLong(3, id);
-            preparedStatement.setInt(4, 1);
-            preparedStatement.executeUpdate();
-        }
-        sqlStmt = ShardingPerfStmt.DELETE_SQL_STMT.getValue();
-        try (Connection connection = datasource.getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setLong(2, id);
-            preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * for insert stmt.
-     * @param sql stmt
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void insert(final String sql, final DataSource datasource) throws SQLException {
-        try (Connection connection = datasource.getConnection();
-             java.sql.PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.execute();
-        } catch (final SQLException ex) {
-            ex.printStackTrace();
-        }
-    }
-    
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/config/SPDataSourceUtil.java b/shardingsphere-benchmark/src/main/java/service/util/config/SPDataSourceUtil.java
deleted file mode 100644
index 8c8c135..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/config/SPDataSourceUtil.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.config;
-
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-
-import javax.sql.DataSource;
-import java.sql.PreparedStatement;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.ResultSet;
-import java.sql.Statement;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import perfstmt.ShardingPerfStmt;
-import service.api.entity.Iou;
-
-/**
- * datasource utils for Sharding-Proxy.
- * @author nancyzrh
- */
-public class SPDataSourceUtil {
-    private static final String DEFAULT_SCHEMA = "test";
-    
-    private static final Map<String, DataSource> DATA_SOURCE_MAP = new HashMap<>();
-    
-    /**
-     * create datasource.
-     * @param usrName user name
-     * @param dataSourceName datasource name
-     * @param host host ip
-     * @param port port
-     * @param password pwd
-     */
-    public static void createDataSource(final String usrName, final String dataSourceName, final String host, final int port, final String password) {
-        HikariConfig config = new HikariConfig();
-        config.setDriverClassName("com.mysql.jdbc.Driver");
-        config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?useSSL=false&serverTimezone=UTC", host, port, dataSourceName));
-        config.setUsername(usrName);
-        config.setPassword(password);
-        config.setMaximumPoolSize(200);
-        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cachePrepStmts", "true");
-        config.addDataSourceProperty("prepStmtCacheSize", 250);
-        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
-        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
-        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
-        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
-        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
-        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
-        DataSource dataSource = new HikariDataSource(config);
-        DATA_SOURCE_MAP.put(dataSourceName, dataSource);
-    }
-    
-    /**
-     * get datasource from name.
-     * @param dataSourceName input name
-     * @return datasource
-     */
-    public static DataSource getDataSource(final String dataSourceName) {
-        return DATA_SOURCE_MAP.get(dataSourceName);
-    }
-    
-    /**
-     * create schema if db don't exist.
-     * @param dataSourceName datasource name
-     */
-    public static void createSchema(final String dataSourceName) {
-        String sql = "CREATE DATABASE " + dataSourceName;
-        try (Connection connection = getDataSource(DEFAULT_SCHEMA).getConnection();
-             Statement statement = connection.createStatement()) {
-            statement.execute(sql);
-        } catch (final SQLException ignored) {
-        }
-    }
-    
-    /**
-     * insert data for update.
-     * @param sql input sql
-     * @param datasource datasource
-     * @throws SQLException sql exception
-     */
-    public static void insertDemo(final String sql, final String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setInt(2, 2);
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.setString(4, "##-####");
-            preparedStatement.execute();
-        } catch (final SQLException ignored) {
-        }
-    }
-    
-    /**
-     * select result.
-     * @param sql input sql
-     * @param datasource datasource
-     * @return list result
-     * @throws SQLException ex
-     */
-    public static List<Iou> getIou(final String sql, final String datasource) throws SQLException {
-        List<Iou> result = new LinkedList<>();
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql);
-             ResultSet resultSet = preparedStatement.executeQuery()) {
-            while (resultSet.next()) {
-                Iou iou = new Iou();
-                iou.setK(resultSet.getInt(2));
-                result.add(iou);
-            }
-        }
-        return result;
-    }
-    
-    /**
-     * Insert+Update+Delete as one operation.
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void writeOp(final String datasource) throws SQLException {
-        String sqlStmt = ShardingPerfStmt.INSERT_SQL_STMT.getValue();
-        Long id = Long.MIN_VALUE;
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt, Statement.RETURN_GENERATED_KEYS)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.executeUpdate();
-            ResultSet result = preparedStatement.getGeneratedKeys();
-            result.next();
-            id = result.getLong(1);
-        } catch (final SQLException ex) {
-            ex.printStackTrace();
-        }
-        sqlStmt = ShardingPerfStmt.UPDATE_SQL_STMT.getValue();
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt)) {
-            preparedStatement.setString(1, "##-#####");
-            preparedStatement.setString(2, "##-#####");
-            preparedStatement.setLong(3, id);
-            preparedStatement.setInt(4, 1);
-            preparedStatement.executeUpdate();
-        }
-        sqlStmt = ShardingPerfStmt.DELETE_SQL_STMT.getValue();
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sqlStmt)) {
-            preparedStatement.setInt(1, 1);
-            preparedStatement.setLong(2, id);
-            preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * update stmt.
-     * @param sql input stmt
-     * @param datasource datasource
-     * @return execute result
-     * @throws SQLException ex
-     */
-    public static int updateStmt(final String sql, final String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setString(1, "##-#####");
-            preparedStatement.setString(2, "##-#####");
-            preparedStatement.setInt(3, 1);
-            preparedStatement.setInt(4, 2);
-            return preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * insert data.
-     * @param sql input stmt
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void insertIou(final String sql, final String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 2);
-            preparedStatement.setString(2, "##-####");
-            preparedStatement.setString(3, "##-####");
-            preparedStatement.execute();
-        } catch (final SQLException ex) {
-            ex.printStackTrace();
-        }
-    }
-    
-    /**
-     * clean up.
-     * @param sql input stmt
-     * @param datasource datasource
-     * @throws SQLException ex
-     */
-    public static void clean(final String sql, final String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.executeUpdate();
-        }
-    }
-    
-    /**
-     * delete target data.
-     * @param sql input stmt
-     * @param datasource datasource
-     * @return execute
-     * @throws SQLException ex
-     */
-    public static int deleteIou(final String sql, final String datasource) throws SQLException {
-        try (Connection connection = getDataSource(datasource).getConnection();
-             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
-            preparedStatement.setInt(1, 2);
-            preparedStatement.setInt(2, 1);
-            return preparedStatement.executeUpdate();
-        }
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/service/util/config/lastversion/SJDataSourceFactory.java b/shardingsphere-benchmark/src/main/java/service/util/config/lastversion/SJDataSourceFactory.java
deleted file mode 100644
index edc718d..0000000
--- a/shardingsphere-benchmark/src/main/java/service/util/config/lastversion/SJDataSourceFactory.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package service.util.config.lastversion;
-
-import com.google.common.collect.Lists;
-import io.shardingsphere.api.config.rule.MasterSlaveRuleConfiguration;
-import io.shardingsphere.api.config.rule.ShardingRuleConfiguration;
-import io.shardingsphere.api.config.rule.TableRuleConfiguration;
-import io.shardingsphere.api.config.strategy.InlineShardingStrategyConfiguration;
-import io.shardingsphere.shardingjdbc.api.MasterSlaveDataSourceFactory;
-import io.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-import java.util.Map;
-import java.util.List;
-import java.util.Properties;
-import java.util.HashMap;
-import java.util.Arrays;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * create datasource for Sharding-Jdbc version 3.1.0.
- * @author nancyzrh
- */
-public class SJDataSourceFactory {
-    
-    /**
-     * create sharding datasource.
-     * @return datasource
-     * @throws SQLException ex
-     */
-    public static DataSource createShardingDataSource() throws SQLException {
-        TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration();
-        tableRuleConfig.setLogicTable("ssperf");
-        tableRuleConfig.setActualDataNodes("ds_${0..3}.ssperf${0..1023}");
-        tableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "ds_${id % 4}"));
-        tableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("k", "ssperf${k % 1024}"));
-        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-        shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
-        return ShardingDataSourceFactory.createDataSource(createShardingDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
-    }
-    
-    /**
-     * create sharding datasource map.
-     * @return res
-     */
-    private static Map<String, DataSource> createShardingDataSourceMap() {
-        Map<String, DataSource> result = new HashMap<>();
-        result.put("ds_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_1", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_2", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_3", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        return result;
-    }
-    
-    /**
-     * create master slave sharding datasource.
-     * @return datasource
-     * @throws SQLException ex
-     */
-    public static DataSource createMSShardingDataSource() throws SQLException {
-        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
-        shardingRuleConfig.getTableRuleConfigs().add(getTableRuleConfiguration());
-        shardingRuleConfig.getBindingTableGroups().add("ssperf");
-        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("id", "ms_ds_${id % 2}"));
-        shardingRuleConfig.setDefaultTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("k", "ssperf${k % 1024}"));
-        shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());
-        return ShardingDataSourceFactory.createDataSource(createMSsharingDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
-    }
-    
-    /**
-     * get table rule.
-     * @return res
-     */
-    private static TableRuleConfiguration getTableRuleConfiguration() {
-        TableRuleConfiguration result = new TableRuleConfiguration();
-        result.setLogicTable("ssperf");
-        result.setActualDataNodes("ms_ds_${0..1}.ssperf${0..1023}");
-        result.setKeyGeneratorColumnName("id");
-        return result;
-    }
-    
-    /**
-     * get master slave rule.
-     * @return res
-     */
-    private static List<MasterSlaveRuleConfiguration> getMasterSlaveRuleConfigurations() {
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration();
-        masterSlaveRuleConfig1.setName("ms_ds_0");
-        masterSlaveRuleConfig1.setMasterDataSourceName("ds_0");
-        masterSlaveRuleConfig1.setSlaveDataSourceNames(Arrays.asList("ds_0_slave_0"));
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration();
-        masterSlaveRuleConfig2.setName("ms_ds_1");
-        masterSlaveRuleConfig2.setMasterDataSourceName("ds_1");
-        masterSlaveRuleConfig2.setSlaveDataSourceNames(Arrays.asList("ds_1_slave_0"));
-        return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2);
-    }
-    
-    /**
-     * create ms sharding datasource map.
-     * @return res
-     */
-    private static Map<String, DataSource> createMSsharingDataSourceMap() {
-        final Map<String, DataSource> result = new HashMap<>();
-        result.put("ds_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_0_slave_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_1", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        result.put("ds_1_slave_0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        return result;
-    }
-    
-    /**
-     * create master slave datasource.
-     * @return master slave data source
-     * @throws SQLException ex
-     */
-    public static DataSource createMSDataSource() throws SQLException {
-        Map<String, DataSource> dataSourceMap = new HashMap<>();
-        dataSourceMap.put("ds_master", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        dataSourceMap.put("ds_slave0", SJDataSourceUtil.createDataSource("###", "sharding_db", "####", 3306, "####"));
-        MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
-        masterSlaveRuleConfig.setName("ds_master_slave");
-        masterSlaveRuleConfig.setMasterDataSourceName("ds_master");
-        masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds_slave0"));
-        DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig, new ConcurrentHashMap(), new Properties());
-        return dataSource;
-    }
-    
-}
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveDelete.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveDelete.java
deleted file mode 100644
index 2ffc465..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveDelete.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.lastversion.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave delete performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJMasterSlaveDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_SQL_MASTER_SLAVE = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return sample result
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(DELETE_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveInsert.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveInsert.java
deleted file mode 100644
index b029615..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveInsert.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.lastversion.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave insert performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJMasterSlaveInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_SQL_MASTER_SLAVE = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveInsert");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.insert(INSERT_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveSelect.java
deleted file mode 100644
index f6a04f5..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveSelect.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.lastversion.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave select performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJMasterSlaveSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_SQL_MASTER_SLAVE = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJPerformanceMSDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(SELECT_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveUpdate.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveUpdate.java
deleted file mode 100644
index 07245de..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/masterslave/SJMasterSlaveUpdate.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.lastversion.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave update performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJMasterSlaveUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_SQL_MASTER_SLAVE = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJPerformanceMSDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.updateStmt(UPDATE_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingDelete.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingDelete.java
deleted file mode 100644
index 54fe577..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingDelete.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceUtil;
-import service.util.config.lastversion.SJDataSourceFactory;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC delete performace with version3.1.0.
- * @author nancyzrh
- */
-public class SJShardingDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_SHARDING_STMT = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(DELETE_SHARDING_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingInsert.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingInsert.java
deleted file mode 100644
index 5d87a12..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingInsert.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceUtil;
-import service.util.config.lastversion.SJDataSourceFactory;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC insert performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJShardingInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_SHARDING_STMT = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingInsert");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.insert(INSERT_SHARDING_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingSelect.java
deleted file mode 100644
index 1bbceac..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingSelect.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceUtil;
-import service.util.config.lastversion.SJDataSourceFactory;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC select performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJShardingSelect extends AbstractJavaSamplerClient {
-    private static final String INSERT_STMT = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(INSERT_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingUpdate.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingUpdate.java
deleted file mode 100644
index cf90dbf..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/lastversion/sharding/SJShardingUpdate.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.lastversion.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceUtil;
-import service.util.config.lastversion.SJDataSourceFactory;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC update performance with version3.1.0.
- * @author nancyzrh
- */
-public class SJShardingUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_STMT = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingUpdate");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(UPDATE_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveDelete.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveDelete.java
deleted file mode 100644
index 890a66a..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveDelete.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- *  Sharding-JDBC delete performance test for master slave with ss dev branch.
- * @author nancyzrh
- */
-public class SJMasterSlaveDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_SQL_MASTER_SLAVE = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(DELETE_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveInsert.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveInsert.java
deleted file mode 100644
index 219ca6c..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveInsert.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC Master Slave insert performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMasterSlaveInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_SQL_MASTER_SLAVE = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveInsert");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.insert(INSERT_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveSelect.java
deleted file mode 100644
index 7318997..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveSelect.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave select performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMasterSlaveSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_SQL_MASTER_SLAVE = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext javaSamplerContext
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(SELECT_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveUpdate.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveUpdate.java
deleted file mode 100644
index 449b7eb..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveUpdate.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave update performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMasterSlaveUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_SQL_MASTER_SLAVE = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveUpdate");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.updateStmt(UPDATE_SQL_MASTER_SLAVE, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveWrite.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveWrite.java
deleted file mode 100644
index efebd23..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/masterslave/SJMasterSlaveWrite.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.masterslave;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC Insert+Update+Delete Operation performance test for master slave.
- */
-public class SJMasterSlaveWrite extends AbstractJavaSamplerClient {
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMasterSlaveDeleteWrite");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.writeOp(dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingDelete.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingDelete.java
deleted file mode 100644
index e454676..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingDelete.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.msencryptsharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave & encrypt & sharding delete performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMsEncryptShardingDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_ENC_STMT = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSEncShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJEncryptDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(DELETE_ENC_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingInsert.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingInsert.java
deleted file mode 100644
index 3188931..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingInsert.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.msencryptsharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- *  Sharding-JDBC master slave & encrypt & sharding insert performance with ss dev branch.
- */
-public class SJMsEncryptShardingInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_ENC_STMT = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSEncShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJEncryptInsert");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.insert(INSERT_ENC_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingSelect.java
deleted file mode 100644
index 529cddc..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingSelect.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.msencryptsharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave & encrypt & sharding select performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMsEncryptShardingSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_ENC_STMT = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSEncShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJEncryptSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(SELECT_ENC_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingUpdate.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingUpdate.java
deleted file mode 100644
index e5ad46b..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingUpdate.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.msencryptsharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC master slave & encrypt & sharding update performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJMsEncryptShardingUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_ENC_STMT = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSEncShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJEncryptUpdate");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.updateStmt(UPDATE_ENC_STMT, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingWrite.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingWrite.java
deleted file mode 100644
index f6435f8..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/msencryptsharding/SJMsEncryptShardingWrite.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.msencryptsharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC Insert+Update+Delete operation performance test for master slave & encrypt & sharding.
- */
-public class SJMsEncryptShardingWrite extends AbstractJavaSamplerClient {
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createMSEncShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJMsEncryptShardingWrite");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.writeOp(dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingDelete.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingDelete.java
deleted file mode 100644
index a9e9837..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingDelete.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC sharding delete performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJShardingDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_SHARDING = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingDelete");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.delete(DELETE_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingFullRouteSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingFullRouteSelect.java
deleted file mode 100644
index 57a6ea7..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingFullRouteSelect.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC sharding full route select performance with ss dev branch.
- */
-public class SJShardingFullRouteSelect extends AbstractJavaSamplerClient {
-    private static final String FULL_ROUTE_SELECT_SHARDING = ShardingPerfStmt.FULL_ROUTE_SELECT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingFullRouteSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(FULL_ROUTE_SELECT_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingInsert.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingInsert.java
deleted file mode 100644
index ea25a04..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingInsert.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- *  Sharding-JDBC sharding insert performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJShardingInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_SHARDING = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingInsert");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.insert(INSERT_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSelect.java
deleted file mode 100644
index 5a73f80..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSelect.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- *  Sharding-JDBC sharding select performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJShardingSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_SHARDING = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(SELECT_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSingleRouteSelect.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSingleRouteSelect.java
deleted file mode 100644
index e95f289..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingSingleRouteSelect.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC sharding single route select performance with ss dev branch.
- */
-public class SJShardingSingleRouteSelect extends AbstractJavaSamplerClient {
-    private static final String SINGLE_ROUTE_SELECT_SHARDING = ShardingPerfStmt.SINGLE_ROUTE_SELECT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingSingleRouteSelect");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.getSelect(SINGLE_ROUTE_SELECT_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingUpdate.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingUpdate.java
deleted file mode 100644
index 6aa87e6..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingUpdate.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC sharding update performance with ss dev branch.
- * @author nancyzrh
- */
-public class SJShardingUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_SHARDING = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingUpdate");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.updateStmt(UPDATE_SHARDING, dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingWrite.java b/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingWrite.java
deleted file mode 100644
index 62adcee..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingjdbc/perf/sharding/SJShardingWrite.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingjdbc.perf.sharding;
-
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.SJDataSourceFactory;
-import service.util.config.SJDataSourceUtil;
-
-import javax.sql.DataSource;
-import java.sql.SQLException;
-
-/**
- * Sharding-JDBC sharding Insert+Update+Delete Operation performance with ss dev branch.
- */
-public class SJShardingWrite extends AbstractJavaSamplerClient {
-    
-    private static DataSource dataSource;
-    
-    static {
-        try {
-            dataSource = SJDataSourceFactory.createShardingDataSource();
-        } catch (final SQLException ignore) {
-        }
-    }
-    
-    /**
-     * run test.
-     * @param javaSamplerContext context
-     * @return res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
-        
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SJShardingWrite");
-        results.sampleStart();
-        try {
-            SJDataSourceUtil.writeOp(dataSource);
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingDelete.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingDelete.java
deleted file mode 100644
index bb9c64d..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingDelete.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- *  delete performance for Sharding-Proxy according to different yaml configuration.
- * @author nancyzrh
- */
-public class SPShardingDelete extends AbstractJavaSamplerClient {
-    private static final String DELETE_STMT = ShardingPerfStmt.DELETE_STMT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingDelete");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.deleteIou(DELETE_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingFullRouteSelect.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingFullRouteSelect.java
deleted file mode 100644
index 3ddd101..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingFullRouteSelect.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- *  full route select performance for Sharding-Proxy according to different yaml configuration.
- * @author nancyzrh
- */
-public class SPShardingFullRouteSelect extends AbstractJavaSamplerClient {
-    private static final String FULL_ROUTE_SELECT_STMT = ShardingPerfStmt.FULL_ROUTE_SELECT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingFullRouteSelect");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.getIou(FULL_ROUTE_SELECT_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingInsert.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingInsert.java
deleted file mode 100644
index a98487f..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingInsert.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- *  insert performance for Sharding-Proxy according to different yaml configuration.
- * @author nancyzrh
- */
-public class SPShardingInsert extends AbstractJavaSamplerClient {
-    private static final String INSERT_STMT = ShardingPerfStmt.INSERT_STMT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingInsert");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.insertIou(INSERT_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSelect.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSelect.java
deleted file mode 100644
index c1ecb1e..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSelect.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- * select performance for Sharding-Proxy according to different yaml configuration.
- * @author nancyzrh
- */
-public class SPShardingSelect extends AbstractJavaSamplerClient {
-    private static final String SELECT_STMT = ShardingPerfStmt.SELECT_STMT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingSelect");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.getIou(SELECT_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSingleRouteSelect.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSingleRouteSelect.java
deleted file mode 100644
index 37e101e..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingSingleRouteSelect.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- *  single route select performance for Sharding-Proxy according to different yaml configuration.
- */
-public class SPShardingSingleRouteSelect extends AbstractJavaSamplerClient {
-    private static final String SINGLE_ROUTE_SELECT_STMT = ShardingPerfStmt.SINGLE_ROUTE_SELECT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingSingleRouteSelect");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.getIou(SINGLE_ROUTE_SELECT_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingUpdate.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingUpdate.java
deleted file mode 100644
index 52cd848..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingUpdate.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import perfstmt.ShardingPerfStmt;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- *  update performance for Sharding-Proxy according to different yaml configuration.
- * @author nancyzrh
- */
-public class SPShardingUpdate extends AbstractJavaSamplerClient {
-    private static final String UPDATE_STMT = ShardingPerfStmt.UPDATE_STMT.getValue();
-    
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingUpdate");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.updateStmt(UPDATE_STMT, "sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
-
diff --git a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingWrite.java b/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingWrite.java
deleted file mode 100644
index aa5cab9..0000000
--- a/shardingsphere-benchmark/src/main/java/shardingproxy/perf/sharding/SPShardingWrite.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package shardingproxy.perf.sharding;
-
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
-import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
-import org.apache.jmeter.samplers.SampleResult;
-import service.util.config.SPDataSourceUtil;
-
-import java.sql.SQLException;
-
-/**
- * Insert+Update+Delete operation performance for Sharding-Proxy according to different yaml configuration.
- */
-public class SPShardingWrite extends AbstractJavaSamplerClient {
-    static {
-        SPDataSourceUtil.createDataSource("###", "sharding_db", "###", 3307, "###");
-    }
-    
-    /**
-     * get default params.
-     * @return null
-     */
-    @Override
-    public Arguments getDefaultParameters() {
-        return null;
-    }
-    
-    /**
-     * setup.
-     * @param context context
-     */
-    @Override
-    public void setupTest(JavaSamplerContext context) {
-    }
-    
-    /**
-     * run test.
-     * @param context context
-     * @return sample res
-     */
-    @Override
-    public SampleResult runTest(JavaSamplerContext context) {
-        SampleResult results = new SampleResult();
-        results.setSampleLabel("SPShardingWrite");
-        results.sampleStart();
-        try {
-            SPDataSourceUtil.writeOp("sharding_db");
-        } catch (SQLException ex) {
-            results.setSuccessful(false);
-            return results;
-        } finally {
-            results.sampleEnd();
-        }
-        results.setSuccessful(true);
-        return results;
-    }
-}
diff --git a/shardingsphere-benchmark/src/main/resources/checkstyle.xml b/shardingsphere-benchmark/src/main/resources/checkstyle.xml
index 25964ac..afd6f27 100644
--- a/shardingsphere-benchmark/src/main/resources/checkstyle.xml
+++ b/shardingsphere-benchmark/src/main/resources/checkstyle.xml
@@ -22,7 +22,6 @@
     <property name="severity" value="warning"/>
     <property name="fileExtensions" value="java, properties, xml"/>
     <module name="Header">
-        <property name="headerFile" value="copyright.txt"/>
         <property name="fileExtensions" value="java"/>
     </module>
     <module name="FileTabCharacter">
@@ -35,9 +34,9 @@
     <module name="Translation"/>
     <module name="UniqueProperties"/>
     <module name="SeverityMatchFilter"/>
-    
+
     <module name="TreeWalker">
-        
+
         <!-- Naming Conventions -->
         <module name="PackageName">
             <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
@@ -57,7 +56,7 @@
         <module name="AbbreviationAsWordInName">
             <property name="allowedAbbreviationLength" value="6"/>
         </module>
-        
+
         <!-- Size Violations -->
         <module name="AnonInnerLength"/>
         <module name="MethodLength"/>
@@ -114,7 +113,7 @@
             <property name="allowMultipleEmptyLines" value="false"/>
             <property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
         </module>
-        
+
         <!-- Imports -->
         <module name="AvoidStarImport"/>
         <module name="AvoidStaticImport">
@@ -124,7 +123,7 @@
         <module name="RedundantImport"/>
         <module name="UnusedImports"/>
         <module name="CustomImportOrder"/>
-        
+
         <!-- Annotations -->
         <module name="AnnotationLocation">
             <property name="id" value="AnnotationLocationMostCases"/>
@@ -144,7 +143,7 @@
         <!-- Modifiers -->
         <module name="ModifierOrder"/>
         <module name="RedundantModifier"/>
-        
+
         <!-- Coding -->
         <module name="ArrayTrailingComma"/>
         <module name="CovariantEquals"/>
@@ -185,7 +184,7 @@
         <module name="StringLiteralEquality"/>
         <module name="UnnecessaryParentheses"/>
         <module name="VariableDeclarationUsageDistance"/>
-        
+
         <!-- Block Checks -->
         <module name="EmptyBlock"/>
         <module name="EmptyCatchBlock">
@@ -195,7 +194,7 @@
         <module name="NeedBraces"/>
         <module name="LeftCurly"/>
         <module name="RightCurly"/>
-        
+
         <!-- Class Design -->
         <module name="DesignForExtension"/>
         <module name="FinalClass"/>
@@ -207,7 +206,7 @@
         <module name="VisibilityModifier"/>
         <module name="MutableException"/>
         <module name="ThrowsCount"/>
-        
+
         <!-- Metrics -->
         <module name="BooleanExpressionComplexity"/>
         <module name="ClassDataAbstractionCoupling">
@@ -217,7 +216,7 @@
         <module name="CyclomaticComplexity"/>
         <module name="NPathComplexity"/>
         <module name="JavaNCSS"/>
-        
+
         <!-- Miscellaneous -->
         <module name="ArrayTypeStyle"/>
         <module name="UpperEll"/>
@@ -231,10 +230,10 @@
         <module name="UncommentedMain">
             <property name="excludedClasses" value="\.Bootstrap"/>
         </module>
-        
+
         <!-- Javadoc Comments -->
         <module name="AtclauseOrder">
-            <property name="tagOrder" value="@author, @param, @return, @throws, @deprecated"/>
+            <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
         </module>
         <module name="NonEmptyAtclauseDescription"/>
         <module name="JavadocParagraph"/>
@@ -253,9 +252,9 @@
             <property name="ignoreMethodNamesRegex" value="^assert.*$|^verify.*$"/>
             <property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF"/>
         </module>
-        
+
         <!-- Filters -->
         <module name="SuppressionCommentFilter"/>
         <module name="SuppressWithNearbyCommentFilter"/>
     </module>
-</module>
+</module>
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/benchmark-result.properties b/shardingsphere-benchmark/src/main/resources/config/benchmark-result.properties
new file mode 100644
index 0000000..a0adba0
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/benchmark-result.properties
@@ -0,0 +1,74 @@
+ss.benchmark.shardingjdbc.rangerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-select-result.jtl
+ss.benchmark.jdbc.singlerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/jdbc-singlerouting-encrypt-select-result.jtl
+ss.benchmark.proxy.rangerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/proxy-rangerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.singlerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.proxy.fullrouting.masterslave.select.result=/export/shardingsphere-benchmark/result/fullrouting/masterslave/proxy-fullrouting-masterslave-select-result.jtl
+ss.benchmark.jdbc.fullrouting.encrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/jdbc-fullrouting-select-result.jtl
+ss.benchmark.proxy.fullrouting.encrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/proxy-fullrouting-encrypt-select-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.sharding.select.result=/export/shardingsphere-benchmark/result/singlerouting/sharding/shardingjdbc-singlerouting-sharding-select-result.jtl
+ss.benchmark.jdbc.fullrouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.encrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-select-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-select-result.jtl
+ss.benchmark.proxy.singlerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-select-result.jtl
+ss.benchmark.proxy.rangerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/masterslave/proxy-rangerouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-result.jtl
+ss.benchmark.jdbc.fullrouting.masterslave.select.result=/export/shardingsphere-benchmark/result/fullrouting/jdbc-fullrouting-select-result.jtl
+ss.benchmark.excel.result=/export/shardingsphere-benchmark/result/ss-benchmark.xls
+ss.benchmark.proxy.fullrouting.sharding.select.result=/export/shardingsphere-benchmark/result/fullrouting/sharding/proxy-fullrouting-sharding-select-result.jtl
+ss.benchmark.jdbc.fullrouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/jdbc-fullrouting-select-result.jtl
+ss.benchmark.proxy.fullrouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.rangerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/proxy-rangerouting-encrypt-select-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.sharding.select.result=/export/shardingsphere-benchmark/result/rangerouting/sharding/shardingjdbc-rangerouting-sharding-select-result.jtl
+ss.benchmark.jdbc.rangerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/jdbc-rangerouting-encrypt-select-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/sharding/shardingjdbc-rangerouting-sharding-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.rangerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.fullrouting.sharding.select.result=/export/shardingsphere-benchmark/result/fullrouting/jdbc-fullrouting-select-result.jtl
+ss.benchmark.jdbc.singlerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.rangerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.rangerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-select-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-select-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.fullrouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/sharding/jdbc-fullrouting-sharding-insertupdatedelete-result.jtl
+ss.benchmark.proxy.fullrouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/masterslave/proxy-fullrouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.singlerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-insertupdatedelete-result.jtl
+ss.benchmark.proxy.rangerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.singlerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/singlerouting/masterslave/proxy-singlerouting-masterslave-select-result.jtl
+ss.benchmark.jdbc.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.rangerouting.sharding.select.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-select-result.jtl
+ss.benchmark.proxy.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.rangerouting.sharding.select.result=/export/shardingsphere-benchmark/result/rangerouting/sharding/proxy-rangerouting-sharding-select-result.jtl
+ss.benchmark.proxy.singlerouting.sharding.select.result=/export/shardingsphere-benchmark/result/singlerouting/sharding/proxy-singlerouting-sharding-select-result.jtl
+ss.benchmark.proxy.fullrouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/encrypt/proxy-fullrouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/sharding/shardingjdbc-fullrouting-sharding-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.masterslave.select.result=/export/shardingsphere-benchmark/result/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-select-result.jtl
+ss.benchmark.proxy.singlerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/proxy-singlerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.singlerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.rangerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-select-result.jtl
+ss.benchmark.jdbc.rangerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-select-result.jtl
+ss.benchmark.jdbc.rangerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.singlerouting.sharding.select.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-select-result.jtl
+ss.benchmark.proxy.rangerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/rangerouting/masterslave/proxy-rangerouting-masterslave-select-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-result.jtl
+ss.benchmark.proxy.fullrouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-select-result.jtl
+ss.benchmark.shardingjdbc.rangerouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.singlerouting.encrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-result.jtl
+ss.benchmark.proxy.fullrouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-result.jtl
+ss.benchmark.proxy.singlerouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/masterslave/proxy-singlerouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.fullrouting.sharding.select.result=/export/shardingsphere-benchmark/result/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-result.jtl
+ss.benchmark.avg.excel.result=/export/shardingsphere-benchmark/result/ss-benchmark-avg.xls
+ss.benchmark.proxy.singlerouting.encrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/encrypt/proxy-singlerouting-encrypt-select-result.jtl
+ss.benchmark.jdbc.fullrouting.shardingmasterslaveencrypt.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/jdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.singlerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-select-result.jtl
+ss.benchmark.jdbc.singlerouting.masterslave.select.result=/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-select-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.sharding.insertupdatedelete.result=/export/shardingsphere-benchmark/result/singlerouting/sharding/shardingjdbc-singlerouting-sharding-insertupdatedelete-result.jtl
+ss.benchmark.jdbc.fullrouting.masterslave.insertupdatedelete.result=/export/shardingsphere-benchmark/result/fullrouting/masterslave/jdbc-fullrouting-masterslave-insertupdatedelete-result.jtl
+ss.benchmark.shardingjdbc.singlerouting.shardingmasterslaveencrypt.select.result=/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-select-result.jtl
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/benchmark-version.properties b/shardingsphere-benchmark/src/main/resources/config/benchmark-version.properties
new file mode 100644
index 0000000..2cb21f5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/benchmark-version.properties
@@ -0,0 +1 @@
+ss.benchmark.version=5.0
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/benchmark.sql b/shardingsphere-benchmark/src/main/resources/config/benchmark.sql
new file mode 100644
index 0000000..e241236
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/benchmark.sql
@@ -0,0 +1,5 @@
+CREATE DATABASE IF NOT EXISTS default_database;
+CREATE TABLE IF NOT EXISTS  `default_table` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_index` (`k`), KEY `c_index` (`c`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+CREATE DATABASE IF NOT EXISTS benchmark_result;
+CREATE TABLE IF NOT EXISTS  `benchmark_result` (`id` int(11) NOT NULL AUTO_INCREMENT, `product` varchar(200) DEFAULT NULL, `version` varchar(100) DEFAULT NULL, `scenario` varchar(200) DEFAULT NULL, `rules` varchar(200) DEFAULT NULL, `tps` double(16,3) DEFAULT NULL, `total` int(11) DEFAULT NULL, `TP50th` double(16,3) DEFAULT NULL, `TP90th` double(16,3) DEFAULT NULL, `TP95th` double(16,3) DEFAULT NULL, `maxCost` double(16,3) DEFAULT NULL, `minCost` double(16,3) DEFAULT NULL, `dbsql` varchar(2048) DEFAULT NULL, `dboperation` varchar(2048) DEFAULT NULL, `concurrency` int(11) DEFAULT NULL, `updatetime` bigint(20) DEFAULT NULL, `tableshardingcount` int(11) DEFAULT NULL, `dbshardingcount` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
+CREATE TABLE IF NOT EXISTS  `benchmark_avg_result` (`id` int(11) NOT NULL AUTO_INCREMENT, `product` varchar(200) DEFAULT NULL, `version` varchar(100) DEFAULT NULL, `scenario` varchar(200) DEFAULT NULL, `rules` varchar(200) DEFAULT NULL, `avg_tps` double(16,3) DEFAULT NULL, `total` int(11) DEFAULT NULL, `TP50th` double(16,3) DEFAULT NULL, `TP90th` double(16,3) DEFAULT NULL, `TP95th` double(16,3) DEFAULT NULL, `maxCost` double(16,3) DEFAULT NULL, `minCost` double(16,3) DEFAULT NULL, `dbsql` varchar(2048) DEFAULT NULL, `dboperation` varchar(2048) DEFAULT NULL, `concurrency` int(11) DEFAULT NULL, `updatetime` bigint(20) DEFAULT NULL, `tableshardingcount` int(11) DEFAULT NULL, `dbshardingcount` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/dbconfig-common.properties b/shardingsphere-benchmark/src/main/resources/config/dbconfig-common.properties
new file mode 100644
index 0000000..3990d4f
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/dbconfig-common.properties
@@ -0,0 +1,99 @@
+ss.proxy.host=[proxy.machine.host]
+ss.proxy.port=[proxy port]
+ss.proxy.db.username=[mysql database username]
+ss.proxy.db.password=[mysql database password]
+ss.proxy.db.datasource=[proxy datasource]
+jdbc.benchmark.fullrouting.encrypt.ds0.host=[jdbc.fullrouting.encrypt.machine.host]
+jdbc.benchmark.fullrouting.encrypt.ds0.port=[mysql database port]
+jdbc.benchmark.fullrouting.encrypt.ds0.username=[mysql database username]
+jdbc.benchmark.fullrouting.encrypt.ds0.password=[mysql database password]
+jdbc.benchmark.fullrouting.encrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.fullrouting.masterslave.ds0.host=[jdbcfullrouting..masterslave.machine.host]
+jdbc.benchmark.fullrouting.masterslave.ds0.port=[mysql database port]
+jdbc.benchmark.fullrouting.masterslave.ds0.datasource=[mysql datasource]
+jdbc.benchmark.fullrouting.masterslave.ds0.username=[mysql database username]
+jdbc.benchmark.fullrouting.masterslave.ds0.password=[mysql database password]
+jdbc.benchmark.fullrouting.sharding.ds0.host=[jdbc.fullrouting.sharding.machine.host]
+jdbc.benchmark.fullrouting.sharding.ds0.port=[mysql database port]
+jdbc.benchmark.fullrouting.sharding.ds0.datasource=[mysql datasource]
+jdbc.benchmark.fullrouting.sharding.ds0.username=[mysql database username]
+jdbc.benchmark.fullrouting.sharding.ds0.password=[mysql database password]
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host=[jdbc.fullrouting.shardingmasterslaveencrypt.machine.host]
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port=[mysql database port]
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username=[mysql database username]
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password=[mysql database password]
+jdbc.benchmark.rangerouting.encrypt.ds0.host=[jdbc.rangerouting.encrypt.host]
+jdbc.benchmark.rangerouting.encrypt.ds0.port=[mysql database port]
+jdbc.benchmark.rangerouting.encrypt.ds0.username=[mysql database username]
+jdbc.benchmark.rangerouting.encrypt.ds0.password=[mysql database password]
+jdbc.benchmark.rangerouting.encrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.rangerouting.masterslave.ds0.host=[jdbc.rangerouting.masterslave.host]
+jdbc.benchmark.rangerouting.masterslave.ds0.port=[mysql database port]
+jdbc.benchmark.rangerouting.masterslave.ds0.datasource=[mysql datasource]
+jdbc.benchmark.rangerouting.masterslave.ds0.username=[mysql database username]
+jdbc.benchmark.rangerouting.masterslave.ds0.password=[mysql database password]
+jdbc.benchmark.rangerouting.sharding.ds0.host=[jdbc.rangerouting.sharding.host]
+jdbc.benchmark.rangerouting.sharding.ds0.port=[mysql database port]
+jdbc.benchmark.rangerouting.sharding.ds0.datasource=[mysql datasource]
+jdbc.benchmark.rangerouting.sharding.ds0.username=[mysql database username]
+jdbc.benchmark.rangerouting.sharding.ds0.password=[mysql database password]
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.host=[jdbc.rangerouting.shardingmasterslaveencrypt.host]
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.port=[mysql database port]
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.username=[mysql database username]
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.password=[mysql database password]
+jdbc.benchmark.singlerouting.encrypt.ds0.host=[jdbc.singlerouting.encrypt.host]
+jdbc.benchmark.singlerouting.encrypt.ds0.port=[mysql database port]
+jdbc.benchmark.singlerouting.encrypt.ds0.username=[mysql database username]
+jdbc.benchmark.singlerouting.encrypt.ds0.password=[mysql database password]
+jdbc.benchmark.singlerouting.encrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.singlerouting.masterslave.ds0.host=[jdbc.singlerouting.masterslave.host]
+jdbc.benchmark.singlerouting.masterslave.ds0.port=[mysql database port]
+jdbc.benchmark.singlerouting.masterslave.ds0.datasource=[mysql datasource]
+jdbc.benchmark.singlerouting.masterslave.ds0.username=[mysql database username]
+jdbc.benchmark.singlerouting.masterslave.ds0.password=[mysql database password]
+jdbc.benchmark.singlerouting.sharding.ds0.host=[jdbc.singlerouting.sharding.host]
+jdbc.benchmark.singlerouting.sharding.ds0.port=[mysql database port]
+jdbc.benchmark.singlerouting.sharding.ds0.datasource=[mysql datasource]
+jdbc.benchmark.singlerouting.sharding.ds0.username=[mysql database username]
+jdbc.benchmark.singlerouting.sharding.ds0.password=[mysql database password]
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.host=[jdbc.singlerouting.shardingmasterslaveencrypt.host]
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.datasource=[mysql datasource]
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.port=[mysql database port]
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.username=[mysql database username]
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.password=[mysql database password]
+fullrouting.jdbc.db.host=fullrouting.benchmark.db.jdbc
+fullrouting.jdbc.db.port=[mysql database port]
+fullrouting.jdbc.db.username=[mysql database username]
+fullrouting.jdbc.db.password=[mysql database password]
+fullrouting.jdbc.db.datasource=[mysql datasource]
+fullrouting.jdbc.db.table=sbtest3
+singlerouting.jdbc.db.host=singlerouting.benchmark.db.jdbc
+singlerouting.jdbc.db.port=[mysql database port]
+singlerouting.jdbc.db.username=[mysql database username]
+singlerouting.jdbc.db.password=[mysql database password]
+singlerouting.jdbc.db.datasource=[mysql datasource]
+singlerouting.jdbc.db.table=sbtest3
+rangerouting.jdbc.db.host=rangerouting.benchmark.db.jdbc
+rangerouting.jdbc.db.port=[mysql database port]
+rangerouting.jdbc.db.username=[mysql database username]
+rangerouting.jdbc.db.password=[mysql database password]
+rangerouting.jdbc.db.datasource=[mysql datasource]
+benchmark.table.count=[table count of sharding]
+rangerouting.jdbc.db.table=sbtest3
+common.jdbc.maximumpoolsize=200
+common.jdbc.connectiontimeout=30000
+common.jdbc.idletimeout=60000
+common.jdbc.maxlifetime=1800000
+common.jdbc.useserverprepstmts=true
+common.jdbc.cacheprepstmts=true
+common.jdbc.prepstmtcachesize=250
+common.jdbc.prepstmtcachesqllimit=2048
+common.jdbc.uselocalsessionstate=true
+common.jdbc.rewritebatchedstatements=true
+common.jdbc.cacheresultsetmetadata=true
+common.jdbc.cacheserverconfiguration=true
+common.jdbc.elidesetautocommits=true
+common.jdbc.maintaintimestats=false
+common.jdbc.nettimeoutforstreamingresults=0
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/dbconfig.properties b/shardingsphere-benchmark/src/main/resources/config/dbconfig.properties
new file mode 100644
index 0000000..5a7a77d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/dbconfig.properties
@@ -0,0 +1,111 @@
+ss.proxy.host=ss.benchmark.proxy.machine
+ss.proxy.port=3307
+ss.proxy.db.username=root
+ss.proxy.db.password=root
+ss.proxy.db.datasource=sharding_db
+jdbc.benchmark.fullrouting.encrypt.ds0.host=jdbc.benchmark.fullrouting.encrypt.ds0
+jdbc.benchmark.fullrouting.encrypt.ds0.port=3306
+jdbc.benchmark.fullrouting.encrypt.ds0.username=root
+jdbc.benchmark.fullrouting.encrypt.ds0.password=
+jdbc.benchmark.fullrouting.encrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.fullrouting.masterslave.ds0.host=jdbc.benchmark.fullrouting.masterslave.ds0
+jdbc.benchmark.fullrouting.masterslave.ds0.port=3306
+jdbc.benchmark.fullrouting.masterslave.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.fullrouting.masterslave.ds0.username=root
+jdbc.benchmark.fullrouting.masterslave.ds0.password=
+jdbc.benchmark.fullrouting.sharding.ds0.host=jdbc.benchmark.fullrouting.sharding.ds0
+jdbc.benchmark.fullrouting.sharding.ds0.port=3306
+jdbc.benchmark.fullrouting.sharding.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.fullrouting.sharding.ds0.username=root
+jdbc.benchmark.fullrouting.sharding.ds0.password=
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.host=jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.port=3306
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.username=root
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0.password=
+jdbc.benchmark.rangerouting.encrypt.ds0.host=jdbc.benchmark.rangerouting.encrypt.ds0
+jdbc.benchmark.rangerouting.encrypt.ds0.port=3306
+jdbc.benchmark.rangerouting.encrypt.ds0.username=root
+jdbc.benchmark.rangerouting.encrypt.ds0.password=
+jdbc.benchmark.rangerouting.encrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.rangerouting.masterslave.ds0.host=jdbc.benchmark.rangerouting.masterslave.ds0
+jdbc.benchmark.rangerouting.masterslave.ds0.port=3306
+jdbc.benchmark.rangerouting.masterslave.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.rangerouting.masterslave.ds0.username=root
+jdbc.benchmark.rangerouting.masterslave.ds0.password=
+jdbc.benchmark.rangerouting.sharding.ds0.host=jdbc.benchmark.rangerouting.sharding.ds0
+jdbc.benchmark.rangerouting.sharding.ds0.port=3306
+jdbc.benchmark.rangerouting.sharding.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.rangerouting.sharding.ds0.username=root
+jdbc.benchmark.rangerouting.sharding.ds0.password=
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.host=jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.port=3306
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.username=root
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0.password=
+jdbc.benchmark.singlerouting.encrypt.ds0.host=jdbc.benchmark.singlerouting.encrypt.ds0
+jdbc.benchmark.singlerouting.encrypt.ds0.port=3306
+jdbc.benchmark.singlerouting.encrypt.ds0.username=root
+jdbc.benchmark.singlerouting.encrypt.ds0.password=
+jdbc.benchmark.singlerouting.encrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.singlerouting.masterslave.ds0.host=jdbc.benchmark.singlerouting.masterslave.ds0
+jdbc.benchmark.singlerouting.masterslave.ds0.port=3306
+jdbc.benchmark.singlerouting.masterslave.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.singlerouting.masterslave.ds0.username=root
+jdbc.benchmark.singlerouting.masterslave.ds0.password=
+jdbc.benchmark.singlerouting.sharding.ds0.host=jdbc.benchmark.singlerouting.sharding.ds0
+jdbc.benchmark.singlerouting.sharding.ds0.port=3306
+jdbc.benchmark.singlerouting.sharding.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.singlerouting.sharding.ds0.username=root
+jdbc.benchmark.singlerouting.sharding.ds0.password=
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.host=jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.datasource=shardingsphere_benchmark
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.port=3306
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.username=root
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0.password=
+fullrouting.jdbc.db.host=fullrouting.benchmark.db.jdbc
+fullrouting.jdbc.db.port=3306
+fullrouting.jdbc.db.username=root
+fullrouting.jdbc.db.password=
+fullrouting.jdbc.db.datasource=shardingsphere_benchmark
+fullrouting.jdbc.db.table=sbtest3
+singlerouting.jdbc.db.host=singlerouting.benchmark.db.jdbc
+singlerouting.jdbc.db.port=3306
+singlerouting.jdbc.db.username=root
+singlerouting.jdbc.db.password=
+singlerouting.jdbc.db.datasource=shardingsphere_benchmark
+singlerouting.jdbc.db.table=sbtest3
+rangerouting.jdbc.db.host=rangerouting.benchmark.db.jdbc
+rangerouting.jdbc.db.port=3306
+rangerouting.jdbc.db.username=root
+rangerouting.jdbc.db.password=
+rangerouting.jdbc.db.datasource=shardingsphere_benchmark
+rangerouting.jdbc.db.table=sbtest3
+common.jdbc.maximumpoolsize=200
+common.jdbc.connectiontimeout=30000
+common.jdbc.idletimeout=60000
+common.jdbc.maxlifetime=1800000
+common.jdbc.useserverprepstmts=true
+common.jdbc.cacheprepstmts=true
+common.jdbc.prepstmtcachesize=250
+common.jdbc.prepstmtcachesqllimit=2048
+common.jdbc.uselocalsessionstate=true
+common.jdbc.rewritebatchedstatements=true
+common.jdbc.cacheresultsetmetadata=true
+common.jdbc.cacheserverconfiguration=true
+common.jdbc.elidesetautocommits=true
+common.jdbc.maintaintimestats=false
+common.jdbc.nettimeoutforstreamingresults=0
+benchmark.result.host=ss.benchmark.result
+benchmark.result.port=3306
+benchmark.result.username=root
+benchmark.result.password=
+benchmark.result.datasource=benchmark_result
+benchmark.avg.result.datasource=benchmark_avg_result
+benchmark.smallsharding.table.count=2
+benchmark.init.db1.host=ss.benchmark.fullrouting.encrypt.ds0
+benchmark.init.db2.host=ss.benchmark.fullrouting.encrypt.ds1
+benchmark.init.db3.host=ss.benchmark.fullrouting.encrypt.ds2
+benchmark.init.db4.host=ss.benchmark.fullrouting.encrypt.ds3
+benchmark.init.db.database.name=shardingsphere_benchmark
+benchmark.init.db.table.name=sbtest
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/shardingsphere_benchmark_machline_hosts b/shardingsphere-benchmark/src/main/resources/config/shardingsphere_benchmark_machline_hosts
new file mode 100644
index 0000000..63151c1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/shardingsphere_benchmark_machline_hosts
@@ -0,0 +1,137 @@
+127.0.0.1 ss.benchmark.proxy.machine
+127.0.0.1 ss.benchmark.performance.machine
+
+127.0.0.1 ss.benchmark.fullrouting.encrypt.ds0
+127.0.0.1 ss.benchmark.fullrouting.encrypt.ds1
+127.0.0.1 ss.benchmark.fullrouting.encrypt.ds2
+127.0.0.1 ss.benchmark.fullrouting.encrypt.ds3
+127.0.0.1 jdbc.benchmark.fullrouting.encrypt.ds0
+127.0.0.1 jdbc.benchmark.fullrouting.encrypt.ds1
+127.0.0.1 jdbc.benchmark.fullrouting.encrypt.ds2
+127.0.0.1 jdbc.benchmark.fullrouting.encrypt.ds3
+127.0.0.1 ss.benchmark.fullrouting.masterslave.master.ds0
+127.0.0.1 ss.benchmark.fullrouting.masterslave.master.ds1
+127.0.0.1 ss.benchmark.fullrouting.masterslave.master.ds2
+127.0.0.1 ss.benchmark.fullrouting.masterslave.master.ds3
+127.0.0.1 ss.benchmark.fullrouting.masterslave.slave.ds0
+127.0.0.1 ss.benchmark.fullrouting.masterslave.slave.ds1
+127.0.0.1 ss.benchmark.fullrouting.masterslave.slave.ds2
+127.0.0.1 ss.benchmark.fullrouting.masterslave.slave.ds3
+127.0.0.1 jdbc.benchmark.fullrouting.masterslave.ds0
+
+127.0.0.1 jdbc.benchmark.fullrouting.masterslave.ds1
+127.0.0.1 jdbc.benchmark.fullrouting.masterslave.ds2
+127.0.0.1 jdbc.benchmark.fullrouting.masterslave.ds3
+127.0.0.1 ss.benchmark.fullrouting.sharding.ds0
+127.0.0.1 ss.benchmark.fullrouting.sharding.ds1
+127.0.0.1 ss.benchmark.fullrouting.sharding.ds2
+127.0.0.1 ss.benchmark.fullrouting.sharding.ds3
+127.0.0.1 jdbc.benchmark.fullrouting.sharding.ds0
+127.0.0.1 jdbc.benchmark.fullrouting.sharding.ds1
+127.0.0.1 jdbc.benchmark.fullrouting.sharding.ds2
+127.0.0.1 jdbc.benchmark.fullrouting.sharding.ds3
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2
+127.0.0.1 ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3
+
+127.0.0.1 jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds0
+127.0.0.1 jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds1
+127.0.0.1 jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds2
+127.0.0.1 jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.ds3
+
+127.0.0.1 ss.benchmark.rangerouting.encrypt.ds0
+127.0.0.1 ss.benchmark.rangerouting.encrypt.ds1
+127.0.0.1 ss.benchmark.rangerouting.encrypt.ds2
+127.0.0.1 ss.benchmark.rangerouting.encrypt.ds3
+127.0.0.1 jdbc.benchmark.rangerouting.encrypt.ds0
+127.0.0.1 jdbc.benchmark.rangerouting.encrypt.ds1
+127.0.0.1 jdbc.benchmark.rangerouting.encrypt.ds2
+127.0.0.1 jdbc.benchmark.rangerouting.encrypt.ds3
+127.0.0.1 ss.benchmark.rangerouting.masterslave.master.ds0
+127.0.0.1 ss.benchmark.rangerouting.masterslave.master.ds1
+127.0.0.1 ss.benchmark.rangerouting.masterslave.master.ds2
+127.0.0.1 ss.benchmark.rangerouting.masterslave.master.ds3
+127.0.0.1 ss.benchmark.rangerouting.masterslave.slave.ds0
+127.0.0.1 ss.benchmark.rangerouting.masterslave.slave.ds1
+127.0.0.1 ss.benchmark.rangerouting.masterslave.slave.ds2
+127.0.0.1 ss.benchmark.rangerouting.masterslave.slave.ds3
+
+127.0.0.1 jdbc.benchmark.rangerouting.masterslave.ds0
+127.0.0.1 jdbc.benchmark.rangerouting.masterslave.ds1
+127.0.0.1 jdbc.benchmark.rangerouting.masterslave.ds2
+127.0.0.1 jdbc.benchmark.rangerouting.masterslave.ds3
+127.0.0.1 ss.benchmark.rangerouting.sharding.ds0
+127.0.0.1 ss.benchmark.rangerouting.sharding.ds1
+127.0.0.1 ss.benchmark.rangerouting.sharding.ds2
+127.0.0.1 ss.benchmark.rangerouting.sharding.ds3
+127.0.0.1 jdbc.benchmark.rangerouting.sharding.ds0
+127.0.0.1 jdbc.benchmark.rangerouting.sharding.ds1
+127.0.0.1 jdbc.benchmark.rangerouting.sharding.ds2
+127.0.0.1 jdbc.benchmark.rangerouting.sharding.ds3
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds0
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds1
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds2
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds3
+
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds0
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds1
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds2
+127.0.0.1 ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds3
+
+
+127.0.0.1 jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds0
+127.0.0.1 jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds1
+127.0.0.1 jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds2
+127.0.0.1 jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.ds3
+
+127.0.0.1 ss.benchmark.singlerouting.encrypt.ds0
+127.0.0.1 ss.benchmark.singlerouting.encrypt.ds1
+127.0.0.1 ss.benchmark.singlerouting.encrypt.ds2
+127.0.0.1 ss.benchmark.singlerouting.encrypt.ds3
+127.0.0.1 jdbc.benchmark.singlerouting.encrypt.ds0
+127.0.0.1 jdbc.benchmark.singlerouting.encrypt.ds1
+127.0.0.1 jdbc.benchmark.singlerouting.encrypt.ds2
+127.0.0.1 jdbc.benchmark.singlerouting.encrypt.ds3
+127.0.0.1 ss.benchmark.singlerouting.masterslave.master.ds0
+127.0.0.1 ss.benchmark.singlerouting.masterslave.master.ds1
+127.0.0.1 ss.benchmark.singlerouting.masterslave.master.ds2
+127.0.0.1 ss.benchmark.singlerouting.masterslave.master.ds3
+
+127.0.0.1 ss.benchmark.singlerouting.masterslave.slave.ds0
+127.0.0.1 ss.benchmark.singlerouting.masterslave.slave.ds1
+127.0.0.1 ss.benchmark.singlerouting.masterslave.slave.ds2
+127.0.0.1 ss.benchmark.singlerouting.masterslave.slave.ds3
+
+127.0.0.1 jdbc.benchmark.singlerouting.masterslave.ds0
+127.0.0.1 jdbc.benchmark.singlerouting.masterslave.ds1
+127.0.0.1 jdbc.benchmark.singlerouting.masterslave.ds2
+127.0.0.1 jdbc.benchmark.singlerouting.masterslave.ds3
+127.0.0.1 ss.benchmark.singlerouting.sharding.ds0
+127.0.0.1 ss.benchmark.singlerouting.sharding.ds1
+127.0.0.1 ss.benchmark.singlerouting.sharding.ds2
+127.0.0.1 ss.benchmark.singlerouting.sharding.ds3
+127.0.0.1 jdbc.benchmark.singlerouting.sharding.ds0
+127.0.0.1 jdbc.benchmark.singlerouting.sharding.ds1
+127.0.0.1 jdbc.benchmark.singlerouting.sharding.ds2
+127.0.0.1 jdbc.benchmark.singlerouting.sharding.ds3
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds0
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds1
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds2
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds3
+
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds0
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds1
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds2
+127.0.0.1 ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds3
+
+127.0.0.1 jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds0
+127.0.0.1 jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds1
+127.0.0.1 jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds2
+127.0.0.1 jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.ds3
+
+127.0.0.1 ss.benchmark.result
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/sqlconfig.properties b/shardingsphere-benchmark/src/main/resources/config/sqlconfig.properties
new file mode 100644
index 0000000..32722ee
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/sqlconfig.properties
@@ -0,0 +1,264 @@
+common.jdbc.clear=truncate table sbtest3
+common.jdbc.insert.sql=insert into sbtest3 (k,c,pad) values (?,?,?)
+common.jdbc.insert.values=Int:1,String:c,String:pad
+common.ss.insert.sql=insert into sbtest (k,c,pad) values (?,?,?)
+common.ss.insert.values=Int:1,String:c,String:pad
+common.ss.clear=truncate table sbtest
+jdbc.benchmark.fullrouting.encrypt.delete.sql=delete from sbtest3 where pad=?
+jdbc.benchmark.fullrouting.encrypt.delete.values=String:abc
+jdbc.benchmark.fullrouting.encrypt.update.sql=update sbtest3 set c=? where pad like ?
+jdbc.benchmark.fullrouting.encrypt.update.values=String:c-update,String:pad%
+jdbc.benchmark.fullrouting.encrypt.insert.sql=update sbtest3 set c=? where pad=?
+jdbc.benchmark.fullrouting.encrypt.insert.values=String:update,String:abc
+jdbc.benchmark.fullrouting.encrypt.select.sql=select count(*) from sbtest3
+jdbc.benchmark.fullrouting.encrypt.select.values=String:c%
+ss.benchmark.fullrouting.encrypt.delete.sql=delete from sbtest where pad=?
+ss.benchmark.fullrouting.encrypt.delete.values=String:pad
+ss.benchmark.fullrouting.encrypt.update.sql=update sbtest set c=? where pad like ?
+ss.benchmark.fullrouting.encrypt.update.values=String:c-update,String:pad%
+ss.benchmark.fullrouting.encrypt.select.sql=select count(*) from sbtest
+ss.benchmark.fullrouting.encrypt.select.values=String:c%
+ss.benchmark.fullrouting.encrypt.insert.sql=insert into sbtest (k,c,pad) VALUES (?,?,?)
+ss.benchmark.fullrouting.encrypt.insert.values=Int:1,String:c,String:pad
+jdbc.benchmark.fullrouting.masterslave.delete.sql=delete from sbtest3 where c=?
+jdbc.benchmark.fullrouting.masterslave.delete.values=String:abc
+jdbc.benchmark.fullrouting.masterslave.update.sql=update sbtest3 set pad=? where c like ?
+jdbc.benchmark.fullrouting.masterslave.update.values=String:pad-update,String:c%
+jdbc.benchmark.fullrouting.masterslave.select.sql=select count(*) from sbtest3
+jdbc.benchmark.fullrouting.masterslave.select.values=String:c%
+ss.benchmark.fullrouting.masterslave.delete.sql=delete from sbtest where c=?
+ss.benchmark.fullrouting.masterslave.delete.values=String:c2
+ss.benchmark.fullrouting.masterslave.update.sql=update sbtest set pad=? where c like ?
+ss.benchmark.fullrouting.masterslave.update.values=String:pad-update,String:c%
+ss.benchmark.fullrouting.masterslave.select.sql=select count(*) from sbtest
+ss.benchmark.fullrouting.masterslave.select.values=String:c%
+jdbc.benchmark.fullrouting.sharding.delete.sql=delete from sbtest3 where c=?
+jdbc.benchmark.fullrouting.sharding.delete.values=String:abc
+jdbc.benchmark.fullrouting.sharding.update.sql=update sbtest3 set pad=? where c like ?
+jdbc.benchmark.fullrouting.sharding.update.values=String:pad-update,String:c%
+jdbc.benchmark.fullrouting.sharding.select.sql=select count(*) from sbtest3
+jdbc.benchmark.fullrouting.sharding.select.values=String:c%
+ss.benchmark.fullrouting.sharding.delete.sql=delete from sbtest where c=?
+ss.benchmark.fullrouting.sharding.delete.values=String:c2
+ss.benchmark.fullrouting.sharding.update.sql=update sbtest set pad=? where c like ?
+ss.benchmark.fullrouting.sharding.update.values=String:pad-update,String:c%
+ss.benchmark.fullrouting.sharding.select.sql=select count(*) from sbtest
+ss.benchmark.fullrouting.sharding.select.values=String:c%
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest3 where c=?
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.delete.values=String:abc
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.update.sql=update sbtest3 set pad=? where c like ?
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.update.values=String:pad-update,String:c%
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest3
+jdbc.benchmark.fullrouting.shardingmasterslaveencrypt.select.values=String:c%
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest3 where c=?
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.delete.values=String:c2
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.sql=update sbtest set pad=? where c like ?
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.update.values=String:pad-update,String:c%
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest
+ss.benchmark.fullrouting.shardingmasterslaveencrypt.select.values=String:c%
+jdbc.benchmark.rangerouting.encrypt.delete.sql=delete from sbtest3 where c in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.encrypt.delete.values=String:c1,String:c2
+jdbc.benchmark.rangerouting.encrypt.update.sql=update sbtest3 set pad=? where c in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.encrypt.update.values=String:pad-update,String:c1,String:c2
+jdbc.benchmark.rangerouting.encrypt.select.sql=select count(*) from sbtest3 where c in(?,?,?) and id in (?,?,?)
+jdbc.benchmark.rangerouting.encrypt.select.values=String:c1,String:c2,String:c3,Int:1,Int:2,Int:3
+jdbc.benchmark.rangerouting.encrypt.insert.sql=insert into sbtest3 (k,c,pad) values(?,?,?),(?,?,?)
+jdbc.benchmark.rangerouting.encrypt.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.encrypt.delete.sql=delete from sbtest where c in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.encrypt.delete.values=String:c1,String:c2
+ss.benchmark.rangerouting.encrypt.update.sql=update sbtest set pad=? where c in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.encrypt.update.values=String:pad-update,String:c1,String:c2
+ss.benchmark.rangerouting.encrypt.insert.sql=insert into sbtest (k,c,pad) values(?,?,?),(?,?,?)
+ss.benchmark.rangerouting.encrypt.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.encrypt.select.sql=select count(*) from sbtest where c in(?,?,?) and id in (?,?,?)
+ss.benchmark.rangerouting.encrypt.select.values=String:c1,String:c2,String:c3,Int:1,Int:2,Int:3
+jdbc.benchmark.rangerouting.masterslave.delete.sql=delete from sbtest3 where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.masterslave.delete.values=Int:1,Int:2
+jdbc.benchmark.rangerouting.masterslave.update.sql=update sbtest3 set c=?, pad=? where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.masterslave.update.values=String:c-update,String:pad-update,Int:1,Int:2
+jdbc.benchmark.rangerouting.masterslave.select.sql=select count(*) from sbtest3 where k in (?,?) and id in (?,?)
+jdbc.benchmark.rangerouting.masterslave.select.values=Int:1,Int:2,Int:1,Int:2
+jdbc.benchmark.rangerouting.masterslave.insert.sql=insert into sbtest3 (k,c,pad) values(?,?,?),(?,?,?)
+jdbc.benchmark.rangerouting.masterslave.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.masterslave.delete.sql=delete from sbtest where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.masterslave.delete.values=Int:1,Int:2
+ss.benchmark.rangerouting.masterslave.update.sql=update sbtest set c=?, pad=? where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.masterslave.update.values=String:c-update,String:pad-update,Int:1,Int:2
+ss.benchmark.rangerouting.masterslave.select.sql=select count(*) from sbtest where k in (?,?) and id in (?,?)
+ss.benchmark.rangerouting.masterslave.select.values=Int:1,Int:2,Int:1,Int:2
+ss.benchmark.rangerouting.masterslave.insert.sql=insert into sbtest (k,c,pad) values(?,?,?),(?,?,?)
+ss.benchmark.rangerouting.masterslave.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+jdbc.benchmark.rangerouting.sharding.delete.sql=delete from sbtest3 where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.sharding.delete.values=Int:1,Int:2
+jdbc.benchmark.rangerouting.sharding.update.sql=update sbtest3 set c=?, pad=? where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.sharding.update.values=String:c-update,String:pad-update,Int:1,Int:2
+jdbc.benchmark.rangerouting.sharding.select.sql=select count(*) from sbtest3 where k in (?,?) and id in (?,?)
+jdbc.benchmark.rangerouting.sharding.select.values=Int:1,Int:2,Int:1,Int:2
+jdbc.benchmark.rangerouting.sharding.insert.sql=insert into sbtest3 (k,c,pad) values(?,?,?),(?,?,?)
+jdbc.benchmark.rangerouting.sharding.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.sharding.delete.sql=delete from sbtest where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.sharding.delete.values=Int:1,Int:2
+ss.benchmark.rangerouting.sharding.update.sql=update sbtest set c=?, pad=? where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.sharding.update.values=String:c-update,String:pad-update,Int:1,Int:2
+ss.benchmark.rangerouting.sharding.select.sql=select count(*) from sbtest where k in (?,?) and id in (?,?)
+ss.benchmark.rangerouting.sharding.select.values=Int:1,Int:2,Int:1,Int:2
+ss.benchmark.rangerouting.sharding.insert.sql=insert into sbtest (k,c,pad) values(?,?,?),(?,?,?)
+ss.benchmark.rangerouting.sharding.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.sharding.insert.single.sql=insert into sbtest (k,c,pad) values(?,?,?)
+ss.benchmark.rangerouting.sharding.insert.single.values=Int:1,String:c,String:pad
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest3 where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.delete.values=Int:1,Int:2
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql=update sbtest3 set c=?, pad=? where k in(?,?) and id in(?,?)
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.update.values=String:c-update,String:pad-update,Int:1,Int:2
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest3 where k in (?,?) and id in (?,?)
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.select.values=Int:1,Int:2,Int:1,Int:2
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql=insert into sbtest3 (k,c,pad) values(?,?,?),(?,?,?)
+jdbc.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.delete.values=Int:1,Int:2
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.sql=update sbtest set c=?, pad=? where k in(?,?) and id in(?,?)
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.update.values=String:c-update,String:pad-update,Int:1,Int:2
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest where k in (?,?) and id in (?,?)
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.select.values=Int:1,Int:2,Int:1,Int:2
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql=insert into sbtest (k,c,pad) values(?,?,?),(?,?,?)
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values=Int:1,String:c,String:pad,Int:2,String:c,String:pad
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.sql.single=insert into sbtest (k,c,pad) values(?,?,?)
+ss.benchmark.rangerouting.shardingmasterslaveencrypt.insert.values.single=Int:1,String:c,String:pad
+jdbc.benchmark.singlerouting.encrypt.delete.sql=delete from sbtest3 where k=? and c=? and id=?
+jdbc.benchmark.singlerouting.encrypt.delete.values=Int:1,String:c1
+jdbc.benchmark.singlerouting.encrypt.update.sql=update sbtest3 set pad=? where k=? and c=? and id=?
+jdbc.benchmark.singlerouting.encrypt.update.values=String:pad-update,Int:1,String:c1
+jdbc.benchmark.singlerouting.encrypt.select.sql=select count(*) from sbtest3 where k=? and c=? and id=?
+jdbc.benchmark.singlerouting.encrypt.select.values=Int:1,String:c101,Int:1
+jdbc.benchmark.singlerouting.encrypt.insert.sql=insert into sbtest3 (k,c,pad) VALUES (?,?,?)
+jdbc.benchmark.singlerouting.encrypt.insert.values=Int:1,String:c1,String:pad1
+ss.benchmark.singlerouting.encrypt.delete.sql=delete from sbtest where k=? and c=? and id=?
+ss.benchmark.singlerouting.encrypt.delete.values=Int:1,String:c1
+ss.benchmark.singlerouting.encrypt.update.sql=update sbtest set pad=? where k=? and c=? and id=?
+ss.benchmark.singlerouting.encrypt.update.values=String:pad-update,Int:1,String:c1
+ss.benchmark.singlerouting.encrypt.insert.sql=insert into sbtest (k,c,pad) VALUES (?,?,?)
+ss.benchmark.singlerouting.encrypt.insert.values=Int:1,String:c1,String:pad1
+ss.benchmark.singlerouting.encrypt.select.sql=select count(*) from sbtest where k=? and c=? and id=?
+ss.benchmark.singlerouting.encrypt.select.values=Int:1,String:c101,Int:1
+jdbc.benchmark.singlerouting.masterslave.delete.sql=delete from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.masterslave.delete.values=Int:1
+jdbc.benchmark.singlerouting.masterslave.update.sql=update sbtest3 set c=?, pad=? where k=? and id=?
+jdbc.benchmark.singlerouting.masterslave.update.values=String:c-update,String:pad-update,Int:1
+jdbc.benchmark.singlerouting.masterslave.select.sql=select count(*) from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.masterslave.select.values=Int:1,Int:1
+jdbc.benchmark.singlerouting.masterslave.insert.sql=insert into sbtest3 (k,c,pad) values (?,?,?)
+jdbc.benchmark.singlerouting.masterslave.insert.values=Int:1,String:c,String:pad
+ss.benchmark.singlerouting.masterslave.delete.sql=delete from sbtest where k=? and id=?
+ss.benchmark.singlerouting.masterslave.delete.values=Int:1
+ss.benchmark.singlerouting.masterslave.update.sql=update sbtest set c=?, pad=? where k=? and id=?
+ss.benchmark.singlerouting.masterslave.update.values=String:c-update,String:pad-update,Int:1
+ss.benchmark.singlerouting.masterslave.select.sql=select count(*) from sbtest where k=? and id=?
+ss.benchmark.singlerouting.masterslave.select.values=Int:1,Int:1
+ss.benchmark.singlerouting.masterslave.insert.sql=insert into sbtest (k,c,pad) values (?,?,?)
+ss.benchmark.singlerouting.masterslave.insert.values=Int:1,String:c,String:pad
+jdbc.benchmark.singlerouting.sharding.delete.sql=delete from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.sharding.delete.values=Int:3
+jdbc.benchmark.singlerouting.sharding.update.sql=update sbtest3 set c=?, pad=? where k=? and id=?
+jdbc.benchmark.singlerouting.sharding.update.values=String:c-update,String:pad-update,Int:1
+jdbc.benchmark.singlerouting.sharding.select.sql=select count(*) from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.sharding.select.values=Int:1,Int:1
+jdbc.benchmark.singlerouting.sharding.insert.sql=insert into sbtest3 (k,c,pad) VALUES (?,?,?)
+jdbc.benchmark.singlerouting.sharding.insert.values=Int:1,String:c,String:pad
+ss.benchmark.singlerouting.sharding.delete.sql=delete from sbtest where k=? and id=?
+ss.benchmark.singlerouting.sharding.delete.values=Int:1
+ss.benchmark.singlerouting.sharding.update.sql=update sbtest set c=?, pad=? where k=? and id=?
+ss.benchmark.singlerouting.sharding.update.values=String:c-update,String:pad-update,Int:1
+ss.benchmark.singlerouting.sharding.select.sql=select count(*) from sbtest where k=? and id=?
+ss.benchmark.singlerouting.sharding.select.values=Int:1,Int:1
+ss.benchmark.singlerouting.sharding.insert.sql=insert into sbtest (k,c,pad) VALUES (?,?,?)
+ss.benchmark.singlerouting.sharding.insert.values=Int:1,String:c,String:pad
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.delete.values=Int:1
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql=update sbtest3 set c=?, pad=? where k=? and id=?
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.update.values=String:c-update,String:pad-update,Int:1
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest3 where k=? and id=?
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.select.values=Int:1,Int:1
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql=insert into sbtest3 (k,c,pad) VALUES (?,?,?)
+jdbc.benchmark.singlerouting.shardingmasterslaveencrypt.insert.values=Int:1,String:c,String:pad
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.sql=delete from sbtest where k=? and id=?
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.delete.values=Int:1
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.sql=update sbtest set c=?, pad=? where k=? and id=?
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.update.values=String:c-update,String:pad-update,Int:1
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.sql=select count(*) from sbtest where k=? and id=?
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.select.values=Int:1,Int:1
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.sql=insert into sbtest (k,c,pad) VALUES (?,?,?)
+ss.benchmark.singlerouting.shardingmasterslaveencrypt.insert.values=Int:1,String:c,String:pad
+ss.benchmark.result.insert.sql=insert into benchmark_result (product,version,scenario,rules,tps,total,TP50th,TP90th,TP95th,maxCost,minCost,dbsql,dboperation,concurrency,updatetime,tableshardingcount,dbshardingcount) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+ss.benchmark.avg.result.insert.sql=insert into benchmark_avg_result (product,version,scenario,rules,avg_tps,total,TP50th,TP90th,TP95th,maxCost,minCost,dbsql,dboperation,concurrency,updatetime,tableshardingcount,dbshardingcount) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+ss.benchmark.result.fullrouting.encrypt.mysql.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.encrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.encrypt.proxy.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.mysql.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.shardingjdbc.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.proxy.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.mysql.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.shardingjdbc.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.proxy.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.mysql.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.proxy.select.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.encrypt.mysql.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.encrypt.shardingjdbc.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.encrypt.proxy.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.mysql.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.shardingjdbc.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.masterslave.proxy.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.mysql.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.shardingjdbc.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.sharding.proxy.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.mysql.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.shardingjdbc.insertupdatedelete.sql=select* from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.fullrouting.shardingmasterslaveencrypt.proxy.insertupdatedelete.sql=select * from benchmark_result where scenario='FullRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.mysql.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.proxy.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.mysql.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.shardingjdbc.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.proxy.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.mysql.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.shardingjdbc.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.proxy.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.mysql.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.proxy.select.sql=select * from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.encrypt.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.masterslave.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.sharding.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.rangerouting.shardingmasterslaveencrypt.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='RangeRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.mysql.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.proxy.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.mysql.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.shardingjdbc.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.proxy.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.mysql.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.shardingjdbc.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.proxy.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.mysql.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.shardingjdbc.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.proxy.select.sql=select * from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Select' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.encrypt.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.masterslave.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='MasterSlave' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.sharding.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.mysql.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='MYSQL' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.shardingjdbc.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingJDBC' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
+ss.benchmark.result.singlerouting.shardingmasterslaveencrypt.proxy.insertupdatedelete.sql=select *  from benchmark_result where scenario='SingleRouting' and rules='Sharding+Master+Slave+Encrypt' and product='ShardingProxy' and dboperation='Insert+Update+delete' and version=? and tableshardingcount=? and dbshardingcount=? and concurrency=?
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/config/user-config.properties b/shardingsphere-benchmark/src/main/resources/config/user-config.properties
new file mode 100644
index 0000000..0373804
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/config/user-config.properties
@@ -0,0 +1,32 @@
+shardingsphere.project.base.path=/export/jenkins/workspace/ShardingSphere-Benchmark-Deploy
+shardingsphere.benchmark.project.base.path=/export/benchmark/shardingsphere-benchmark
+shardingsphere.benchmark.performance.machine.jmx.base.path=/home/jenkins/apache-jmeter-4.0/shardingsphere_test_plan
+shardingsphere.benchmark.proxy.machine.proxy.dest.base.path=/home/jenkins
+shardingsphere.benchmark.proxy.machine.shell.base.path=/export/shardingsphere-benchmark/shell
+shardingsphere.benchmark.proxy.machine.yaml.base.path=/export/shardingsphere-benchmark/yaml_conf
+shardingsphere.benchmark.result.base.path=/export/shardingsphere-benchmark/result
+shardingsphere.sharding.db.count=3
+shardingsphere.sharding.table.count=10
+shardingsphere.benchmark.database.name=shardingsphere_benchmark
+shardingsphere.sharding.benchmark.table_name=sbtest
+shardingsphere.benchmark.database.port=3306
+shardingsphere.benchmark.database.username=root
+shardingsphere.benchmark.database.password=
+shardingsphere.benchmark.result.database.port=3306
+shardingsphere.benchmark.result.database.username=root
+shardingsphere.benchmark.result.database.password=
+shardingsphere.benchmark.database.machine.host.list=ss.benchmark.fullrouting.encrypt.ds0;ss.benchmark.fullrouting.encrypt.ds1;ss.benchmark.fullrouting.encrypt.ds2
+shardingsphere.benchmark.result.database.host=ss.benchmark.result
+shardingsphere.benchmark.result.datasource=benchmark_result
+shardingsphere.version=4.1.1
+shardingsphere.maximum.connection.count=200
+shardingsphere.minimum.connection.count=200
+shardingsphere.maximum.connection.count.for.each.query=2
+shardingsphere.jmeter.concurrency.count=10
+shardingsphere.jmeter.loop.count=1000
+shardingsphere.result.sample.amount=100,900
+shardingsphere.benchmark.result.excel.name=shardingsphere-benchmark.xls
+shardingsphere.benchmark.avg.result.excel.name=shardingsphere-benchmark-avg.xls
+
+
+
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/encrypt/fullrouting_encrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/encrypt/fullrouting_encrypt_deploy.sh
new file mode 100644
index 0000000..4b8f824
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/encrypt/fullrouting_encrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/encrypt/proxy/config-proxy-fullrouting-encrypt.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/masterslave/fullrouting_masterslave_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/masterslave/fullrouting_masterslave_deploy.sh
new file mode 100644
index 0000000..24a3529
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/masterslave/fullrouting_masterslave_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/masterslave/proxy/config-proxy-fullrouting-masterslave.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/sharding/fullrouting_sharding_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/sharding/fullrouting_sharding_deploy.sh
new file mode 100644
index 0000000..3348d1e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/sharding/fullrouting_sharding_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/sharding/proxy/config-proxy-fullrouting-sharding.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/shardingmasterslaveencrypt/fullrouting_shardingmasterslaveencrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/shardingmasterslaveencrypt/fullrouting_shardingmasterslaveencrypt_deploy.sh
new file mode 100644
index 0000000..300e948
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullrouting/shardingmasterslaveencrypt/fullrouting_shardingmasterslaveencrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-sharding-masterslave-enc.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/sharding/fullrouting_smallshards_sharding_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/sharding/fullrouting_smallshards_sharding_deploy.sh
new file mode 100644
index 0000000..a2544ee
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/sharding/fullrouting_smallshards_sharding_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  /home/jenkins/apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/sharding/proxy/config-proxy-fullrouting-smallshards-sharding.yaml $proxy_conf_dir/server.yaml /home/jenkins/apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/shardingmasterslaveencrypt/fullrouting_smallshards_shardingmasterslaveencrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/shardingmasterslaveencrypt/fullrouting_smallshards_shardingmasterslaveencrypt_deploy.sh
new file mode 100644
index 0000000..b8aa647
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/fullroutingsmallshards/shardingmasterslaveencrypt/fullrouting_smallshards_shardingmasterslaveencrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  /home/jenkins/apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-smallshards-sharding-masterslave-enc.yaml $proxy_conf_dir/server.yaml /home/jenkins/apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/encrypt/rangerouting_encrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/encrypt/rangerouting_encrypt_deploy.sh
new file mode 100644
index 0000000..63ff11e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/encrypt/rangerouting_encrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/rangerouting/encrypt/proxy/config-proxy-rangerouting-encrypt.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/masterslave/rangerouting_masterslave_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/masterslave/rangerouting_masterslave_deploy.sh
new file mode 100644
index 0000000..a7ce428
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/masterslave/rangerouting_masterslave_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/rangerouting/masterslave/proxy/config-proxy-rangerouting-masterslave.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/sharding/rangerouting_sharding_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/sharding/rangerouting_sharding_deploy.sh
new file mode 100644
index 0000000..9e7dbd6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/sharding/rangerouting_sharding_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/rangerouting/sharding/proxy/config-proxy-rangerouting-sharding.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/shardingmasterslaveencrypt/rangerouting_shardingmasterslaveencrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/shardingmasterslaveencrypt/rangerouting_shardingmasterslaveencrypt_deploy.sh
new file mode 100644
index 0000000..5222f53
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/rangerouting/shardingmasterslaveencrypt/rangerouting_shardingmasterslaveencrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/rangerouting/sharding-masterslave-encrypt/proxy/config-proxy-rangerouting-sharding-masterslave-enc.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/shardingproxy/shardingproxy_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/shardingproxy/shardingproxy_deploy.sh
new file mode 100644
index 0000000..989c7ad
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/shardingproxy/shardingproxy_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-sharding-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/fullrouting/encrypt/proxy/config-proxy-fullrouting-encrypt.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-sharding-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/encrypt/singlerouting_encrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/encrypt/singlerouting_encrypt_deploy.sh
new file mode 100644
index 0000000..8863f27
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/encrypt/singlerouting_encrypt_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/singlerouting/encrypt/proxy/config-proxy-singlerouting-encrypt.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/masterslave/singlerouting_masterslave_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/masterslave/singlerouting_masterslave_deploy.sh
new file mode 100644
index 0000000..74e4414
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/masterslave/singlerouting_masterslave_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/singlerouting/masterslave/proxy/config-proxy-singlerouting-masterslave.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/sharding/singlerouting_sharding_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/sharding/singlerouting_sharding_deploy.sh
new file mode 100644
index 0000000..f843c9a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/sharding/singlerouting_sharding_deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f  ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf/config-*.yaml
+cp -f $proxy_conf_dir/singlerouting/sharding/proxy/config-proxy-singlerouting-sharding.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy.sh
new file mode 100644
index 0000000..ae9b5b3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+proxy_conf_dir="/export/shardingsphere-benchmark/yaml_conf"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/stop.sh
+sleep 5
+rm -f ./apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin/conf/config-*
+cp -f $proxy_conf_dir/singlerouting/sharding-masterslave-encrypt/proxy/config-proxy-singlerouting-sharding-masterslave-enc.yaml $proxy_conf_dir/server.yaml ./apache-shardingsphere-*-shardingsphere-proxy-bin/conf
+./apache-shardingsphere-*-shardingsphere-proxy-bin/bin/start.sh
+sleep 10
+
+
diff --git a/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy_config.sh b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy_config.sh
new file mode 100644
index 0000000..549c4f6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/deploy/singlerouting/shardingmasterslaveencrypt/singlerouting_shardingmasterslaveencrypt_deploy_config.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+proxy_work_dir="/home/jenkins"
+if [ ! -d $proxy_work_dir  ];then
+  mkdir -p $proxy_work_dir
+fi
+
+cd $proxy_work_dir
+rm -fr apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin
+mv shardingsphere-distribution/shardingsphere-proxy-distribution/target/*shardingsphere-proxy-bin.tar.gz .
+tar zxvf apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin.tar.gz
+cp -f ./mysql-connector-java-5.1.47.jar ./shardingsphere-benchmark-1.1-SNAPSHOT.jar ./apache-shardingsphere-5.0.0-RC1-SNAPSHOT-shardingsphere-proxy-bin/lib
+sleep 10
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount.sh b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount.sh
new file mode 100644
index 0000000..f64c7b2
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount.sh
@@ -0,0 +1,12 @@
+benchmark_resource_dir="/export/benchmark/shardingsphere-benchmark/src/main/resources"
+chmod -R 777 $benchmark_resource_dir
+cd $benchmark_resource_dir
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/datapreparation/jdbc/jdbc-createdata-testplan.jmx`
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount_fullrouting.sh b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount_fullrouting.sh
new file mode 100644
index 0000000..6a51ceb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_basedata_amount_fullrouting.sh
@@ -0,0 +1,19 @@
+benchmark_resource_dir="/export/benchmark/shardingsphere-benchmark/src/main/resources"
+chmod -R 777 $benchmark_resource_dir
+cd $benchmark_resource_dir
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/ss/encrypt/ss-encrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/ss/encrypt/ss-encrypt-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/ss/masterslave/ss-masterslave-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/ss/masterslave/ss-masterslave-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/ss/sharding/ss-sharding-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/ss/sharding/ss-sharding-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/ss/sharding-masterslave-encrypt/ss-sharding-masterslave-encrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/ss/sharding-masterslave-encrypt/ss-sharding-masterslave-encrypt-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/jdbc/encrypt/jdbc-encrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/jdbc/encrypt/jdbc-encrypt-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/jdbc/masterslave/jdbc-masterslave-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/jdbc/masterslave/jdbc-masterslave-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/jdbc/sharding/jdbc-sharding-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/jdbc/sharding/jdbc-sharding-createdata-testplan.jmx`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/common/jdbc/shardingmasterslaveencrypt/jdbc-shardingmasterslaveencrypt-createdata-testplan.jmx`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/common/jdbc/shardingmasterslaveencrypt/jdbc-shardingmasterslaveencrypt-createdata-testplan.jmx`
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_concurrency.sh b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_concurrency.sh
new file mode 100644
index 0000000..e5f3f4c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_concurrency.sh
@@ -0,0 +1,13 @@
+#!bin/bash
+benchmark_resource_dir="/export/benchmark/shardingsphere-benchmark/src/main/resources"
+chmod -R 777 $benchmark_resource_dir
+cd $benchmark_resource_dir
+
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/fullrouting`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/fullrouting`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/rangerouting`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/rangerouting`
+sed -i "s/\"ThreadGroup.num_threads\">[0-9]*/\"ThreadGroup.num_threads\">$2/g" `grep '"ThreadGroup.num_threads">[0-9]*' -rl ./testplan/singlerouting`
+sed -i "s/\"LoopController.loops\">[0-9]*/\"LoopController.loops\">$1/g" `grep '"LoopController.loops">[0-9]*' -rl ./testplan/singlerouting`
+sed -i "s/shardingsphere.jmeter.concurrency.count=[0-9]*/shardingsphere.jmeter.concurrency.count=$2/g" `grep 'shardingsphere.jmeter.concurrency.count=[0-9]*' -rl ./config/user-config.properties`
+sed -i "s/shardingsphere.jmeter.loop.count=[0-9]*/shardingsphere.jmeter.loop.count=$1/g" `grep 'shardingsphere.jmeter.loop.count=[0-9]*' -rl ./config/user-config.properties`
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sample_amount.sh b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sample_amount.sh
new file mode 100644
index 0000000..ac1bfe9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sample_amount.sh
@@ -0,0 +1,4 @@
+benchmark_resource_dir="/export/benchmark/shardingsphere-benchmark/src/main/resources"
+chmod -R 777 $benchmark_resource_dir
+cd $benchmark_resource_dir
+sed -i "s/shardingsphere.result.sample.amount=[0-9]*,[0-9]*/shardingsphere.result.sample.amount=$1,$2/g" `grep 'shardingsphere.result.sample.amount=[0-9]*,[0-9]*' -rl ./config/user-config.properties`
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sharding_dbtable_count.sh b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sharding_dbtable_count.sh
new file mode 100644
index 0000000..f76fc91
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/performance/update_benchmark_sharding_dbtable_count.sh
@@ -0,0 +1,37 @@
+let db_count=$1-1
+let table_count=$2-1
+let db_count_smallshards=$3-1
+let table_count_smallshards=$4-1
+benchmark_resource_dir="/export/benchmark/shardingsphere-benchmark/src/main/resources"
+chmod -R 777 $benchmark_resource_dir
+cd $benchmark_resource_dir
+
+sed -i "s/{0..[1-9]*}.sbtest\${\0..[1-9]*}/{0..$db_count}.sbtest\${0..$table_count}/g" `grep '{0..[1-9]*}.sbtest\${0..[1-9]*}' -rl ./yaml/fullrouting`
+sed -i "s/{id % [1-9]*}/{id % $1}/g" `grep '{id % [1-9]*}' -rl ./yaml/fullrouting`
+sed -i "s/{k % [0-9]*}/{k % $2}/g" `grep '{k % [0-9]*}' -rl ./yaml/fullrouting`
+sed -i "s/minPoolSize: [0-9]*}/minPoolSize: $3}/g" `grep 'minPoolSize: [0-9]*' -rl ./yaml/fullrouting`
+sed -i "s/maxPoolSize: [0-9]*}/maxPoolSize: $4}/g" `grep 'maxPoolSize: [0-9]*' -rl ./yaml/fullrouting`
+sed -i "s/maximumPoolSize: [0-9]*}/maximumPoolSize: $4}/g" `grep 'maximumPoolSize: [0-9]*' -rl ./yaml/fullrouting`
+sed -i "s/max.connections.size.per.query: [0-9]*}/max.connections.size.per.query: $5}/g" `grep 'max.connections.size.per.query: [0-9]*' -rl ./yaml/fullrouting`
+
+sed -i "s/{0..[1-9]*}.sbtest\${\0..[1-9]*}/{0..$db_count}.sbtest\${0..$table_count}/g" `grep '{0..[1-9]*}.sbtest\${0..[1-9]*}' -rl ./yaml/rangerouting`
+sed -i "s/{id % [1-9]*}/{id % $1}/g" `grep '{id % [1-9]*}' -rl ./yaml/rangerouting`
+sed -i "s/{k % [0-9]*}/{k % $2}/g" `grep '{k % [0-9]*}' -rl ./yaml/rangerouting`
+sed -i "s/minPoolSize: [0-9]*}/minPoolSize: $3}/g" `grep 'minPoolSize: [0-9]*' -rl ./yaml/rangerouting`
+sed -i "s/maxPoolSize: [0-9]*}/maxPoolSize: $4}/g" `grep 'maxPoolSize: [0-9]*' -rl ./yaml/rangerouting`
+sed -i "s/maximumPoolSize: [0-9]*}/maximumPoolSize: $4}/g" `grep 'maximumPoolSize: [0-9]*' -rl ./yaml/rangerouting`
+sed -i "s/max.connections.size.per.query: [0-9]*}/max.connections.size.per.query: $5}/g" `grep 'max.connections.size.per.query: [0-9]*' -rl ./yaml/rangerouting`
+
+sed -i "s/{0..[1-9]*}.sbtest\${\0..[1-9]*}/{0..$db_count}.sbtest\${0..$table_count}/g" `grep '{0..[1-9]*}.sbtest\${0..[1-9]*}' -rl ./yaml/singlerouting`
+sed -i "s/{id % [1-9]*}/{id % $1}/g" `grep '{id % [1-9]*}' -rl ./yaml/singlerouting`
+sed -i "s/{k % [0-9]*}/{k % $2}/g" `grep '{k % [0-9]*}' -rl ./yaml/singlerouting`
+sed -i "s/minPoolSize: [0-9]*}/minPoolSize: $3}/g" `grep 'minPoolSize: [0-9]*' -rl ./yaml/singlerouting`
+sed -i "s/maxPoolSize: [0-9]*}/maxPoolSize: $4}/g" `grep 'maxPoolSize: [0-9]*' -rl ./yaml/singlerouting`
+sed -i "s/maximumPoolSize: [0-9]*}/maximumPoolSize: $4}/g" `grep 'maximumPoolSize: [0-9]*' -rl ./yaml/singlerouting`
+sed -i "s/max.connections.size.per.query: [0-9]*}/max.connections.size.per.query: $5}/g" `grep 'max.connections.size.per.query: [0-9]*' -rl ./yaml/singlerouting`
+
+sed -i "s/shardingsphere.sharding.table.count=[0-9]*/shardingsphere.sharding.table.count=$2/g" `grep 'shardingsphere.sharding.table.count=[0-9]*' -rl ./config/user-config.properties`
+sed -i "s/shardingsphere.sharding.db.count=[0-9]*/shardingsphere.sharding.db.count=$1/g" `grep 'shardingsphere.sharding.db.count=[0-9]*' -rl ./config/user-config.properties`
+sed -i "s/shardingsphere.minimum.connection.count=[0-9]*/shardingsphere.minimum.connection.count=$3/g" `grep 'shardingsphere.minimum.connection.count=[0-9]*' -rl ./config/user-config.properties`
+sed -i "s/shardingsphere.maximum.connection.count=[0-9]*/shardingsphere.maximum.connection.count=$4/g" `grep 'shardingsphere.maximum.connection.count=[0-9]*' -rl ./config/user-config.properties`
+sed -i "s/shardingsphere.maximum.connection.count.for.each.query=[0-9]*/shardingsphere.maximum.connection.count.for.each.query=$5/g" `grep 'shardingsphere.maximum.connection.count.for.each.query=[0-9]*' -rl ./config/user-config.properties`
diff --git a/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_build.sh b/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_build.sh
new file mode 100644
index 0000000..72a36bf
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_build.sh
@@ -0,0 +1,31 @@
+export JAVA_HOME=/export/jdk1.8.0_192/
+export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
+export PATH=$PATH:$JAVA_HOME/bin
+
+proxy_work_dir="/home/jenkins"
+benchmark_result_parent_dir="/export/shardingsphere-benchmark"
+benchmark_base_dir="/export/benchmark/shardingsphere-benchmark"
+maven_base_dir="/export/apache-maven-3.6.0"
+
+cd $benchmark_base_dir
+
+$maven_base_dir/bin/mvn clean install
+
+scp -r target/shardingsphere-benchmark-1.1-SNAPSHOT.jar jenkins@ss.benchmark.performance.machine:$proxy_work_dir/apache-jmeter-4.0/lib/ext
+
+scp -r src/main/resources/testplan/* jenkins@ss.benchmark.performance.machine:$proxy_work_dir/apache-jmeter-4.0/shardingsphere_test_plan
+
+#copy yaml of proxy to proxy machine:/home/jenkins/BT_jenkins/proxy_yaml_conf
+scp -r src/main/resources/yaml/* jenkins@ss.benchmark.proxy.machine:$benchmark_result_parent_dir/yaml_conf
+
+scp -r src/main/resources/shell/deploy/* jenkins@ss.benchmark.proxy.machine:$benchmark_result_parent_dir/shell
+
+#copy benchmark jar to proxy machine
+scp -r target/shardingsphere-benchmark-1.1-SNAPSHOT.jar jenkins@ss.benchmark.proxy.machine:$proxy_work_dir
+
+#scp -r ss_build_version.log jenkins@ss.benchmark.performance.machine:$proxy_work_dir/apache-jmeter-4.0
+#scp -r ss_build_version.log jenkins@ss.benchmark.proxy.machine:$proxy_work_dir/BT_jenkins
+
+scp -r src/main/resources/shell/prepare/jmeter_result_manage.sh jenkins@ss.benchmark.performance.machine:$benchmark_result_parent_dir/shell
+
+scp -r src/main/resources/shell/performance/update_benchmark_basedata_amount_fullrouting.sh jenkins@ss.benchmark.performance.machine:$benchmark_result_parent_dir/shell
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_update.sh b/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_update.sh
new file mode 100644
index 0000000..38ae396
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/prepare/benchmark_update.sh
@@ -0,0 +1,34 @@
+benchmark_base_dir="/export/benchmark/shardingsphere-benchmark"
+chmod -R 777 benchmark_base_dir
+cd benchmark_base_dir
+
+if [ -f ./ss_build_version.log ]; then
+  rm ./ss_build_version.log
+fi
+echo $1 > ./ss_build_version.log
+sleep 2s
+
+ss_version=`head -n +1 ./ss_build_version.log`
+
+if [ $1 == 5.0 ];then
+  echo "5.0"
+  git reset --hard
+  git checkout master
+  git reset --hard
+  git pull origin master
+elif [ $1 == 4.1.1 ];then
+  echo "4.1.1"
+  git reset --hard
+  git checkout 4.1.1
+  git reset --hard
+  git pull origin 4.1.1
+else
+  echo "default version"
+  git reset --hard
+  git checkout master
+  git reset --hard
+  git pull origin master
+fi
+
+sed -i "s/shardingsphere.version=[^0-9.]*\([0-9.]*\)\([0-9.]*\)./shardingsphere.version=$1/g" `grep 'shardingsphere.version=[^0-9.]*\([0-9.]*\)\([0-9.]*\)' -rl ./src/main/resources/config/user-config.properties`
+
diff --git a/shardingsphere-benchmark/src/main/resources/shell/prepare/jmeter_result_manage.sh b/shardingsphere-benchmark/src/main/resources/shell/prepare/jmeter_result_manage.sh
new file mode 100644
index 0000000..59d3f85
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/prepare/jmeter_result_manage.sh
@@ -0,0 +1,95 @@
+benchmark_result_dir="/export/shardingsphere-benchmark/result"
+# create base dir for benchmark result
+if [ ! -d $benchmark_result_dir  ];then
+  mkdir -p $benchmark_result_dir
+fi
+chmod -R 777 $benchmark_result_dir
+
+cd $benchmark_result_dir
+
+# create sub dir of benchmark result
+if [ ! -d "./fullrouting/encrypt" ];then
+  mkdir -p ./fullrouting/encrypt
+else
+  echo ./fullrouting/encrypt/  exist
+  rm -rf ./fullrouting/encrypt/*
+fi
+
+if [ ! -d "./fullrouting/masterslave" ];then
+  mkdir -p ./fullrouting/masterslave
+else
+  echo ./fullrouting/masterslave  exist
+  rm -rf ./fullrouting/masterslave/*
+fi
+
+if [ ! -d "./fullrouting/sharding" ];then
+  mkdir -p ./fullrouting/sharding
+else
+  echo ./fullrouting/sharding  exist
+  rm -rf ./fullrouting/sharding/*
+fi
+
+if [ ! -d "./fullrouting/shardingmasterslaveencrypt" ];then
+  mkdir -p ./fullrouting/shardingmasterslaveencrypt
+else
+  echo ./fullrouting/shardingmasterslaveencrypt  exist
+  rm -rf ./fullrouting/shardingmasterslaveencrypt/*
+fi
+
+if [ ! -d "./rangerouting/encrypt" ];then
+  mkdir -p ./rangerouting/encrypt
+else
+  echo ./rangerouting/encrypt  exist
+  rm -rf ./rangerouting/encrypt/*
+fi
+
+if [ ! -d "./rangerouting/masterslave" ];then
+  mkdir -p ./rangerouting/masterslave
+else
+  echo ./rangerouting/masterslave  exist
+  rm -rf ./rangerouting/masterslave/*
+fi
+
+if [ ! -d "./rangerouting/sharding" ];then
+  mkdir -p ./rangerouting/sharding
+else
+  echo ./rangerouting/sharding  exist
+  rm -rf ./rangerouting/sharding/*
+fi
+
+if [ ! -d "./rangerouting/shardingmasterslaveencrypt" ];then
+  mkdir -p ./rangerouting/shardingmasterslaveencrypt
+else
+  echo ./rangerouting/shardingmasterslaveencrypt  exist
+  rm -rf ./rangerouting/shardingmasterslaveencrypt/*
+fi
+
+if [ ! -d "./singlerouting/encrypt" ];then
+  mkdir -p ./singlerouting/encrypt
+else
+  echo ./singlerouting/encrypt  exist
+  rm -rf ./singlerouting/encrypt/*
+fi
+
+if [ ! -d "./singlerouting/masterslave" ];then
+  mkdir -p ./singlerouting/masterslave
+else
+  echo ./singlerouting/masterslave  exist
+  rm -rf ./singlerouting/masterslave/*
+fi
+
+if [ ! -d "./singlerouting/sharding" ];then
+  mkdir -p ./singlerouting/sharding
+else
+  echo ./singlerouting/sharding  exist
+  rm -rf ./singlerouting/sharding/*
+fi
+
+if [ ! -d "./singlerouting/shardingmasterslaveencrypt" ];then
+  mkdir -p ./singlerouting/shardingmasterslaveencrypt
+else
+  echo ./singlerouting/shardingmasterslaveencrypt  exist
+  rm -rf ./singlerouting/shardingmasterslaveencrypt/*
+fi
+
+chmod -R 777 ./
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.py b/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.py
new file mode 100644
index 0000000..7e8dad4
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.py
@@ -0,0 +1,83 @@
+import sys
+from decimal import Decimal
+import time
+import json
+
+def calculate_tps(file_name,output_name):
+    with open(file_name) as file_input:
+       total = 0
+       start_time = 0
+       end_time = 0
+       items = []
+       time_list = []
+       succ_count = 0
+       fail_count = 0
+       #timestr=int(time.time()*1000)
+       timestr=time.strftime('%Y.%m.%d %H:%M:%S ',time.localtime(time.time()))
+       v3_item={
+           "Samples":"null",
+           "Throughout":"null",
+           "50th":"null",
+           "95th":"null",
+           "99.9th":"null",
+           "Avg":"null",
+           "Min":"null",
+           "Max":"null",
+           "Err":"null",
+           "Date":"null"
+       }
+       ##['1571884442222', '36', 'JdbcSingleTableSelect', '', '', 'Thread Group 1-15', '', 'true', '', '0', '0', '20', '20', '0', '0', '0\n']
+       for line in file_input:
+           line = line.strip("\n")
+           if line != "":
+               items=line.split(",")
+               #print(items[1])
+               time_list.append(int(items[1]))
+               if total == 0:
+                   start_time = items[0]
+               if items[7] == "true":
+                   succ_count = succ_count+1
+               else:
+                   fail_count = fail_count+1
+               total = total+1
+       if total > 0:
+           end_time = items[0]
+           the99 = int(total*0.999)
+           the95 = int(total*0.95)
+           the50 = int(total*0.5)
+           timeStamp = int(end_time)-int(start_time)
+           tps=str(Decimal(str(total*1.0/(timeStamp*1.0/1000))).quantize(Decimal('0.00')))
+           #print(start_time)
+           #print(timeStamp)
+           #print(succ_count)
+           err=str(float(fail_count/total)*100)+"%"
+           time_new_list=sorted(time_list)
+           the90s=str(time_new_list[the50])
+           the95s=str(time_new_list[the95])
+           the99s=str(time_new_list[the99])
+           avg=str(sum(time_list)/total)
+           minstr=str(time_new_list[0])
+           maxstr=str(time_new_list[len(time_new_list)-1])
+           #timestr=int(time.time()*1000)
+           #time.strftime('%Y.%m.%d %H:%M:%S ',time.localtime(time.time()))
+           v3_item={
+               "Samples":total,
+               "Throughout":tps,
+               "50th":the90s,
+               "95th":the95s,
+               "99.9th":the99s,
+               "Avg":avg,
+               "Min":minstr,
+               "Max":maxstr,
+               "Err":err,
+               "Date":timestr
+           }
+           print(v3_item)
+    with open(output_name, 'a+') as f:
+        f.write(json.dumps(v3_item))
+        f.write("\n")
+        f.close()
+if __name__=='__main__':
+    file_name = sys.argv[1]
+    out_name = sys.argv[2]
+    gen_stat(file_name,out_name)
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.sh b/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.sh
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/shell/statistic/caculate.sh
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/config/initconfig-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/config/initconfig-testplan.jmx
new file mode 100644
index 0000000..d1a6774
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/config/initconfig-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.config.JMeterConfigBenchmark</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/config-testplan-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/config/initdb-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/config/initdb-testplan.jmx
new file mode 100644
index 0000000..e1fecec
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/config/initdb-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.config.JMeterInitDB</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/jdbc-encrypt-cleardata.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-cleardata-testplan.jmx
new file mode 100644
index 0000000..b91f16a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.JMeterJDBCCommonClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-createdata-testplan.jmx
new file mode 100644
index 0000000..d106c1e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/jdbc/jdbc-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">100000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">20</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.jdbc.JMeterJDBCCommonInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-cleardata-testplan.jmx
new file mode 100644
index 0000000..5945ca1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.encrypt.JMeterShardingSphereCommonEncryptClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-createdata-testplan.jmx
new file mode 100644
index 0000000..404adb8
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/encrypt/shardingsphere-encrypt-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">10</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.encrypt.JMeterShardingSphereCommonEncryptInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-cleardata-testplan.jmx
new file mode 100644
index 0000000..a73ed97
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.masterslave.JMeterShardingSphereCommonMasterSlaveClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-createdata-testplan.jmx
new file mode 100644
index 0000000..872b6f7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/masterslave/shardingsphere-masterslave-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">100000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">20</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.masterslave.JMeterShardingSphereCommonMasterSlaveInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx
new file mode 100644
index 0000000..a6d3083
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt.JMeterShardingSphereCommonShardingMasterSlaveEncryptClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx
new file mode 100644
index 0000000..883fe38
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-sharding-masterslave-encrypt-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">25000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">200</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt.JMeterShardingSphereCommonShardingMasterSlaveEncryptInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-cleardata-testplan.jmx
new file mode 100644
index 0000000..80b0669
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt.JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-createdata-testplan.jmx
new file mode 100644
index 0000000..428ea5c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding-masterslave-encrypt/shardingsphere-smallshards-sharding-masterslave-encrypt-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">12500</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">400</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.shardingmasterslaveencrypt.JMeterShardingSphereCommonSmallShardsShardingMasterSlaveEncryptInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-cleardata-testplan.jmx
new file mode 100644
index 0000000..1b080e6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding.JMeterShardingSphereCommonShardingClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
new file mode 100644
index 0000000..94ca167
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-sharding-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">100000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">20</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding.JMeterShardingSphereCommonShardingInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-cleardata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-cleardata-testplan.jmx
new file mode 100644
index 0000000..1ee3bd2
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-cleardata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding.JMeterShardingSphereCommonSmallShardsShardingClear</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-createdata-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-createdata-testplan.jmx
new file mode 100644
index 0000000..dbbef58
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/common/datapreparation/shardingsphere/sharding/shardingsphere-smallshards-sharding-createdata-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">100000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">20</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.common.datapreparation.shardingsphere.sharding.JMeterShardingSphereCommonSmallShardsShardingInsert</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/new_result/4.0_sp_ms_enc_sharding_all_new.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/jdbc-fullrouting-smallshards-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/jdbc-fullrouting-smallshards-sharding-select-testplan.jmx
new file mode 100644
index 0000000..28f800e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/jdbc-fullrouting-smallshards-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding.JMeterJDBCFullRoutingSmallShardsShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/jdbc-fullrouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/proxy-fullrouting-smallshards-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/proxy-fullrouting-smallshards-sharding-select-testplan.jmx
new file mode 100644
index 0000000..ec417ea
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/proxy-fullrouting-smallshards-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding.JMeterProxyFullRoutingSmallShardsShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/proxy-fullrouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/shardingjdbc-fullrouting-smallshards-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/shardingjdbc-fullrouting-smallshards-sharding-select-testplan.jmx
new file mode 100644
index 0000000..36140a4
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/sharding/shardingjdbc-fullrouting-smallshards-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.sharding.JMeterShardingJDBCFullRoutingSmallShardsShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/jdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/jdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..5cd2a35
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/jdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt.JMeterJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/jdbc-fullrouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/proxy-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/proxy-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..c9750ae
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/proxy-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt.JMeterProxyFullRoutingSmallShardsShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/shardingjdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/shardingjdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..ef0c4bc
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting-smallshards/shardingmasterslaveencrypt/shardingjdbc-fullrouting-smallshards-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullroutingsmallshards.shardingmasterslaveencrypt.JMeterShardingJDBCFullRoutingSmallShardsShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..b0f0532
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterJDBCFullRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/jdbc-fullrouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..dd30d5d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/jdbc-fullrouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterJDBCFullRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/jdbc-fullrouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..2ad5991
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterProxyFullRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/proxy-fullrouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..7596a86
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/proxy-fullrouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterProxyFullRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/proxy-fullrouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..6456895
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterShardingJDBCFullRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..b88e119
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.encrypt.JMeterShardingJDBCFullRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/encrypt/shardingjdbc-fullrouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/jdbc-fullrouting-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/jdbc-fullrouting-select-testplan.jmx
new file mode 100644
index 0000000..b520b73
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/jdbc-fullrouting-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.JMeterJDBCFullRoutingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/jdbc-fullrouting-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..c79ac44
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave.JMeterProxyFullRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/masterslave/proxy-fullrouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..b40aad0
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/proxy-fullrouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave.JMeterProxyFullRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/masterslave/proxy-fullrouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..a7454a6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave.JMeterShardingJDBCFullRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..afb30f3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.masterslave.JMeterShardingJDBCFullRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/masterslave/shardingjdbc-fullrouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..8bfd4cc
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding.JMeterProxyFullRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/proxy-fullrouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..63ef910
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/proxy-fullrouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding.JMeterProxyFullRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/proxy-fullrouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..40c851b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding.JMeterShardingJDBCFullRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/shardingjdbc-fullrouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..c295be7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.sharding.JMeterShardingJDBCFullRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/sharding/shardingjdbc-fullrouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..5432619
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt.JMeterProxyFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..7591897
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt.JMeterProxyFullRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/proxy-fullrouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..9dcadaa
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt.JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..1bdadf1
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.fullrouting.shardingmasterslaveencrypt.JMeterShardingJDBCFullRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/fullrouting/shardingmasterslaveencrypt/shardingjdbc-fullrouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..ee160ac
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterJDBCRangeRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/jdbc-rangerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..4d17d30
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/jdbc-rangerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterJDBCRangeRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/jdbc-rangerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..2b6bc96
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterProxyRangeRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/proxy-rangerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..dddb3fb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/proxy-rangerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterProxyRangeRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/proxy-rangerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..1a61e50
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterShardingJDBCRangeRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..65cf236
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.encrypt.JMeterShardingJDBCRangeRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/encrypt/shardingjdbc-rangerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..48b9be5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.JMeterJDBCRangeRoutingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-select-testplan.jmx
new file mode 100644
index 0000000..4a79887
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/jdbc-rangerouting-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.JMeterJDBCRangeRoutingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/jdbc-rangerouting-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..24c6495
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave.JMeterProxyRangeRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/masterslave/proxy-rangerouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..0e1ca6c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/proxy-rangerouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave.JMeterProxyRangeRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/masterslave/proxy-rangerouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..b8677f5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave.JMeterShardingJDBCRangeRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..84513b7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.masterslave.JMeterShardingJDBCRangeRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/masterslave/shardingjdbc-rangerouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..9d3e98a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding.JMeterProxyRangeRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/sharding/proxy-rangerouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..29db50d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/proxy-rangerouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding.JMeterProxyRangeRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/sharding/proxy-rangerouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..f1724ca
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding.JMeterShardingJDBCRangeRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/sharding/shardingjdbc-rangerouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..d79835c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/sharding/shardingjdbc-rangerouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.sharding.JMeterShardingJDBCRangeRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/sharding/shardingjdbc-rangerouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..11a3a8b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt.JMeterProxyRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..1a477e9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt.JMeterProxyRangeRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/proxy-rangerouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..b5a1c69
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt.JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..21484ac
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.rangerouting.shardingmasterslaveencrypt.JMeterShardingJDBCRangeRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/rangerouting/shardingmasterslaveencrypt/shardingjdbc-rangerouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..3c4df1d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterJDBCSingleRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/jdbc-singlerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..29f04a6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/jdbc-singlerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterJDBCSingleRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/jdbc-singlerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..9501856
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterProxySingleRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/proxy-singlerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..c0cdca3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/proxy-singlerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterProxySingleRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/proxy-singlerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..dd4f470
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterShardingJDBCSingleRoutingEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
new file mode 100644
index 0000000..5a6a65d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.encrypt.JMeterShardingJDBCSingleRoutingEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/encrypt/shardingjdbc-singlerouting-encrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..30a65ee
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.JMeterJDBCSingleRoutingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan-test.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan-test.jmx
new file mode 100644
index 0000000..2d6e7a3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan-test.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.JMeterJDBCSingleRoutingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan.jmx
new file mode 100644
index 0000000..2d6e7a3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/jdbc-singlerouting-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.JMeterJDBCSingleRoutingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/jdbc-singlerouting-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..e3d387a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave.JMeterProxySingleRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/masterslave/proxy-singlerouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..6fcce79
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/proxy-singlerouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave.JMeterProxySingleRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/masterslave/proxy-singlerouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..5abe6db
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave.JMeterShardingJDBCSingleRoutingMasterSlaveInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-select-testplan.jmx
new file mode 100644
index 0000000..e013952
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.masterslave.JMeterShardingJDBCSingleRoutingMasterSlaveSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/masterslave/shardingjdbc-singlerouting-masterslave-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..d882350
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding.JMeterProxySingleRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/sharding/proxy-singlerouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..82c07cb
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/proxy-singlerouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding.JMeterProxySingleRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/sharding/proxy-singlerouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..95fcff6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding.JMeterShardingJDBCSingleRoutingShardingInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/sharding/shardingjdbc-singlerouting-sharding-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-select-testplan.jmx
new file mode 100644
index 0000000..e2fe39c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/sharding/shardingjdbc-singlerouting-sharding-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.sharding.JMeterShardingJDBCSingleRoutingShardingSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/sharding/shardingjdbc-singlerouting-sharding-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..df123b5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt.JMeterProxySingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..9fe915a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt.JMeterProxySingleRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/proxy-singlerouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
new file mode 100644
index 0000000..df2435d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt.JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptInsertUpdateDelete</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-insertupdatedelete-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx
new file mode 100644
index 0000000..dcd66a3
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-select-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1000</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">10</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.singlerouting.shardingmasterslaveencrypt.JMeterShardingJDBCSingleRoutingShardingMasterSlaveEncryptSelect</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/result/singlerouting/shardingmasterslaveencrypt/shardingjdbc-singlerouting-shardingmasterslaveencrypt-select-result.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx b/shardingsphere-benchmark/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
new file mode 100644
index 0000000..8cbd9a7
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/testplan/statistic/ss-benchmark-statistic-testplan.jmx
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jmeterTestPlan jmeter="4.0 r1823414" properties="4.0" version="1.2">
+  <hashTree>
+    <TestPlan enabled="true" guiclass="TestPlanGui" testclass="TestPlan" testname="jdbc-allt-table">
+      <stringProp name="TestPlan.comments"/>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="TestPlan.user_defined_variables" testclass="Arguments" testname="User Defined Variables">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"/>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup enabled="true" guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp elementType="LoopController" enabled="true" guiclass="LoopControlPanel" name="ThreadGroup.main_controller" testclass="LoopController" testname="Loop Controller">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">0</stringProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"/>
+        <stringProp name="ThreadGroup.delay"/>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler enabled="true" guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request">
+          <elementProp elementType="Arguments" enabled="true" guiclass="ArgumentsPanel" name="arguments" testclass="Arguments">
+            <collectionProp name="Arguments.arguments"/>
+          </elementProp>
+          <stringProp name="classname">org.apache.shardingsphere.benchmark.jmeter.statistic.JMeterShardigSphereBenchmarkStatistic</stringProp>
+        </JavaSampler>
+        <hashTree>
+          <ResultCollector enabled="true" guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename"/>
+          </ResultCollector>
+          <hashTree/>
+          <ResultCollector enabled="true" guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report">
+            <boolProp name="ResultCollector.error_logging">false</boolProp>
+            <objProp>
+              <name>saveConfig</name>
+              <value class="SampleSaveConfiguration">
+                <time>true</time>
+                <latency>true</latency>
+                <timestamp>true</timestamp>
+                <success>true</success>
+                <label>true</label>
+                <code>true</code>
+                <message>true</message>
+                <threadName>true</threadName>
+                <dataType>true</dataType>
+                <encoding>false</encoding>
+                <assertions>true</assertions>
+                <subresults>true</subresults>
+                <responseData>false</responseData>
+                <samplerData>false</samplerData>
+                <xml>false</xml>
+                <fieldNames>true</fieldNames>
+                <responseHeaders>false</responseHeaders>
+                <requestHeaders>false</requestHeaders>
+                <responseDataOnError>false</responseDataOnError>
+                <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+                <assertionsResultsToSave>0</assertionsResultsToSave>
+                <bytes>true</bytes>
+                <sentBytes>true</sentBytes>
+                <threadCounts>true</threadCounts>
+                <idleTime>true</idleTime>
+                <connectTime>true</connectTime>
+              </value>
+            </objProp>
+            <stringProp name="filename">/export/shardingsphere-benchmark/statistic.jtl</stringProp>
+          </ResultCollector>
+          <hashTree/>
+        </hashTree>
+      </hashTree>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-smallshards-sharding-masterslave-enc.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-smallshards-sharding-masterslave-enc.yaml
new file mode 100644
index 0000000..8bc2513
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-smallshards-sharding-masterslave-enc.yaml
@@ -0,0 +1,133 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: master_ds_0
+        slaveDataSourceNames: [slave_ds_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: master_ds_1
+        slaveDataSourceNames: [slave_ds_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: master_ds_2
+        slaveDataSourceNames: [slave_ds_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: master_ds_3
+        slaveDataSourceNames: [slave_ds_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding-masterslave-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding-masterslave-encrypt.yaml
new file mode 100644
index 0000000..3efdb60
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding-masterslave-encrypt.yaml
@@ -0,0 +1,254 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2_slave_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3_slave_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: ds_0
+        slaveDataSourceNames: [ds_0_slave_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: ds_1
+        slaveDataSourceNames: [ds_1_slave_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: ds_2
+        slaveDataSourceNames: [ds_2_slave_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: ds_3
+        slaveDataSourceNames: [ds_3_slave_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false        
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/proxy/config-proxy-fullrouting-smallshards-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/proxy/config-proxy-fullrouting-smallshards-sharding.yaml
new file mode 100644
index 0000000..7292bb9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/proxy/config-proxy-fullrouting-smallshards-sharding.yaml
@@ -0,0 +1,64 @@
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of sharding rule.
+#
+# If you want to use sharding, please refer to this file;
+# if you want to use master-slave, please refer to the config-proxy-rangerouting-masterslave.yaml.
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  press_test_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    defaultTableStrategy:
+      none:
+    tables:
+      sbtest:
+        actualDataNodes: press_test_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: press_test_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding.yaml
new file mode 100644
index 0000000..d32b95a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting-smallshards/sharding/shardingjdbc/config-shardingjdbc-fullrouting-smallshards-sharding.yaml
@@ -0,0 +1,126 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/proxy/config-proxy-fullrouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/proxy/config-proxy-fullrouting-encrypt.yaml
new file mode 100644
index 0000000..67cd9d0
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/proxy/config-proxy-fullrouting-encrypt.yaml
@@ -0,0 +1,57 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  shardingsphere_benchmark:
+    url: jdbc:mysql://ss.benchmark.fullrouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/shardingjdbc/config-shardingjdbc-fullrouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/shardingjdbc/config-shardingjdbc-fullrouting-encrypt.yaml
new file mode 100644
index 0000000..fca29e5
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/encrypt/shardingjdbc/config-shardingjdbc-fullrouting-encrypt.yaml
@@ -0,0 +1,45 @@
+dataSources:
+  shardingsphere_benchmark: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/proxy/config-proxy-fullrouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/proxy/config-proxy-fullrouting-masterslave.yaml
new file mode 100644
index 0000000..51ec8b6
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/proxy/config-proxy-fullrouting-masterslave.yaml
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds:
+    url: jdbc:mysql://ss.benchmark.fullrouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: master_ds
+        slaveDataSourceNames: [slave_ds_0]
+
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/shardingjdbc/config-shardingjdbc-fullrouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/shardingjdbc/config-shardingjdbc-fullrouting-masterslave.yaml
new file mode 100644
index 0000000..f875a0b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/masterslave/shardingjdbc/config-shardingjdbc-fullrouting-masterslave.yaml
@@ -0,0 +1,60 @@
+dataSources:
+  ds_master: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    password:
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_slave0: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    password:
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: ds_master
+        slaveDataSourceNames: [ds_slave0]
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-sharding-masterslave-enc.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-sharding-masterslave-enc.yaml
new file mode 100644
index 0000000..8bc2513
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/proxy/config-proxy-fullrouting-sharding-masterslave-enc.yaml
@@ -0,0 +1,133 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: master_ds_0
+        slaveDataSourceNames: [slave_ds_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: master_ds_1
+        slaveDataSourceNames: [slave_ds_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: master_ds_2
+        slaveDataSourceNames: [slave_ds_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: master_ds_3
+        slaveDataSourceNames: [slave_ds_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt-test.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt-test.yaml
new file mode 100644
index 0000000..0b15f4d
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt-test.yaml
@@ -0,0 +1,236 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2_slave_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3_slave_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+shardingRule:
+  tables:
+    sbtest:
+      actualDataNodes: ms_ds_${0..2}.sbtest${0..99}
+      databaseStrategy:
+        inline:
+          shardingColumn: id
+          algorithmExpression: ms_ds_${id % 3}
+      keyGenerator:
+        type: SNOWFLAKE
+        column: id
+      tableStrategy:
+        inline:
+          shardingColumn: k
+          algorithmExpression: sbtest${k % 100}
+  bindingTables:
+    - sbtest
+
+  masterSlaveRules:
+    ms_ds_0:
+      masterDataSourceName: ds_0
+      slaveDataSourceNames:
+        - ds_0_slave_0
+      loadBalanceAlgorithmType: ROUND_ROBIN
+    ms_ds_1:
+      masterDataSourceName: ds_1
+      slaveDataSourceNames:
+        - ds_1_slave_1
+      loadBalanceAlgorithmType: ROUND_ROBIN
+    ms_ds_2:
+      masterDataSourceName: ds_2
+      slaveDataSourceNames:
+        - ds_2_slave_2
+      loadBalanceAlgorithmType: ROUND_ROBIN
+    ms_ds_3:
+      masterDataSourceName: ds_3
+      slaveDataSourceNames:
+        - ds_3_slave_3
+      loadBalanceAlgorithmType: ROUND_ROBIN
+
+  encryptRule:
+    tables:
+      sbtest:
+        columns:
+          pwd:
+            cipherColumn: c
+            encryptor: encryptor_aes
+          name:
+            cipherColumn: pad
+            encryptor: encryptor_md5
+    encryptors:
+      encryptor_aes:
+        type: aes
+        props:
+          aes.key.value: 123456abc
+      encryptor_md5:
+        type: md5
+
+props:
+  max.connections.size.per.query: 2
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml
new file mode 100644
index 0000000..3efdb60
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-fullrouting-sharding-masterslave-encrypt.yaml
@@ -0,0 +1,254 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2_slave_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3_slave_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: ds_0
+        slaveDataSourceNames: [ds_0_slave_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: ds_1
+        slaveDataSourceNames: [ds_1_slave_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: ds_2
+        slaveDataSourceNames: [ds_2_slave_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: ds_3
+        slaveDataSourceNames: [ds_3_slave_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false        
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/proxy/config-proxy-fullrouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/proxy/config-proxy-fullrouting-sharding.yaml
new file mode 100644
index 0000000..7292bb9
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/proxy/config-proxy-fullrouting-sharding.yaml
@@ -0,0 +1,64 @@
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of sharding rule.
+#
+# If you want to use sharding, please refer to this file;
+# if you want to use master-slave, please refer to the config-proxy-rangerouting-masterslave.yaml.
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  press_test_0:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_1:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_2:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_3:
+    url: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    defaultTableStrategy:
+      none:
+    tables:
+      sbtest:
+        actualDataNodes: press_test_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: press_test_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/shardingjdbc/config-shardingjdbc-fullrouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/shardingjdbc/config-shardingjdbc-fullrouting-sharding.yaml
new file mode 100644
index 0000000..d32b95a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/fullrouting/sharding/shardingjdbc/config-shardingjdbc-fullrouting-sharding.yaml
@@ -0,0 +1,126 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.fullrouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/proxy/config-proxy-rangerouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/proxy/config-proxy-rangerouting-encrypt.yaml
new file mode 100644
index 0000000..5b3923a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/proxy/config-proxy-rangerouting-encrypt.yaml
@@ -0,0 +1,57 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  shardingsphere_benchmark:
+    url: jdbc:mysql://ss.benchmark.rangerouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/shardingjdbc/config-shardingjdbc-rangerouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/shardingjdbc/config-shardingjdbc-rangerouting-encrypt.yaml
new file mode 100644
index 0000000..2f5db0c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/encrypt/shardingjdbc/config-shardingjdbc-rangerouting-encrypt.yaml
@@ -0,0 +1,45 @@
+dataSources:
+  shardingsphere_benchmark: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/proxy/config-proxy-rangerouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/proxy/config-proxy-rangerouting-masterslave.yaml
new file mode 100644
index 0000000..e3d44ac
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/proxy/config-proxy-rangerouting-masterslave.yaml
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds:
+    url: jdbc:mysql://ss.benchmark.rangerouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.rangerouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: master_ds
+        slaveDataSourceNames: [slave_ds_0]
+
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/shardingjdbc/config-shardingjdbc-rangerouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/shardingjdbc/config-shardingjdbc-rangerouting-masterslave.yaml
new file mode 100644
index 0000000..65a5252
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/masterslave/shardingjdbc/config-shardingjdbc-rangerouting-masterslave.yaml
@@ -0,0 +1,60 @@
+dataSources:
+  ds_master: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    password:
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_slave0: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    password:
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: ds_master
+        slaveDataSourceNames: [ds_slave0]
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/proxy/config-proxy-rangerouting-sharding-masterslave-enc.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/proxy/config-proxy-rangerouting-sharding-masterslave-enc.yaml
new file mode 100644
index 0000000..210627a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/proxy/config-proxy-rangerouting-sharding-masterslave-enc.yaml
@@ -0,0 +1,133 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds_0:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_1:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_1:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_2:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_2:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_3:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_3:
+    url: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: master_ds_0
+        slaveDataSourceNames: [slave_ds_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: master_ds_1
+        slaveDataSourceNames: [slave_ds_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: master_ds_2
+        slaveDataSourceNames: [slave_ds_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: master_ds_3
+        slaveDataSourceNames: [slave_ds_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-rangerouting-sharding-masterslave-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-rangerouting-sharding-masterslave-encrypt.yaml
new file mode 100644
index 0000000..841d456
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-rangerouting-sharding-masterslave-encrypt.yaml
@@ -0,0 +1,254 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2_slave_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3_slave_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: ds_0
+        slaveDataSourceNames: [ds_0_slave_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: ds_1
+        slaveDataSourceNames: [ds_1_slave_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: ds_2
+        slaveDataSourceNames: [ds_2_slave_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: ds_3
+        slaveDataSourceNames: [ds_3_slave_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false        
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/proxy/config-proxy-rangerouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/proxy/config-proxy-rangerouting-sharding.yaml
new file mode 100644
index 0000000..bd737c8
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/proxy/config-proxy-rangerouting-sharding.yaml
@@ -0,0 +1,64 @@
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of sharding rule.
+#
+# If you want to use sharding, please refer to this file;
+# if you want to use master-slave, please refer to the config-proxy-rangerouting-masterslave.yaml.
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  press_test_0:
+    url: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_1:
+    url: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_2:
+    url: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_3:
+    url: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    defaultTableStrategy:
+      none:
+    tables:
+      sbtest:
+        actualDataNodes: press_test_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: press_test_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/shardingjdbc/config-shardingjdbc-rangerouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/shardingjdbc/config-shardingjdbc-rangerouting-sharding.yaml
new file mode 100644
index 0000000..b699b3b
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/rangerouting/sharding/shardingjdbc/config-shardingjdbc-rangerouting-sharding.yaml
@@ -0,0 +1,126 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.rangerouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/server.yaml b/shardingsphere-benchmark/src/main/resources/yaml/server.yaml
new file mode 100644
index 0000000..d76b26e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/server.yaml
@@ -0,0 +1,35 @@
+######################################################################################################
+#
+# If you want to configure orchestration, authorization and proxy properties, please refer to this file.
+#
+######################################################################################################
+
+#orchestration:
+#  name: orchestration_ds
+#  overwrite: true
+#  registry:
+#    serverLists: localhost:2181
+#    namespace: orchestration
+#
+######################################################################################################
+authentication:
+  users:
+    root:
+      password: root
+    sharding:
+      password: sharding
+      authorizedSchemas: sharding_db
+
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  proxy.frontend.flush.threshold: 128
+  proxy.transaction.type: LOCAL
+  proxy.opentracing.enabled: false
+  proxy.metrics.enabled: false
+  proxy.hint.enabled: false
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/proxy/config-proxy-singlerouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/proxy/config-proxy-singlerouting-encrypt.yaml
new file mode 100644
index 0000000..f8d6558
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/proxy/config-proxy-singlerouting-encrypt.yaml
@@ -0,0 +1,57 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  shardingsphere_benchmark:
+    url: jdbc:mysql://ss.benchmark.singlerouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/shardingjdbc/config-shardingjdbc-singlerouting-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/shardingjdbc/config-shardingjdbc-singlerouting-encrypt.yaml
new file mode 100644
index 0000000..ba77083
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/encrypt/shardingjdbc/config-shardingjdbc-singlerouting-encrypt.yaml
@@ -0,0 +1,45 @@
+dataSources:
+  shardingsphere_benchmark: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.encrypt.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+            
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false            
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/proxy/config-proxy-singlerouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/proxy/config-proxy-singlerouting-masterslave.yaml
new file mode 100644
index 0000000..f0dd41c
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/proxy/config-proxy-singlerouting-masterslave.yaml
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds:
+    url: jdbc:mysql://ss.benchmark.singlerouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.singlerouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: master_ds
+        slaveDataSourceNames: [slave_ds_0]
+
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/shardingjdbc/config-shardingjdbc-singlerouting-masterslave.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/shardingjdbc/config-shardingjdbc-singlerouting-masterslave.yaml
new file mode 100644
index 0000000..a6a7a08
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/masterslave/shardingjdbc/config-shardingjdbc-singlerouting-masterslave.yaml
@@ -0,0 +1,60 @@
+dataSources:
+  ds_master: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.masterslave.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    password:
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_slave0: !!com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.masterslave.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    username: root
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    password:
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds:
+        name: ms_ds
+        masterDataSourceName: ds_master
+        slaveDataSourceNames: [ds_slave0]
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false        
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/proxy/config-proxy-singlerouting-sharding-masterslave-enc.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/proxy/config-proxy-singlerouting-sharding-masterslave-enc.yaml
new file mode 100644
index 0000000..b51895a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/proxy/config-proxy-singlerouting-sharding-masterslave-enc.yaml
@@ -0,0 +1,133 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of master-slave rule.
+#
+# If you want to use master-slave, please refer to this file;
+# if you want to use sharding, please refer to the config-sharding.yaml.
+#
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  master_ds_0:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_0:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_1:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_1:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_2:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_2:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  master_ds_3:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  slave_ds_3:
+    url: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: master_ds_0
+        slaveDataSourceNames: [slave_ds_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: master_ds_1
+        slaveDataSourceNames: [slave_ds_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: master_ds_2
+        slaveDataSourceNames: [slave_ds_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: master_ds_3
+        slaveDataSourceNames: [slave_ds_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-singlerouting-sharding-masterslave-encrypt.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-singlerouting-sharding-masterslave-encrypt.yaml
new file mode 100644
index 0000000..4a81c5e
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding-masterslave-encrypt/shardingjdbc/config-shardingjdbc-singlerouting-sharding-masterslave-encrypt.yaml
@@ -0,0 +1,254 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1_slave_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2_slave_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.master.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3_slave_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.shardingmasterslaveencrypt.slave.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ms_ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ms_ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+
+  - !ENCRYPT
+    encryptors:
+      encryptor_aes:
+        props:
+          aes-key-value: '123456abc'
+        type: AES
+      encryptor_md5:
+        type: md5
+    tables:
+      sbtest:
+        columns:
+          c:
+            cipherColumn: c
+            encryptorName: encryptor_aes
+          pad:
+            cipherColumn: pad
+            encryptorName: encryptor_md5
+
+  - !MASTER_SLAVE
+    dataSources:
+      ms_ds_0:
+        name: ms_ds_0
+        masterDataSourceName: ds_0
+        slaveDataSourceNames: [ds_0_slave_0]
+        loadBalancerName: roundRobin
+      ms_ds_1:
+        name: ms_ds_1
+        masterDataSourceName: ds_1
+        slaveDataSourceNames: [ds_1_slave_1]
+        loadBalancerName: roundRobin
+      ms_ds_2:
+        name: ms_ds_2
+        masterDataSourceName: ds_2
+        slaveDataSourceNames: [ds_2_slave_2]
+        loadBalancerName: roundRobin
+      ms_ds_3:
+        name: ms_ds_3
+        masterDataSourceName: ds_3
+        slaveDataSourceNames: [ds_3_slave_3]
+        loadBalancerName: roundRobin
+    loadBalancers:
+      roundRobin:
+        type: ROUND_ROBIN
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is afalsevailable processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false        
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/proxy/config-proxy-singlerouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/proxy/config-proxy-singlerouting-sharding.yaml
new file mode 100644
index 0000000..8322021
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/proxy/config-proxy-singlerouting-sharding.yaml
@@ -0,0 +1,63 @@
+######################################################################################################
+#
+# Here you can configure the rules for the proxy.
+# This example is configuration of sharding rule.
+#
+# If you want to use sharding, please refer to this file;
+# if you want to use master-slave, please refer to the config-proxy-rangerouting-masterslave.yaml.
+#
+######################################################################################################
+
+schemaName: sharding_db
+
+dataSourceCommon:
+  username: root
+  password:
+  connectionTimeoutMilliseconds: 30000
+  idleTimeoutMilliseconds: 60000
+  maxLifetimeMilliseconds: 1800000
+  maxPoolSize: 200
+  minPoolSize: 200
+  maintenanceIntervalMilliseconds: 30000
+
+dataSources:
+  press_test_0:
+    url: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_1:
+    url: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_2:
+    url: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+  press_test_3:
+    url: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: press_test_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: press_test_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
\ No newline at end of file
diff --git a/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/shardingjdbc/config-shardingjdbc-singlerouting-sharding.yaml b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/shardingjdbc/config-shardingjdbc-singlerouting-sharding.yaml
new file mode 100644
index 0000000..e84b72a
--- /dev/null
+++ b/shardingsphere-benchmark/src/main/resources/yaml/singlerouting/sharding/shardingjdbc/config-shardingjdbc-singlerouting-sharding.yaml
@@ -0,0 +1,126 @@
+dataSources:
+  ds_0: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds0:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_1: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds1:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_2: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds2:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+  ds_3: !!com.zaxxer.hikari.HikariDataSource
+    username: root
+    password:
+    jdbcUrl: jdbc:mysql://ss.benchmark.singlerouting.sharding.ds3:3306/shardingsphere_benchmark?serverTimezone=UTC&useSSL=false
+    driverClassName: com.mysql.jdbc.Driver
+    connectionTimeout: 30000
+    idleTimeout: 60000
+    maxLifetime: 1800000
+    maximumPoolSize: 200
+    dataSourceProperties:
+      cachePrepStmts: true
+      prepStmtCacheSize: 250
+      prepStmtCacheSqlLimit: 2048
+      useLocalSessionState: true
+      rewriteBatchedStatements: true
+      cacheResultSetMetadata: true
+      cacheServerConfiguration: true
+      elideSetAutoCommits: true
+      maintainTimeStats: false
+      netTimeoutForStreamingResults: 0
+      useServerPrepStmts: true
+
+rules:
+  - !SHARDING
+    tables:
+      sbtest:
+        actualDataNodes: ds_${0..3}.sbtest${0..99}
+        databaseStrategy:
+          standard:
+            shardingColumn: id
+            shardingAlgorithmName: database_inline
+        tableStrategy:
+          standard:
+            shardingColumn: k
+            shardingAlgorithmName: table_inline
+        keyGenerateStrategy:
+          column: id
+          keyGeneratorName: increment
+    bindingTables:
+      - sbtest
+
+    shardingAlgorithms:
+      database_inline:
+        type: INLINE
+        props:
+          algorithm-expression: ds_${id % 4}
+      table_inline:
+        type: INLINE
+        props:
+          algorithm-expression: sbtest${k % 100}
+    keyGenerators:
+      increment:
+        type: SNOWFLAKE
+        
+props:
+  max.connections.size.per.query: 10
+  acceptor.size: 200  # The default value is available processors count * 2.
+  executor.size: 200  # Infinite by default.
+  query.with.cipher.column: true
+  sql.show: false
+  allow.range.query.with.inline.sharding: false
+  check.table.metadata.enabled: false