You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/04/13 01:48:22 UTC

[incubator-doris] branch master updated: [Refactor][doc] add doc for auth management and conf (#8951)

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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 767000b3f9 [Refactor][doc] add doc for auth management and conf (#8951)
767000b3f9 is described below

commit 767000b3f99bfbd02ab469de0670f58f2efc54c8
Author: wudi <67...@qq.com>
AuthorDate: Wed Apr 13 09:48:17 2022 +0800

    [Refactor][doc] add doc for auth management and conf (#8951)
---
 new-docs/en/admin-manual/config/be-config.md       |    6 +-
 new-docs/en/admin-manual/config/user-property.md   |    2 +-
 new-docs/en/admin-manual/user-privilege.md         |    2 +
 new-docs/en/advanced/broker.md                     |  178 +-
 new-docs/en/advanced/bucket-shuffle-join.md        |   77 +
 new-docs/en/advanced/cache/partition-cache.md      |  232 +++
 new-docs/en/advanced/colocation-join.md            |  381 ++++
 new-docs/en/advanced/orthogonal-bitmap-manual.md   |  131 ++
 .../en/advanced/partition/table-temp-partition.md  |  260 +++
 new-docs/en/advanced/resource.md                   |  131 +-
 new-docs/en/advanced/time-zone.md                  |   68 +
 new-docs/en/advanced/variables.md                  |  474 +++++
 new-docs/zh-CN/admin-manual/config/be-config.md    | 1516 +++++++++++++-
 new-docs/zh-CN/admin-manual/config/fe-config.md    | 2196 +++++++++++++++++++-
 .../zh-CN/admin-manual/config/user-property.md     |   48 +-
 new-docs/zh-CN/admin-manual/user-privilege.md      |  196 +-
 new-docs/zh-CN/advanced/broker.md                  |  168 +-
 new-docs/zh-CN/advanced/resource.md                |  123 +-
 18 files changed, 6175 insertions(+), 14 deletions(-)

diff --git a/new-docs/en/admin-manual/config/be-config.md b/new-docs/en/admin-manual/config/be-config.md
index 4707ebfc51..f0f830cfe2 100644
--- a/new-docs/en/admin-manual/config/be-config.md
+++ b/new-docs/en/admin-manual/config/be-config.md
@@ -456,7 +456,7 @@ Cgroups assigned to doris
 ### `doris_max_scan_key_num`
 
 * Type: int
-* Description: Used to limit the maximum number of scan keys that a scan node can split in a query request. When a conditional query request reaches the scan node, the scan node will try to split the conditions related to the key column in the query condition into multiple scan key ranges. After that, these scan key ranges will be assigned to multiple scanner threads for data scanning. A larger value usually means that more scanner threads can be used to increase the parallelism of the s [...]
+* Description: Used to limit the maximum number of scan keys that a scan node can split in a query request. When a conditional query request reaches the scan node, the scan node will try to split the conditions related to the key column in the query condition into multiple scan key ranges. After that, these scan key ranges will be assigned to multiple scanner threads for data scanning. A larger value usually means that more scanner threads can be used to increase the parallelism of the s [...]
 * Default value: 1024
 
 When the concurrency cannot be improved in high concurrency scenarios, try to reduce this value and observe the impact.
@@ -787,7 +787,7 @@ The maximum external scan cache batch count, which means that the cache max_memo
 ### `max_pushdown_conditions_per_column`
 
 * Type: int
-* Description: Used to limit the maximum number of conditions that can be pushed down to the storage engine for a single column in a query request. During the execution of the query plan, the filter conditions on some columns can be pushed down to the storage engine, so that the index information in the storage engine can be used for data filtering, reducing the amount of data that needs to be scanned by the query. Such as equivalent conditions, conditions in IN predicates, etc. In most  [...]
+* Description: Used to limit the maximum number of conditions that can be pushed down to the storage engine for a single column in a query request. During the execution of the query plan, the filter conditions on some columns can be pushed down to the storage engine, so that the index information in the storage engine can be used for data filtering, reducing the amount of data that needs to be scanned by the query. Such as equivalent conditions, conditions in IN predicates, etc. In most  [...]
 * Default value: 1024
 
 * Example
@@ -1154,7 +1154,7 @@ Cache for storage page size
     * 3./home/disk2/doris, indicates capacity limit is disk capacity, HDD(default)
     
     eg.2: `storage_root_path=/home/disk1/doris,medium:hdd,capacity:50;/home/disk2/doris,medium:ssd,capacity:50`
-      
+    
     * 1./home/disk1/doris,medium:hdd,capacity:10,capacity limit is 10GB, HDD;
     * 2./home/disk2/doris,medium:ssd,capacity:50,capacity limit is 50GB, SSD;
 
diff --git a/new-docs/en/admin-manual/config/user-property.md b/new-docs/en/admin-manual/config/user-property.md
index 27a2d3653f..82aca8d2b2 100644
--- a/new-docs/en/admin-manual/config/user-property.md
+++ b/new-docs/en/admin-manual/config/user-property.md
@@ -1,4 +1,4 @@
---- 
+---
 {
     "title": "User Property",
     "language": "en"
diff --git a/new-docs/en/admin-manual/user-privilege.md b/new-docs/en/admin-manual/user-privilege.md
index f20316b1f7..60ac1a17b9 100644
--- a/new-docs/en/admin-manual/user-privilege.md
+++ b/new-docs/en/admin-manual/user-privilege.md
@@ -221,4 +221,6 @@ Here are some usage scenarios of Doris privilege system.
 
     Doris itself does not support blacklist, only whitelist, but we can simulate blacklist in some way. Suppose you first create a user named `user@'192.%'`, which allows users from `192.*` to login. At this time, if you want to prohibit users from `192.168.10.1` from logging in, you can create another user with `cmy@'192.168.10.1'` and set a new password. Since `192.168.10.1` has a higher priority than `192.%`, user can no longer login by using the old password from `192.168.10.1`.
 
+## More help
 
+For more detailed syntax and best practices for permission management use, please refer to the [GRANTS](../sql-manual/sql-reference-v2/Account-Management-Statements/GRANT.html) command manual. Enter `HELP GRANTS` at the command line of the MySql client for more help information.
diff --git a/new-docs/en/advanced/broker.md b/new-docs/en/advanced/broker.md
index 1f9e721196..302750ddfc 100644
--- a/new-docs/en/advanced/broker.md
+++ b/new-docs/en/advanced/broker.md
@@ -24,4 +24,180 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# Broker
\ No newline at end of file
+# Broker
+
+Broker is an optional process in the Doris cluster. It is mainly used to support Doris to read and write files or directories on remote storage, such as HDFS, BOS, and AFS.
+
+Broker provides services through an RPC service port. It is a stateless JVM process that is responsible for encapsulating some POSIX-like file operations for read and write operations on remote storage, such as open, pred, pwrite, and so on.
+In addition, the Broker does not record any other information, so the connection information, file information, permission information, and so on stored remotely need to be passed to the Broker process in the RPC call through parameters in order for the Broker to read and write files correctly .
+
+Broker only acts as a data channel and does not participate in any calculations, so it takes up less memory. Usually one or more Broker processes are deployed in a Doris system. And the same type of Broker will form a group and set a ** Broker name **.
+
+Broker's position in the Doris system architecture is as follows:
+
+```
++----+   +----+
+| FE |   | BE |
++-^--+   +--^-+
+  |         |
+  |         |
++-v---------v-+
+|   Broker    |
++------^------+
+       |
+       |
++------v------+
+|HDFS/BOS/AFS |
++-------------+
+```
+
+This document mainly introduces the parameters that Broker needs when accessing different remote storages, such as connection information,
+authorization information, and so on.
+
+## Supported Storage System
+
+Different types of brokers support different storage systems.
+
+1. Community HDFS
+
+    * Support simple authentication access
+    * Support kerberos authentication access
+    * Support HDFS HA mode access
+
+2. Baidu HDFS / AFS (not supported by open source version)
+
+    * Support UGI simple authentication access
+
+3. Baidu Object Storage BOS (not supported by open source version)
+
+    * Support AK / SK authentication access
+
+## Function provided by Broker
+
+1. [Broker Load](../data-operate/import/import-way/broker-load-manual.html)
+2. [Export](../data-operate/export/export-manual.html)
+3. [Backup](../admin-manual/data-admin/backup.md)
+
+## Broker Information
+
+Broker information includes two parts: ** Broker name ** and ** Certification information **. The general syntax is as follows:
+
+```
+WITH BROKER "broker_name" 
+(
+    "username" = "xxx",
+    "password" = "yyy",
+    "other_prop" = "prop_value",
+    ...
+);
+```
+
+### Broker Name
+
+Usually the user needs to specify an existing Broker Name through the `WITH BROKER" broker_name "` clause in the operation command.
+Broker Name is a name that the user specifies when adding a Broker process through the ALTER SYSTEM ADD BROKER command.
+A name usually corresponds to one or more broker processes. Doris selects available broker processes based on the name.
+You can use the `SHOW BROKER` command to view the Brokers that currently exist in the cluster.
+
+**Note: Broker Name is just a user-defined name and does not represent the type of Broker.**
+
+### Certification Information
+
+Different broker types and different access methods need to provide different authentication information.
+Authentication information is usually provided as a Key-Value in the Property Map after `WITH BROKER" broker_name "`.
+
+#### Community HDFS
+
+1. Simple Authentication
+
+    Simple authentication means that Hadoop configures `hadoop.security.authentication` to` simple`.
+
+    Use system users to access HDFS. Or add in the environment variable started by Broker: ```HADOOP_USER_NAME```.
+    
+    ```
+    (
+        "username" = "user",
+        "password" = ""
+    );
+    ```
+    
+    Just leave the password blank.
+
+2. Kerberos Authentication
+
+    The authentication method needs to provide the following information::
+    
+    * `hadoop.security.authentication`: Specify the authentication method as kerberos.
+    * `kerberos_principal`: Specify the principal of kerberos.
+    * `kerberos_keytab`: Specify the path to the keytab file for kerberos. The file must be an absolute path to a file on the server where the broker process is located. And can be accessed by the Broker process.
+    * `kerberos_keytab_content`: Specify the content of the keytab file in kerberos after base64 encoding. You can choose one of these with `kerberos_keytab` configuration.
+
+    Examples are as follows:
+    
+    ```
+    (
+        "hadoop.security.authentication" = "kerberos",
+        "kerberos_principal" = "doris@YOUR.COM",
+        "kerberos_keytab" = "/home/doris/my.keytab"
+    )
+    ```
+    ```
+    (
+        "hadoop.security.authentication" = "kerberos",
+        "kerberos_principal" = "doris@YOUR.COM",
+        "kerberos_keytab_content" = "ASDOWHDLAWIDJHWLDKSALDJSDIWALD"
+    )
+    ```
+    If Kerberos authentication is used, the [krb5.conf](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html) file is required when deploying the Broker process.
+    The krb5.conf file contains Kerberos configuration information, Normally, you should install your krb5.conf file in the directory /etc. You can override the default location by setting the environment variable KRB5_CONFIG.
+    An example of the contents of the krb5.conf file is as follows:
+    ```
+    [libdefaults]
+        default_realm = DORIS.HADOOP
+        default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
+        default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
+        dns_lookup_kdc = true
+        dns_lookup_realm = false
+    
+    [realms]
+        DORIS.HADOOP = {
+            kdc = kerberos-doris.hadoop.service:7005
+        }
+    ```
+    
+3. HDFS HA Mode
+
+    This configuration is used to access HDFS clusters deployed in HA mode.
+    
+    * `dfs.nameservices`: Specify the name of the hdfs service, custom, such as "dfs.nameservices" = "my_ha".
+    * `dfs.ha.namenodes.xxx`:  Custom namenode names. Multiple names are separated by commas, where xxx is the custom name in `dfs.nameservices`, such as" dfs.ha.namenodes.my_ha "=" my_nn ".
+    * `dfs.namenode.rpc-address.xxx.nn`: Specify the rpc address information of namenode, Where nn represents the name of the namenode configured in `dfs.ha.namenodes.xxx`, such as: "dfs.namenode.rpc-address.my_ha.my_nn" = "host:port".
+    * `dfs.client.failover.proxy.provider`: Specify the provider for the client to connect to the namenode. The default is: org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider.
+
+    Examples are as follows:
+    
+    ```
+    (
+        "dfs.nameservices" = "my_ha",
+        "dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2",
+        "dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
+        "dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
+        "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+    )
+    ```
+    
+    The HA mode can be combined with the previous two authentication methods for cluster access. If you access HA HDFS with simple authentication:
+    
+    ```
+    (
+        "username"="user",
+        "password"="passwd",
+        "dfs.nameservices" = "my_ha",
+        "dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2",
+        "dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
+        "dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
+        "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+    )
+    ```
+   The configuration for accessing the HDFS cluster can be written to the hdfs-site.xml file. When users use the Broker process to read data from the HDFS cluster, they only need to fill in the cluster file path and authentication information.
+   
diff --git a/new-docs/en/advanced/bucket-shuffle-join.md b/new-docs/en/advanced/bucket-shuffle-join.md
index 111895b14e..9a54d0644e 100644
--- a/new-docs/en/advanced/bucket-shuffle-join.md
+++ b/new-docs/en/advanced/bucket-shuffle-join.md
@@ -26,3 +26,80 @@ under the License.
 
 # Bucket Shuffle Join
 
+Bucket Shuffle Join is a new function officially added in Doris 0.14. The purpose is to provide local optimization for some join queries to reduce the time-consuming of data transmission between nodes and speed up the query.
+
+It's design, implementation can be referred to [ISSUE 4394](https://github.com/apache/incubator-doris/issues/4394)。
+
+## Noun Interpretation
+
+* FE: Frontend, the front-end node of Doris. Responsible for metadata management and request access.
+* BE: Backend, Doris's back-end node. Responsible for query execution and data storage.
+* Left table: the left table in join query. Perform probe expr. The order can be adjusted by join reorder.
+* Right table: the right table in join query. Perform build expr The order can be adjusted by join reorder.
+
+## Principle
+The conventional distributed join methods supported by Doris is: `Shuffle Join, Broadcast Join`. Both of these join will lead to some network overhead.
+
+For example, there are join queries for table A and table B. the join method is hashjoin. The cost of different join types is as follows:
+* **Broadcast Join**: If table a has three executing hashjoinnodes according to the data distribution, table B needs to be sent to the three HashJoinNode. Its network overhead is `3B `, and its memory overhead is `3B`. 
+* **Shuffle Join**: Shuffle join will distribute the data of tables A and B to the nodes of the cluster according to hash calculation, so its network overhead is `A + B` and memory overhead is `B`.
+
+The data distribution information of each Doris table is saved in FE. If the join statement hits the data distribution column of the left table, we should use the data distribution information to reduce the network and memory overhead of the join query. This is the source of the idea of bucket shuffle join.
+
+![image.png](/images/bucket_shuffle_join.png)
+
+The picture above shows how the Bucket Shuffle Join works. The SQL query is A table join B table. The equivalent expression of join hits the data distribution column of A. According to the data distribution information of table A. Bucket Shuffle Join sends the data of table B to the corresponding data storage and calculation node of table A. The cost of Bucket Shuffle Join is as follows:
+
+* network cost: ``` B < min(3B, A + B) ```
+
+* memory cost: ``` B <= min(3B, B) ```
+
+Therefore, compared with Broadcast Join and Shuffle Join, Bucket shuffle join has obvious performance advantages. It reduces the time-consuming of data transmission between nodes and the memory cost of join. Compared with Doris's original join method, it has the following advantages
+
+* First of all, Bucket Shuffle Join reduces the network and memory cost which makes some join queries have better performance. Especially when FE can perform partition clipping and bucket clipping of the left table.
+* Secondly, unlike Colorate Join, it is not intrusive to the data distribution of tables, which is transparent to users. There is no mandatory requirement for the data distribution of the table, which is not easy to lead to the problem of data skew.
+* Finally, it can provide more optimization space for join reorder.
+
+## Usage
+
+### Set session variable
+
+Set session variable `enable_bucket_shuffle_join` to `true`, FE will automatically plan queries that can be converted to Bucket Shuffle Join.
+
+```
+set enable_bucket_shuffle_join = true;
+```
+
+In FE's distributed query planning, the priority order is Colorate Join -> Bucket Shuffle Join -> Broadcast Join -> Shuffle Join. However, if the user explicitly hints the type of join, for example: 
+
+```
+select * from test join [shuffle] baseall on test.k1 = baseall.k1;
+```
+the above order of preference will not take effect.
+
+The session variable is set to `true` by default in version 0.14, while it needs to be set to `true` manually in version 0.13.
+
+### View the type of join
+
+You can use the `explain` command to check whether the join is a Bucket Shuffle Join
+
+```sql
+|   2:HASH JOIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              [...]
+|   |  join op: INNER JOIN (BUCKET_SHUFFLE)                                                                                                                                                                                                                                                                                                                                                                                                                                                                  [...]
+|   |  hash predicates:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      [...]
+|   |  colocate: false, reason: table not in the same group                                                                                                                                                                                                                                                                                                                                                                                                                                                  [...]
+|   |  equal join conjunct: `test`.`k1` = `baseall`.`k1`                                         
+```
+
+The join type indicates that the join method to be used is:`BUCKET_SHUFFLE`。
+
+## Planning rules of Bucket Shuffle Join
+
+In most scenarios, users only need to turn on the session variable by default to transparently use the performance improvement brought by this join method. However, if we understand the planning rules of Bucket Shuffle Join, we can use it to write more efficient SQL.
+
+* Bucket Shuffle Join only works when the join condition is equivalent. The reason is similar to Colorate Join. They all rely on hash to calculate the determined data distribution.
+* The bucket column of two tables is included in the equivalent join condition. When the bucket column of the left table is an equivalent join condition, it has a high probability of being planned as a Bucket Shuffle Join.
+* Because the hash values of different data types have different calculation results. Bucket Shuffle Join requires that the bucket column type of the left table and the equivalent join column type of the right table should be consistent, otherwise the corresponding planning cannot be carried out.
+* Bucket Shuffle Join only works on Doris native OLAP tables. For ODBC, MySQL, ES External Table, when they are used as left tables, they cannot be planned as Bucket Shuffle Join.
+* For partitioned tables, because the data distribution rules of each partition may be different, the Bucket Shuffle Join can only guarantee that the left table is a single partition. Therefore, in SQL execution, we need to use the `where` condition as far as possible to make the partition clipping policy effective.
+* If the left table is a colorate table, the data distribution rules of each partition are determined. So the bucket shuffle join can perform better on the colorate table.
diff --git a/new-docs/en/advanced/cache/partition-cache.md b/new-docs/en/advanced/cache/partition-cache.md
index 51a477d483..1f98ea86a5 100644
--- a/new-docs/en/advanced/cache/partition-cache.md
+++ b/new-docs/en/advanced/cache/partition-cache.md
@@ -26,3 +26,235 @@ under the License.
 
 # Partition Cache
 
+## Demand scenario
+
+In most data analysis scenarios, write less and read more. Data is written once and read frequently. For example, the dimensions and indicators involved in a report are calculated at one time in the early morning, but there are hundreds or even thousands of times every day. page access, so it is very suitable for caching the result set. In data analysis or BI applications, the following business scenarios exist:
+
+- **High concurrency scenario**, Doris can better support high concurrency, but a single server cannot carry too high QPS
+- **Kanban for complex charts**, complex Dashboard or large-screen applications, the data comes from multiple tables, each page has dozens of queries, although each query is only tens of milliseconds, but the overall query time will be in a few seconds
+- **Trend analysis**, the query for a given date range, the indicators are displayed by day, such as querying the trend of the number of users in the last 7 days, this type of query has a large amount of data and a wide range of queries, and the query time often takes tens of seconds
+- **User repeated query**, if the product does not have an anti-reload mechanism, the user repeatedly refreshes the page due to hand error or other reasons, resulting in a large number of repeated SQL submissions
+
+In the above four scenarios, the solution at the application layer is to put the query results in Redis, update the cache periodically or manually refresh the cache by the user, but this solution has the following problems:
+
+- **Data inconsistency**, unable to perceive the update of data, causing users to often see old data
+- **Low hit rate**, cache the entire query result, if the data is written in real time, the cache is frequently invalidated, the hit rate is low and the system load is heavy
+- **Additional cost**, the introduction of external cache components will bring system complexity and increase additional costs
+
+## Solution
+
+This partitioned caching strategy can solve the above problems, giving priority to ensuring data consistency. On this basis, the cache granularity is refined and the hit rate is improved. Therefore, it has the following characteristics:
+
+- Users do not need to worry about data consistency, cache invalidation is controlled by version, and the cached data is consistent with the data queried from BE
+- No additional components and costs, cached results are stored in BE's memory, users can adjust the cache memory size as needed
+- Implemented two caching strategies, SQLCache and PartitionCache, the latter has a finer cache granularity
+- Use consistent hashing to solve the problem of BE nodes going online and offline. The caching algorithm in BE is an improved LRU
+
+## SQLCache
+
+SQLCache stores and retrieves the cache according to the SQL signature, the partition ID of the queried table, and the latest version of the partition. The combination of the three determines a cached data set. If any one changes, such as SQL changes, such as query fields or conditions are different, or the version changes after the data is updated, the cache will not be hit.
+
+If multiple tables are joined, use the latest updated partition ID and the latest version number. If one of the tables is updated, the partition ID or version number will be different, and the cache will also not be hit.
+
+SQLCache is more suitable for T+1 update scenarios. Data is updated in the early morning. The results obtained from the BE for the first query are put into the cache, and subsequent identical queries are obtained from the cache. Real-time update data can also be used, but there may be a problem of low hit rate. You can refer to the following PartitionCache.
+
+## PartitionCache
+
+### Design Principles
+
+1. SQL can be split in parallel, Q = Q1 ∪ Q2 ... ∪ Qn, R= R1 ∪ R2 ... ∪ Rn, Q is the query statement, R is the result set
+2. Split into read-only partitions and updatable partitions, read-only partitions are cached, and update partitions are not cached
+
+As above, query the number of users per day in the last 7 days, such as partitioning by date, the data is only written to the partition of the day, and the data of other partitions other than the day is fixed. Under the same query SQL, query a certain part that does not update Partition indicators are fixed. As follows, the number of users in the first 7 days is queried on 2020-03-09, the data from 2020-03-03 to 2020-03-07 comes from the cache, the first query on 2020-03-08 comes from th [...]
+
+Therefore, when querying N days of data, the data is updated on the most recent D days. Every day is only a query with a different date range and a similar query. Only D partitions need to be queried, and the other parts are from the cache, which can effectively reduce the cluster load and reduce query time.
+
+```sql
+MySQL [(none)]> SELECT eventdate,count(userid) FROM testdb.appevent WHERE eventdate>="2020-03-03" AND eventdate<="2020-03-09" GROUP BY eventdate ORDER BY eventdate;
++------------+-----------------+
+| eventdate  | count(`userid`) |
++------------+-----------------+
+| 2020-03-03 |              15 |
+| 2020-03-04 |              20 |
+| 2020-03-05 |              25 |
+| 2020-03-06 |              30 |
+| 2020-03-07 |              35 |
+| 2020-03-08 |              40 | //First from partition, subsequent from cache
+| 2020-03-09 |              25 | //from partition
++------------+-----------------+
+7 rows in set (0.02 sec)
+```
+
+In PartitionCache, the first-level key of the cache is the 128-bit MD5 signature of the SQL after the partition condition is removed. The following is the rewritten SQL to be signed:
+
+```sql
+SELECT eventdate,count(userid) FROM testdb.appevent GROUP BY eventdate ORDER BY eventdate;
+```
+
+The cached second-level key is the content of the partition field of the query result set, such as the content of the eventdate column of the query result above, and the auxiliary information of the second-level key is the version number and version update time of the partition.
+
+The following demonstrates the process of executing the above SQL for the first time on 2020-03-09:
+
+1. Get data from cache
+
+```text
++------------+-----------------+
+| 2020-03-03 |              15 |
+| 2020-03-04 |              20 |
+| 2020-03-05 |              25 |
+| 2020-03-06 |              30 |
+| 2020-03-07 |              35 |
++------------+-----------------+
+```
+
+1. SQL and data to get data from BE SQL and data to get data from BE
+
+```sql
+SELECT eventdate,count(userid) FROM testdb.appevent WHERE eventdate>="2020-03-08" AND eventdate<="2020-03-09" GROUP BY eventdate ORDER BY eventdate;
+
++------------+-----------------+
+| 2020-03-08 |              40 |
++------------+-----------------+
+| 2020-03-09 |              25 | 
++------------+-----------------+
+```
+
+1. The last data sent to the terminal
+
+```text
++------------+-----------------+
+| eventdate  | count(`userid`) |
++------------+-----------------+
+| 2020-03-03 |              15 |
+| 2020-03-04 |              20 |
+| 2020-03-05 |              25 |
+| 2020-03-06 |              30 |
+| 2020-03-07 |              35 |
+| 2020-03-08 |              40 |
+| 2020-03-09 |              25 |
++------------+-----------------+
+```
+
+1. data sent to cache
+
+```text
++------------+-----------------+
+| 2020-03-08 |              40 |
++------------+-----------------+
+```
+
+Partition cache is suitable for partitioning by date, some partitions are updated in real time, and the query SQL is relatively fixed.
+
+Partition fields can also be other fields, but need to ensure that only a small number of partition updates.
+
+### Some restrictions
+
+- Only OlapTable is supported, other tables such as MySQL have no version information and cannot sense whether the data is updated
+- Only supports grouping by partition field, does not support grouping by other fields, grouping by other fields, the grouped data may be updated, which will cause the cache to be invalid
+- Only the first half of the result set, the second half of the result set and all cache hits are supported, and the result set is not supported to be divided into several parts by the cached data
+
+## How to use
+
+### Enable SQLCache
+
+Make sure cache_enable_sql_mode=true in fe.conf (default is true)
+
+```text
+vim fe/conf/fe.conf
+cache_enable_sql_mode=true
+```
+
+Setting variables in MySQL command line
+
+```sql
+MySQL [(none)]> set [global] enable_sql_cache=true;
+```
+
+Note: global is a global variable, not referring to the current session variable
+
+### Enable PartitionCache
+
+Make sure cache_enable_partition_mode=true in fe.conf (default is true)
+
+```text
+vim fe/conf/fe.conf
+cache_enable_partition_mode=true
+```
+
+Setting variables in MySQL command line
+
+```sql
+MySQL [(none)]> set [global] enable_partition_cache=true;
+```
+
+If two caching strategies are enabled at the same time, the following parameters need to be paid attention to:
+
+```text
+cache_last_version_interval_second=900
+```
+
+If the interval between the latest version of the partition is greater than cache_last_version_interval_second, the entire query result will be cached first. If it is less than this interval, if it meets the conditions of PartitionCache, press PartitionCache data.
+
+### Monitoring
+
+FE monitoring items:
+
+```text
+query_table          //Number of tables in Query
+query_olap_table     //Number of Olap tables in Query
+cache_mode_sql       //Identify the number of queries whose cache mode is sql
+cache_hit_sql        //The number of Cache hits by Query with mode sql
+query_mode_partition //Identify the number of queries whose cache mode is Partition
+cache_hit_partition  //Number of queries hit by Partition
+partition_all        //All partitions scanned in Query
+partition_hit        //Number of partitions hit by Cache
+
+Cache hit ratio = (cache_hit_sql + cache_hit_partition) / query_olap_table
+Partition hit ratio = partition_hit / partition_all
+```
+
+BE's monitoring items:
+
+```text
+query_cache_memory_total_byte     //Cache memory size
+query_query_cache_sql_total_count //Number of SQL in Cache
+query_cache_partition_total_count //Number of Cache partitions
+
+SQL average data size = cache_memory_total / cache_sql_total
+Partition average data size = cache_memory_total / cache_partition_total
+```
+
+Other monitoring: You can view the CPU and memory indicators of the BE node, the Query Percentile and other indicators in the Query statistics from Grafana, and adjust the Cache parameters to achieve business goals.
+
+### Optimization parameters
+
+The configuration item cache_result_max_row_count of FE, the maximum number of rows in the cache for the query result set, can be adjusted according to the actual situation, but it is recommended not to set it too large to avoid taking up too much memory, and the result set exceeding this size will not be cached.
+
+```text
+vim fe/conf/fe.conf
+cache_result_max_row_count=3000
+```
+
+The maximum number of partitions in BE cache_max_partition_count refers to the maximum number of partitions corresponding to each SQL. If it is partitioned by date, it can cache data for more than 2 years. If you want to keep the cache for a longer time, please set this parameter to a larger value and modify it at the same time. Parameter of cache_result_max_row_count.
+
+```text
+vim be/conf/be.conf
+cache_max_partition_count=1024
+```
+
+The cache memory setting in BE consists of two parameters, query_cache_max_size and query_cache_elasticity_size (in MB). If the memory exceeds query_cache_max_size + cache_elasticity_size, it will start to clean up and control the memory to below query_cache_max_size. These two parameters can be set according to the number of BE nodes, node memory size, and cache hit rate.
+
+```text
+query_cache_max_size_mb=256
+query_cache_elasticity_size_mb=128
+```
+
+Calculation method:
+
+If 10K queries are cached, each query caches 1000 rows, each row is 128 bytes, distributed on 10 BEs, then each BE requires 128M memory (10K*1000*128/10).
+
+## Unfinished Matters
+
+- Can the data of T+1 also be cached by Partition? Currently not supported
+- Similar SQL, 2 indicators were queried before, but now 3 indicators are queried. Can the cache of 2 indicators be used? Not currently supported
+- Partition by date, but need to aggregate data by week dimension, is PartitionCache available? Not currently supported
diff --git a/new-docs/en/advanced/colocation-join.md b/new-docs/en/advanced/colocation-join.md
index 2c9e855475..fd67ee5a8a 100644
--- a/new-docs/en/advanced/colocation-join.md
+++ b/new-docs/en/advanced/colocation-join.md
@@ -26,3 +26,384 @@ under the License.
 
 # Colocation Join
 
+Colocation Join is a new feature introduced in Doris 0.9. The purpose of this paper is to provide local optimization for some Join queries to reduce data transmission time between nodes and speed up queries.
+
+The original design, implementation and effect can be referred to [ISSUE 245](https://github.com/apache/incubator-doris/issues/245).
+
+The Colocation Join function has undergone a revision, and its design and use are slightly different from the original design. This document mainly introduces Colocation Join's principle, implementation, usage and precautions.
+
+## Noun Interpretation
+
+* FE: Frontend, the front-end node of Doris. Responsible for metadata management and request access.
+* BE: Backend, Doris's back-end node. Responsible for query execution and data storage.
+* Colocation Group (CG): A CG contains one or more tables. Tables within the same group have the same Colocation Group Schema and the same data fragmentation distribution.
+* Colocation Group Schema (CGS): Used to describe table in a CG and general Schema information related to Colocation. Including bucket column type, bucket number and copy number.
+
+## Principle
+
+The Colocation Join function is to make a CG of a set of tables with the same CGS. Ensure that the corresponding data fragments of these tables will fall on the same BE node. When tables in CG perform Join operations on bucket columns, local data Join can be directly performed to reduce data transmission time between nodes.
+
+The data of a table will eventually fall into a barrel according to the barrel column value Hash and the number of barrels modeled. Assuming that the number of buckets in a table is 8, there are eight buckets `[0, 1, 2, 3, 4, 5, 6, 7] `Buckets'. We call such a sequence a `Buckets Sequence`. Each Bucket has one or more Tablets. When a table is a single partitioned table, there is only one Tablet in a Bucket. If it is a multi-partition table, there will be more than one.
+
+In order for a table to have the same data distribution, the table in the same CG must ensure the following attributes are the same:
+
+1. Barrel row and number of barrels
+
+  Bucket column, that is, the column specified in `DISTRIBUTED BY HASH (col1, col2,...)'in the table building statement. Bucket columns determine which column values are used to Hash data from a table into different Tablets. Tables in the same CG must ensure that the type and number of barrel columns are identical, and the number of barrels is identical, so that the data fragmentation of multiple tables can be controlled one by one.
+
+2. Number of copies
+
+  The number of copies of all partitions of all tables in the same CG must be the same. If inconsistent, there may be a copy of a Tablet, and there is no corresponding copy of other table fragments on the same BE.
+
+Tables in the same CG do not require consistency in the number, scope, and type of partition columns.
+
+After fixing the number of bucket columns and buckets, the tables in the same CG will have the same Buckets Sequence. The number of replicas determines the number of replicas of Tablets in each bucket, which BE they are stored on. Suppose that Buckets Sequence is `[0, 1, 2, 3, 4, 5, 6, 7] `, and that BE nodes have `[A, B, C, D] `4. A possible distribution of data is as follows:
+
+```
++---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+| 0 | | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 |
++---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+| A | | B | | C | | D | | A | | B | | C | | D |
+|   | |   | |   | |   | |   | |   | |   | |   |
+| B | | C | | D | | A | | B | | C | | D | | A |
+|   | |   | |   | |   | |   | |   | |   | |   |
+| C | | D | | A | | B | | C | | D | | A | | B |
++---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+```
+
+The data of all tables in CG will be uniformly distributed according to the above rules, which ensures that the data with the same barrel column value are on the same BE node, and local data Join can be carried out.
+
+## Usage
+
+### Establishment of tables
+
+When creating a table, you can specify the attribute `"colocate_with"="group_name"` in `PROPERTIES`, which means that the table is a Colocation Join table and belongs to a specified Colocation Group.
+
+Examples:
+
+```
+CREATE TABLE tbl (k1 int, v1 int sum)
+DISTRIBUTED BY HASH(k1)
+BUCKETS 8
+PROPERTIES(
+  "colocate_with" = "group1"
+);
+```
+
+If the specified group does not exist, Doris automatically creates a group that contains only the current table. If the Group already exists, Doris checks whether the current table satisfies the Colocation Group Schema. If satisfied, the table is created and added to the Group. At the same time, tables create fragments and replicas based on existing data distribution rules in Groups.
+Group belongs to a database, and its name is unique in a database. Internal storage is the full name of Group `dbId_groupName`, but users only perceive groupName.
+
+### Delete table
+
+When the last table in Group is deleted completely (deleting completely means deleting from the recycle bin). Usually, when a table is deleted by the `DROP TABLE` command, it will be deleted after the default one-day stay in the recycle bin, and the group will be deleted automatically.
+
+### View Group
+
+The following command allows you to view the existing Group information in the cluster.
+
+```
+SHOW PROC '/colocation_group';
+
++-------------+--------------+--------------+------------+----------------+----------+----------+
+| GroupId     | GroupName    | TableIds     | BucketsNum | ReplicationNum | DistCols | IsStable |
++-------------+--------------+--------------+------------+----------------+----------+----------+
+| 10005.10008 | 10005_group1 | 10007, 10040 | 10         | 3              | int(11)  | true     |
++-------------+--------------+--------------+------------+----------------+----------+----------+
+```
+
+* GroupId: The unique identity of a group's entire cluster, with DB ID in the first half and group ID in the second half.
+* GroupName: The full name of Group.
+* Tablet Ids: The group contains a list of Tables'ID.
+* Buckets Num: Number of barrels.
+* Replication Num: Number of copies.
+* DistCols: Distribution columns, 
+* IsStable: Is the group stable (for the definition of stability, see section `Collocation replica balancing and repair').
+
+You can further view the data distribution of a group by following commands:
+
+```
+SHOW PROC '/colocation_group/10005.10008';
+
++-------------+---------------------+
+| BucketIndex | BackendIds          |
++-------------+---------------------+
+| 0           | 10004, 10002, 10001 |
+| 1           | 10003, 10002, 10004 |
+| 2           | 10002, 10004, 10001 |
+| 3           | 10003, 10002, 10004 |
+| 4           | 10002, 10004, 10003 |
+| 5           | 10003, 10002, 10001 |
+| 6           | 10003, 10004, 10001 |
+| 7           | 10003, 10004, 10002 |
++-------------+---------------------+
+```
+
+* BucketIndex: Subscript to the bucket sequence.
+* Backend Ids: A list of BE node IDs where data fragments are located in buckets.
+
+> The above commands require ADMIN privileges. Normal user view is not supported at this time.
+
+### Modify Colocate Group
+
+You can modify the Colocation Group property of a table that has been created. Examples:
+
+`ALTER TABLE tbl SET ("colocate_with" = "group2");`
+
+* If the table has not previously specified a Group, the command checks the Schema and adds the table to the Group (if the Group does not exist, it will be created).
+* If other groups are specified before the table, the command first removes the table from the original group and adds a new group (if the group does not exist, it will be created).
+
+You can also delete the Colocation attribute of a table by following commands:
+
+`ALTER TABLE tbl SET ("colocate_with" = "");`
+
+### Other related operations
+
+When an ADD PARTITION is added to a table with a Colocation attribute and the number of copies is modified, Doris checks whether the modification violates the Colocation Group Schema and rejects it if it does.
+
+## Colocation Duplicate Balancing and Repair
+
+Copy distribution of Colocation tables needs to follow the distribution specified in Group, so it is different from common fragmentation in replica repair and balancing.
+
+Group itself has a Stable attribute, when Stable is true, which indicates that all fragments of the table in the current Group are not changing, and the Colocation feature can be used normally. When Stable is false, it indicates that some tables in Group are being repaired or migrated. At this time, Colocation Join of related tables will degenerate into ordinary Join.
+
+### Replica Repair
+
+Copies can only be stored on specified BE nodes. So when a BE is unavailable (downtime, Decommission, etc.), a new BE is needed to replace it. Doris will first look for the BE with the lowest load to replace it. After replacement, all data fragments on the old BE in the Bucket will be repaired. During the migration process, Group is marked Unstable.
+
+### Duplicate Equilibrium
+
+Doris will try to distribute the fragments of the Collocation table evenly across all BE nodes. For the replica balancing of common tables, the granularity is single replica, that is to say, it is enough to find BE nodes with lower load for each replica alone. The equilibrium of the Colocation table is at the Bucket level, where all replicas within a Bucket migrate together. We adopt a simple equalization algorithm, which distributes Buckets Sequence evenly on all BEs, regardless of the  [...]
+
+> Note 1: Current Colocation replica balancing and repair algorithms may not work well for heterogeneous deployed Oris clusters. The so-called heterogeneous deployment, that is, the BE node's disk capacity, number, disk type (SSD and HDD) is inconsistent. In the case of heterogeneous deployment, small BE nodes and large BE nodes may store the same number of replicas.
+>
+> Note 2: When a group is in an Unstable state, the Join of the table in it will degenerate into a normal Join. At this time, the query performance of the cluster may be greatly reduced. If you do not want the system to balance automatically, you can set the FE configuration item `disable_colocate_balance` to prohibit automatic balancing. Then open it at the right time. (See Section `Advanced Operations` for details)
+
+## Query
+
+The Colocation table is queried in the same way as ordinary tables, and users do not need to perceive Colocation attributes. If the Group in which the Colocation table is located is in an Unstable state, it will automatically degenerate to a normal Join.
+
+Examples are given to illustrate:
+
+Table 1:
+
+```
+CREATE TABLE `tbl1` (
+    `k1` date NOT NULL COMMENT "",
+    `k2` int(11) NOT NULL COMMENT "",
+    `v1` int(11) SUM NOT NULL COMMENT ""
+) ENGINE=OLAP
+AGGREGATE KEY(`k1`, `k2`)
+PARTITION BY RANGE(`k1`)
+(
+    PARTITION p1 VALUES LESS THAN ('2019-05-31'),
+    PARTITION p2 VALUES LESS THAN ('2019-06-30')
+)
+DISTRIBUTED BY HASH(`k2`) BUCKETS 8
+PROPERTIES (
+    "colocate_with" = "group1"
+);
+```
+
+Table 2:
+
+```
+CREATE TABLE `tbl2` (
+    `k1` datetime NOT NULL COMMENT "",
+    `k2` int(11) NOT NULL COMMENT "",
+    `v1` double SUM NOT NULL COMMENT ""
+) ENGINE=OLAP
+AGGREGATE KEY(`k1`, `k2`)
+DISTRIBUTED BY HASH(`k2`) BUCKETS 8
+PROPERTIES (
+    "colocate_with" = "group1"
+);
+```
+
+View the query plan:
+
+```
+DESC SELECT * FROM tbl1 INNER JOIN tbl2 ON (tbl1.k2 = tbl2.k2);
+
++----------------------------------------------------+
+| Explain String                                     |
++----------------------------------------------------+
+| PLAN FRAGMENT 0                                    |
+|  OUTPUT EXPRS:`tbl1`.`k1` |                        |
+|   PARTITION: RANDOM                                |
+|                                                    |
+|   RESULT SINK                                      |
+|                                                    |
+|   2:HASH JOIN                                      |
+|   |  join op: INNER JOIN                           |
+|   |  hash predicates:                              |
+|   |  colocate: true                                |
+|   |    `tbl1`.`k2` = `tbl2`.`k2`                   |
+|   |  tuple ids: 0 1                                |
+|   |                                                |
+|   |----1:OlapScanNode                              |
+|   |       TABLE: tbl2                              |
+|   |       PREAGGREGATION: OFF. Reason: null        |
+|   |       partitions=0/1                           |
+|   |       rollup: null                             |
+|   |       buckets=0/0                              |
+|   |       cardinality=-1                           |
+|   |       avgRowSize=0.0                           |
+|   |       numNodes=0                               |
+|   |       tuple ids: 1                             |
+|   |                                                |
+|   0:OlapScanNode                                   |
+|      TABLE: tbl1                                   |
+|      PREAGGREGATION: OFF. Reason: No AggregateInfo |
+|      partitions=0/2                                |
+|      rollup: null                                  |
+|      buckets=0/0                                   |
+|      cardinality=-1                                |
+|      avgRowSize=0.0                                |
+|      numNodes=0                                    |
+|      tuple ids: 0                                  |
++----------------------------------------------------+
+```
+
+If Colocation Join works, the Hash Join Node will show `colocate: true`.
+
+If not, the query plan is as follows:
+
+```
++----------------------------------------------------+
+| Explain String                                     |
++----------------------------------------------------+
+| PLAN FRAGMENT 0                                    |
+|  OUTPUT EXPRS:`tbl1`.`k1` |                        |
+|   PARTITION: RANDOM                                |
+|                                                    |
+|   RESULT SINK                                      |
+|                                                    |
+|   2:HASH JOIN                                      |
+|   |  join op: INNER JOIN (BROADCAST)               |
+|   |  hash predicates:                              |
+|   |  colocate: false, reason: group is not stable  |
+|   |    `tbl1`.`k2` = `tbl2`.`k2`                   |
+|   |  tuple ids: 0 1                                |
+|   |                                                |
+|   |----3:EXCHANGE                                  |
+|   |       tuple ids: 1                             |
+|   |                                                |
+|   0:OlapScanNode                                   |
+|      TABLE: tbl1                                   |
+|      PREAGGREGATION: OFF. Reason: No AggregateInfo |
+|      partitions=0/2                                |
+|      rollup: null                                  |
+|      buckets=0/0                                   |
+|      cardinality=-1                                |
+|      avgRowSize=0.0                                |
+|      numNodes=0                                    |
+|      tuple ids: 0                                  |
+|                                                    |
+| PLAN FRAGMENT 1                                    |
+|  OUTPUT EXPRS:                                     |
+|   PARTITION: RANDOM                                |
+|                                                    |
+|   STREAM DATA SINK                                 |
+|     EXCHANGE ID: 03                                |
+|     UNPARTITIONED                                  |
+|                                                    |
+|   1:OlapScanNode                                   |
+|      TABLE: tbl2                                   |
+|      PREAGGREGATION: OFF. Reason: null             |
+|      partitions=0/1                                |
+|      rollup: null                                  |
+|      buckets=0/0                                   |
+|      cardinality=-1                                |
+|      avgRowSize=0.0                                |
+|      numNodes=0                                    |
+|      tuple ids: 1                                  |
++----------------------------------------------------+
+```
+
+The HASH JOIN node displays the corresponding reason: `colocate: false, reason: group is not stable`. At the same time, an EXCHANGE node will be generated.
+
+
+## Advanced Operations
+
+### FE Configuration Item
+
+* disable\_colocate\_relocate
+
+Whether to close Doris's automatic Colocation replica repair. The default is false, i.e. not closed. This parameter only affects the replica repair of the Colocation table, but does not affect the normal table.
+
+* disable\_colocate\_balance
+
+Whether to turn off automatic Colocation replica balancing for Doris. The default is false, i.e. not closed. This parameter only affects the replica balance of the Collocation table, but does not affect the common table.
+
+User can set these configurations at runtime. See `HELP ADMIN SHOW CONFIG;` and `HELP ADMIN SET CONFIG;`.
+
+* disable\_colocate\_join
+
+Whether to turn off the Colocation Join function or not. In 0.10 and previous versions, the default is true, that is, closed. In a later version, it will default to false, that is, open.
+
+* use\_new\_tablet\_scheduler
+
+In 0.10 and previous versions, the new replica scheduling logic is incompatible with the Colocation Join function, so in 0.10 and previous versions, if `disable_colocate_join = false`, you need to set `use_new_tablet_scheduler = false`, that is, close the new replica scheduler. In later versions, `use_new_tablet_scheduler` will be equal to true.
+
+###HTTP Restful API
+
+Doris provides several HTTP Restful APIs related to Colocation Join for viewing and modifying Colocation Group.
+
+The API is implemented on the FE side and accessed using `fe_host: fe_http_port`. ADMIN privileges are required.
+
+1. View all Colocation information for the cluster
+
+    ```
+    GET /api/colocate
+    
+    Return the internal Colocation info in JSON format:
+
+    {
+        "msg": "success",
+      "code": 0,
+      "data": {
+        "infos": [
+          ["10003.12002", "10003_group1", "10037, 10043", "1", "1", "int(11)", "true"]
+        ],
+        "unstableGroupIds": [],
+        "allGroupIds": [{
+          "dbId": 10003,
+          "grpId": 12002
+        }]
+      },
+      "count": 0 
+    }
+    ```
+2. Mark Group as Stable or Unstable
+
+  * Mark as Stable
+
+        ```
+        POST /api/colocate/group_stable?db_id=10005&group_id=10008
+        
+        Returns: 200
+        ```
+
+  * Mark as Unstable
+
+        ```
+        DELETE /api/colocate/group_stable?db_id=10005&group_id=10008
+        
+        Returns: 200
+        ```
+
+3. Setting Data Distribution for Group
+
+  The interface can force the number distribution of a group.
+
+    ```
+    POST /api/colocate/bucketseq?db_id=10005&group_id=10008
+    
+    Body:
+    [[10004,10002],[10003,10002],[10002,10004],[10003,10002],[10002,10004],[10003,10002],[10003,10004],[10003,10004],[10003,10004],[10002,10004]]
+    
+    Returns: 200
+    ```
+  Body is a Buckets Sequence represented by a nested array and the ID of the BE where the fragments are distributed in each Bucket.
+
+  Note that using this command, you may need to set the FE configuration `disable_colocate_relocate` and `disable_colocate_balance` to true. That is to shut down the system for automatic Colocation replica repair and balancing. Otherwise, it may be automatically reset by the system after modification.
diff --git a/new-docs/en/advanced/orthogonal-bitmap-manual.md b/new-docs/en/advanced/orthogonal-bitmap-manual.md
index dd53386a5d..d08307e749 100644
--- a/new-docs/en/advanced/orthogonal-bitmap-manual.md
+++ b/new-docs/en/advanced/orthogonal-bitmap-manual.md
@@ -26,3 +26,134 @@ under the License.
 
 # Orthogonal BITMAP calculation
 
+## Background
+
+The original bitmap aggregate function designed by Doris is more general, but it has poor performance for the intersection and union of bitmap large cardinality above 100 million level. There are two main reasons for checking the bitmap aggregate function logic of the back-end be. First, when the bitmap cardinality is large, if the bitmap data size exceeds 1g, the network / disk IO processing time is relatively long; second, after the scan data, all the back-end be instances are transmit [...]
+
+The solution is to divide the bitmap column values according to the range, and the values of different ranges are stored in different buckets, so as to ensure that the bitmap values of different buckets are orthogonal and the data distribution is more uniform. In the case of query, the orthogonal bitmap in different buckets is firstly aggregated and calculated, and then the top-level node directly combines and summarizes the aggregated calculated values and outputs them. This will greatl [...]
+
+## User guide
+
+1. Create a table and add hid column to represent bitmap column value ID range as hash bucket column
+2. Usage scenarios
+
+### Create table
+
+We need to use the aggregation model when building tables. The data type is bitmap, and the aggregation function is bitmap_ union
+```
+CREATE TABLE `user_tag_bitmap` (
+  `tag` bigint(20) NULL COMMENT "user tag",
+  `hid` smallint(6) NULL COMMENT "Bucket ID",
+  `user_id` bitmap BITMAP_UNION NULL COMMENT ""
+) ENGINE=OLAP
+AGGREGATE KEY(`tag`, `hid`)
+COMMENT "OLAP"
+DISTRIBUTED BY HASH(`hid`) BUCKETS 3
+```
+The HID column is added to the table schema to indicate the ID range as a hash bucket column.
+
+Note: the HID number and buckets should be set reasonably, and the HID number should be set at least 5 times of buckets, so as to make the data hash bucket division as balanced as possible
+
+
+### Data Load
+
+``` 
+LOAD LABEL user_tag_bitmap_test
+(
+DATA INFILE('hdfs://abc')
+INTO TABLE user_tag_bitmap
+COLUMNS TERMINATED BY ','
+(tmp_tag, tmp_user_id)
+SET (
+tag = tmp_tag,
+hid = ceil(tmp_user_id/5000000),
+user_id = to_bitmap(tmp_user_id)
+)
+)
+...
+```
+
+Data format:
+
+``` 
+11111111,1
+11111112,2
+11111113,3
+11111114,4
+...
+```
+
+Note: the first column represents the user tags, which have been converted from Chinese into numbers
+
+When loading data, vertically cut the bitmap value range of the user. For example, the hid value of the user ID in the range of 1-5000000 is the same, and the row with the same HID value will be allocated into a sub-bucket, so that the bitmap value in each sub-bucket is orthogonal. On the UDAF implementation of bitmap, the orthogonal feature of bitmap value in the bucket can be used to perform intersection union calculation, and the calculation results will be shuffled to the top node fo [...]
+
+#### orthogonal_bitmap_intersect 
+
+The bitmap intersection function
+
+Syntax:
+
+orthogonal_bitmap_intersect(bitmap_column, column_to_filter, filter_values)
+
+Parameters:
+
+the first parameter is the bitmap column, the second parameter is the dimension column for filtering, and the third parameter is the variable length parameter, which means different values of the filter dimension column
+
+Explain:
+
+on the basis of this table schema, this function has two levels of aggregation in query planning. In the first layer, be nodes (update and serialize) first press filter_ Values are used to hash aggregate the keys, and then the bitmaps of all keys are intersected. The results are serialized and sent to the second level be nodes (merge and finalize). In the second level be nodes, all the bitmap values from the first level nodes are combined circularly
+
+Example:
+
+```
+select BITMAP_COUNT(orthogonal_bitmap_intersect(user_id, tag, 13080800, 11110200)) from user_tag_bitmap  where tag in (13080800, 11110200);
+
+```
+
+#### orthogonal_bitmap_intersect_count 
+
+To calculate the bitmap intersection count function, the syntax is the same as the original Intersect_Count, but the implementation is different
+
+Syntax:
+
+orthogonal_bitmap_intersect_count(bitmap_column, column_to_filter, filter_values)
+
+Parameters:
+
+The first parameter is the bitmap column, the second parameter is the dimension column for filtering, and the third parameter is the variable length parameter, which means different values of the filter dimension column
+
+Explain:
+
+on the basis of this table schema, the query planning aggregation is divided into two layers. In the first layer, be nodes (update and serialize) first press filter_ Values are used to hash aggregate the keys, and then the intersection of bitmaps of all keys is performed, and then the intersection results are counted. The count values are serialized and sent to the second level be nodes (merge and finalize). In the second level be nodes, the sum of all the count values from the first lev [...]
+
+
+#### orthogonal_bitmap_union_count 
+
+Figure out the bitmap union count function, syntax with the original bitmap_union_count, but the implementation is different.
+
+Syntax:
+
+orthogonal_bitmap_union_count(bitmap_column)
+
+Explain:
+
+on the basis of this table schema, this function is divided into two layers. In the first layer, be nodes (update and serialize) merge all the bitmaps, and then count the resulting bitmaps. The count values are serialized and sent to the second level be nodes (merge and finalize). In the second layer, the be nodes are used to calculate the sum of all the count values from the first level nodes
+
+
+### Suitable for the scene
+
+It is consistent with the scenario of orthogonal calculation of bitmap, such as calculation retention, funnel, user portrait, etc.
+
+Crowd selection:
+
+```
+select orthogonal_bitmap_intersect_count(user_id, tag, 13080800, 11110200) from user_tag_bitmap where tag in (13080800, 11110200);
+
+Note: 13080800 and 11110200 represent user labels
+```
+
+Calculate the deduplication value for user_id:
+
+```
+select orthogonal_bitmap_union_count(user_id) from user_tag_bitmap where tag in (13080800, 11110200);
+```
diff --git a/new-docs/en/advanced/partition/table-temp-partition.md b/new-docs/en/advanced/partition/table-temp-partition.md
index 5617399f50..94e735d36b 100644
--- a/new-docs/en/advanced/partition/table-temp-partition.md
+++ b/new-docs/en/advanced/partition/table-temp-partition.md
@@ -26,3 +26,263 @@ under the License.
 
 # Temporary partition
 
+Since version 0.12, Doris supports temporary partitioning.
+
+A temporary partition belongs to a partitioned table. Only partitioned tables can create temporary partitions.
+
+## Rules
+
+* The partition columns of the temporary partition is the same as the formal partition and cannot be modified.
+* The partition ranges of all temporary partitions of a table cannot overlap, but the ranges of temporary partitions and formal partitions can overlap.
+* The partition name of the temporary partition cannot be the same as the formal partitions and other temporary partitions.
+
+## Supported operations
+
+The temporary partition supports add, delete, and replace operations.
+
+### Add temporary partition
+
+You can add temporary partitions to a table with the `ALTER TABLE ADD TEMPORARY PARTITION` statement:
+
+```
+ALTER TABLE tbl1 ADD TEMPORARY PARTITION tp1 VALUES LESS THAN ("2020-02-01");
+
+ALTER TABLE tbl2 ADD TEMPORARY PARTITION tp1 VALUES [("2020-01-01"), ("2020-02-01"));
+
+ALTER TABLE tbl1 ADD TEMPORARY PARTITION tp1 VALUES LESS THAN ("2020-02-01")
+("in_memory" = "true", "replication_num" = "1")
+DISTRIBUTED BY HASH (k1) BUCKETS 5;
+
+ALTER TABLE tbl3 ADD TEMPORARY PARTITION tp1 VALUES IN ("Beijing", "Shanghai");
+
+ALTER TABLE tbl4 ADD TEMPORARY PARTITION tp1 VALUES IN ((1, "Beijing"), (1, "Shanghai"));
+
+ALTER TABLE tbl3 ADD TEMPORARY PARTITION tp1 VALUES IN ("Beijing", "Shanghai")
+("in_memory" = "true", "replication_num" = "1")
+DISTRIBUTED BY HASH(k1) BUCKETS 5;
+
+```
+
+See `HELP ALTER TABLE;` for more help and examples.
+
+Some instructions for adding operations:
+
+* Adding a temporary partition is similar to adding a formal partition. The partition range of the temporary partition is independent of the formal partition.
+* Temporary partition can independently specify some attributes. Includes information such as the number of buckets, the number of replicas, whether it is a memory table, or the storage medium.
+
+### Delete temporary partition
+
+A table's temporary partition can be dropped with the `ALTER TABLE DROP TEMPORARY PARTITION` statement:
+
+```
+ALTER TABLE tbl1 DROP TEMPORARY PARTITION tp1;
+```
+
+See `HELP ALTER TABLE;` for more help and examples.
+
+Some instructions for the delete operation:
+
+* Deleting the temporary partition will not affect the data of the formal partition.
+
+### Replace partition
+
+You can replace formal partitions of a table with temporary partitions with the `ALTER TABLE REPLACE PARTITION` statement.
+
+```
+ALTER TABLE tbl1 REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);
+
+ALTER TABLE tbl1 REPLACE PARTITION (p1, p2) WITH TEMPORARY PARTITION (tp1, tp2, tp3);
+
+ALTER TABLE tbl1 REPLACE PARTITION (p1, p2) WITH TEMPORARY PARTITION (tp1, tp2)
+PROPERTIES (
+    "strict_range" = "false",
+    "use_temp_partition_name" = "true"
+);
+```
+
+See `HELP ALTER TABLE;` for more help and examples.
+
+The replace operation has two special optional parameters:
+
+1. `strict_range`
+
+    The default is true. 
+    
+    For Range partition, When this parameter is true, the range union of all formal partitions to be replaced needs to be the same as the range union of the temporary partitions to be replaced. When set to false, you only need to ensure that the range between the new formal partitions does not overlap after replacement. 
+    
+    For List partition, this parameter is always true, and the enumeration values of all full partitions to be replaced must be identical to the enumeration values of the temporary partitions to be replaced.
+
+    Here are some examples:
+
+    * Example 1
+
+        Range of partitions p1, p2, p3 to be replaced (=> union):
+
+        ```
+        (10, 20), [20, 30), [40, 50) => [10, 30), [40, 50)
+        ```
+
+        Replace the range of partitions tp1, tp2 (=> union):
+
+        ```
+        (10, 30), [40, 45), [45, 50) => [10, 30), [40, 50)
+        ```
+
+        The union of ranges is the same, so you can use tp1 and tp2 to replace p1, p2, p3.
+
+    * Example 2
+
+        Range of partition p1 to be replaced (=> union):
+
+        ```
+        (10, 50) => [10, 50)
+        ```
+
+        Replace the range of partitions tp1, tp2 (=> union):
+
+        ```
+        (10, 30), [40, 50) => [10, 30), [40, 50)
+        ```
+
+        The union of ranges is not the same. If `strict_range` is true, you cannot use tp1 and tp2 to replace p1. If false, and the two partition ranges `[10, 30), [40, 50)` and the other formal partitions do not overlap, they can be replaced.
+
+    * Example 3
+
+        Enumerated values of partitions p1, p2 to be replaced (=> union).
+
+        ```
+        (1, 2, 3), (4, 5, 6) => (1, 2, 3, 4, 5, 6)
+        ```
+
+        Replace the enumerated values of partitions tp1, tp2, tp3 (=> union).
+
+        ```
+        (1, 2, 3), (4), (5, 6) => (1, 2, 3, 4, 5, 6)
+        ```
+
+        The enumeration values are the same, you can use tp1, tp2, tp3 to replace p1, p2
+
+    * Example 4
+
+        Enumerated values of partitions p1, p2, p3 to be replaced (=> union).
+
+        ```
+        (("1", "beijing"), ("1", "shanghai")), (("2", "beijing"), ("2", "shanghai")), (("3", "beijing"), ("3", "shanghai")) => (("1", "beijing"), ("3", "shanghai")) "), ("1", "shanghai"), ("2", "beijing"), ("2", "shanghai"), ("3", "beijing"), ("3", "shanghai"))
+        ```
+
+        Replace the enumerated values of partitions tp1, tp2 (=> union).
+
+        ```
+        (("1", "beijing"), ("1", "shanghai")), (("2", "beijing"), ("2", "shanghai"), ("3", "beijing"), ("3", "shanghai")) => (("1", "beijing") , ("1", "shanghai"), ("2", "beijing"), ("2", "shanghai"), ("3", "beijing"), ("3", "shanghai"))
+        ```
+
+        The enumeration values are the same, you can use tp1, tp2 to replace p1, p2, p3
+
+2. `use_temp_partition_name`
+
+    The default is false. When this parameter is false, and the number of partitions to be replaced is the same as the number of replacement partitions, the name of the formal partition after the replacement remains unchanged. If true, after replacement, the name of the formal partition is the name of the replacement partition. Here are some examples:
+
+    * Example 1
+
+        ```
+        ALTER TABLE tbl1 REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);
+        ```
+
+        `use_temp_partition_name` is false by default. After replacement, the partition name is still p1, but the related data and attributes are replaced with tp1.
+
+        If `use_temp_partition_name` is true by default, the name of the partition is tp1 after replacement. The p1 partition no longer exists.
+
+    * Example 2
+
+        ```
+        ALTER TABLE tbl1 REPLACE PARTITION (p1, p2) WITH TEMPORARY PARTITION (tp1);
+        ```
+
+        `use_temp_partition_name` is false by default, but this parameter is invalid because the number of partitions to be replaced and the number of replacement partitions are different. After the replacement, the partition name is tp1, and p1 and p2 no longer exist.
+
+Some instructions for the replacement operation:
+
+* After the partition is replaced successfully, the replaced partition will be deleted and cannot be recovered.
+
+## Load and query of temporary partitions
+
+Users can load data into temporary partitions or specify temporary partitions for querying.
+
+1. Load temporary partition
+
+    The syntax for specifying a temporary partition is slightly different depending on the load method. Here is a simple illustration through an example:
+
+    ```
+    INSERT INTO tbl TEMPORARY PARTITION (tp1, tp2, ...) SELECT ....
+    ```
+
+    ```
+    curl --location-trusted -u root: -H "label: 123" -H "temporary_partition: tp1, tp2, ..." -T testData http: // host: port / api / testDb / testTbl / _stream_load
+    ```
+
+    ```
+    LOAD LABEL example_db.label1
+    (
+    DATA INFILE ("hdfs: // hdfs_host: hdfs_port / user / palo / data / input / file")
+    INTO TABLE `my_table`
+    TEMPORARY PARTITION (tp1, tp2, ...)
+    ...
+    )
+    WITH BROKER hdfs ("username" = "hdfs_user", "password" = "hdfs_password");
+    ```
+
+    ```
+    CREATE ROUTINE LOAD example_db.test1 ON example_tbl
+    COLUMNS (k1, k2, k3, v1, v2, v3 = k1 * 100),
+    TEMPORARY PARTITIONS (tp1, tp2, ...),
+    WHERE k1> 100
+    PROPERTIES
+    (...)
+    FROM KAFKA
+    (...);
+    ```
+
+2. Query the temporary partition
+
+    ```
+    SELECT ... FROM
+    tbl1 TEMPORARY PARTITION (tp1, tp2, ...)
+    JOIN
+    tbl2 TEMPORARY PARTITION (tp1, tp2, ...)
+    ON ...
+    WHERE ...;
+    ```
+
+## Relationship to other operations
+
+### DROP
+
+* After using the `DROP` operation to directly drop the database or table, you can recover the database or table (within a limited time) through the `RECOVER` command, but the temporary partition will not be recovered.
+* After the formal partition is dropped using the `ALTER` command, the partition can be recovered by the `RECOVER` command (within a limited time). Operating a formal partition is not related to a temporary partition.
+* After the temporary partition is dropped using the `ALTER` command, the temporary partition cannot be recovered through the `RECOVER` command.
+
+### TRUNCATE
+
+* Use the `TRUNCATE` command to empty the table. The temporary partition of the table will be deleted and cannot be recovered.
+* When using `TRUNCATE` command to empty the formal partition, it will not affect the temporary partition.
+* You cannot use the `TRUNCATE` command to empty the temporary partition.
+
+### ALTER
+
+* When the table has a temporary partition, you cannot use the `ALTER` command to perform Schema Change, Rollup, etc. on the table.
+* You cannot add temporary partitions to a table while the table is undergoing a alter operation.
+
+
+## Best Practices
+
+1. Atomic overwrite
+
+    In some cases, the user wants to be able to rewrite the data of a certain partition, but if it is dropped first and then loaded, there will be a period of time when the data cannot be seen. At this moment, the user can first create a corresponding temporary partition, load new data into the temporary partition, and then replace the original partition atomically through the `REPLACE` operation to achieve the purpose. For atomic overwrite operations of non-partitioned tables, please re [...]
+    
+2. Modify the number of buckets
+
+    In some cases, the user used an inappropriate number of buckets when creating a partition. The user can first create a temporary partition corresponding to the partition range and specify a new number of buckets. Then use the `INSERT INTO` command to load the data of the formal partition into the temporary partition. Through the replacement operation, the original partition is replaced atomically to achieve the purpose.
+    
+3. Merge or split partitions
+
+    In some cases, users want to modify the range of partitions, such as merging two partitions, or splitting a large partition into multiple smaller partitions. Then the user can first create temporary partitions corresponding to the merged or divided range, and then load the data of the formal partition into the temporary partition through the `INSERT INTO` command. Through the replacement operation, the original partition is replaced atomically to achieve the purpose.
\ No newline at end of file
diff --git a/new-docs/en/advanced/resource.md b/new-docs/en/advanced/resource.md
index 1bb451c492..d49f4be07b 100644
--- a/new-docs/en/advanced/resource.md
+++ b/new-docs/en/advanced/resource.md
@@ -1,6 +1,6 @@
 ---
 {
-    "title": "Resource Management",
+    "title": "Resource management",
     "language": "en"
 }
 ---
@@ -24,4 +24,131 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# Resource Management
\ No newline at end of file
+# Resource Management
+
+In order to save the compute and storage resources in the Doris cluster, Doris needs to reference to some other external resources to do the related work. such as spark/GPU for query, HDFS/S3 for external storage, spark/MapReduce for ETL, connect to external storage by ODBC driver. Therefore, Doris need a resource management mechanism to manage these external resources.
+
+## Fundamental Concept
+
+A resource contains basic information such as name and type. The name is globally unique. Different types of resources contain different attributes. Please refer to the introduction of each resource for details.
+
+The creation and deletion of resources can only be performed by users own `admin` permission. One resource belongs to the entire Doris cluster. Users with `admin` permission can assign permission of resource to other users. Please refer to `HELP GRANT` or doris document.
+
+
+## Operation Of Resource
+
+There are three main commands for resource management: `create resource`, `drop resource` and `show resources`. They are to create, delete and check resources. The specific syntax of these three commands can be viewed by executing `help CMD` after MySQL client connects to Doris.
+
+1. CREATE RESOURCE
+
+    This statement is used to create a resource. For details, please refer to [CREATE RESOURCE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Create/CREATE-RESOURCE.html).
+
+2. DROP RESOURCE
+
+    This command can delete an existing resource. For details, see [DROP RESOURCE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Drop/DROP-RESOURCE.html).
+
+3. SHOW RESOURCES
+
+    This command can view the resources that the user has permission to use. For details, see [SHOW RESOURCES](../sql-manual/sql-reference-v2/Show-Statements/SHOW-RESOURCES.html).
+
+## Resources Supported
+
+Currently, Doris can support
+
+* Spark resource: do ETL work
+* ODBC resource: query and import data from external tables
+
+The following shows how the two resources are used.
+
+### Spark
+
+#### Parameter
+
+##### Spark Parameters:
+
+`spark.master`: required, currently supported yarn, spark://host:port.
+
+`spark.submit.deployMode`: The deployment mode of spark. required. It supports cluster and client.
+
+`spark.hadoop.yarn.resourcemanager.address`: required when master is yarn.
+
+`spark.hadoop.fs.defaultFS`: required when master is yarn.
+
+Other parameters are optional, refer to: http://spark.apache.org/docs/latest/configuration.html.
+
+##### If spark is used for ETL, also need to specify the following parameters:
+
+`working_dir`: Directory used by ETL. Spark is required when used as an ETL resource. For example: hdfs://host:port/tmp/doris.
+
+`broker`: The name of broker. Is required when spark be used as ETL resource. You need to use the `ALTER SYSTEM ADD BROKER` command to complete the configuration in advance. 
+
+  * `broker.property_key`: When the broker reads the intermediate file generated by ETL, it needs the specified authentication information.
+
+
+
+#### Example
+
+Create a spark resource named `spark0 `in the yarn cluster mode.
+
+
+```sql
+CREATE EXTERNAL RESOURCE "spark0"
+PROPERTIES
+(
+  "type" = "spark",
+  "spark.master" = "yarn",
+  "spark.submit.deployMode" = "cluster",
+  "spark.jars" = "xxx.jar,yyy.jar",
+  "spark.files" = "/tmp/aaa,/tmp/bbb",
+  "spark.executor.memory" = "1g",
+  "spark.yarn.queue" = "queue0",
+  "spark.hadoop.yarn.resourcemanager.address" = "127.0.0.1:9999",
+  "spark.hadoop.fs.defaultFS" = "hdfs://127.0.0.1:10000",
+  "working_dir" = "hdfs://127.0.0.1:10000/tmp/doris",
+  "broker" = "broker0",
+  "broker.username" = "user0",
+  "broker.password" = "password0"
+);
+```
+
+### ODBC
+
+#### Parameter
+
+##### ODBC Parameters:
+
+`type`: Required, must be `odbc_catalog`. As the type identifier of resource.
+
+`user`: The user name of the external table, required.
+
+`password`: The user password of the external table, required.
+
+`host`: The ip address of the external table, required.
+
+`port`: The port of the external table, required.
+
+`odbc_type`: Indicates the type of external table. Currently, Doris supports `MySQL` and `Oracle`. In the future, it may support more databases. The ODBC external table referring to the resource is required. The old MySQL external table referring to the resource is optional.
+
+`driver`: Indicates the driver dynamic library used by the ODBC external table.
+The ODBC external table referring to the resource is required. The old MySQL external table referring to the resource is optional.
+
+For the usage of ODBC resource, please refer to [ODBC of Doris](../extending-doris/odbc-of-doris.html)
+
+
+#### Example
+
+Create the ODBC resource of Oracle, named `oracle_odbc`.
+
+```sql
+CREATE EXTERNAL RESOURCE `oracle_odbc`
+PROPERTIES (
+"type" = "odbc_catalog",
+"host" = "192.168.0.1",
+"port" = "8086",
+"user" = "test",
+"password" = "test",
+"database" = "test",
+"odbc_type" = "oracle",
+"driver" = "Oracle 19 ODBC driver"
+);
+```
diff --git a/new-docs/en/advanced/time-zone.md b/new-docs/en/advanced/time-zone.md
index 455dfba199..5444c044ba 100644
--- a/new-docs/en/advanced/time-zone.md
+++ b/new-docs/en/advanced/time-zone.md
@@ -26,3 +26,71 @@ under the License.
 
 # Time zone
 
+Doris supports multiple time zone settings
+
+## Noun Interpretation
+
+* FE: Frontend, the front-end node of Doris. Responsible for metadata management and request access.
+* BE: Backend, Doris's back-end node. Responsible for query execution and data storage.
+
+## Basic concepts
+
+There are multiple time zone related parameters in Doris
+
+* `system_time_zone`:
+
+When the server starts, it will be set automatically according to the time zone set by the machine, which cannot be modified after setting.
+
+* `time_zone`:
+
+Server current time zone, set it at session level or global level.
+
+## Specific operations
+
+1. `SHOW VARIABLES LIKE '% time_zone%'`
+
+    View the current time zone related configuration
+
+2. `SET time_zone = 'Asia/Shanghai'`
+
+    This command can set the session level time zone, which will fail after disconnection.
+
+3. `SET global time_zone = 'Asia/Shanghai'`
+   
+    This command can set time zone parameters at the global level. The FE will persist the parameters and will not fail when the connection is disconnected.
+
+### Impact of time zone
+
+Time zone setting affects the display and storage of time zone sensitive values.
+
+It includes the values displayed by time functions such as `NOW()` or `CURTIME()`, as well as the time values in `SHOW LOAD` and `SHOW BACKENDS` statements.
+
+However, it does not affect the `LESS THAN VALUE` of the time-type partition column in the `CREATE TABLE` statement, nor does it affect the display of values stored as `DATE/DATETIME` type.
+
+Functions affected by time zone:
+
+* `FROM_UNIXTIME`: Given a UTC timestamp, return the date and time of the specified time zone, such as `FROM_UNIXTIME(0)`, return the CST time zone: `1970-01-08:00`.
+
+* `UNIX_TIMESTAMP`: Given a specified time zone date and time, return UTC timestamp, such as CST time zone `UNIX_TIMESTAMP('1970-01 08:00:00')`, return `0`.
+
+* `CURTIME`: Returns the datetime of specified time zone.
+
+* `NOW`: Returns the specified date and time of specified time zone.
+
+* `CONVERT_TZ`: Converts a date and time from one specified time zone to another.
+
+## Restrictions
+
+Time zone values can be given in several formats, case-insensitive:
+
+* A string representing UTC offset, such as '+10:00' or '-6:00'.
+
+* Standard time zone formats, such as "Asia/Shanghai", "America/Los_Angeles"
+
+* Abbreviated time zone formats such as MET and CTT are not supported. Because the abbreviated time zone is ambiguous in different scenarios, it is not recommended to use it.
+
+* In order to be compatible with Doris and support CST abbreviated time zone, CST will be internally transferred to "Asia/Shanghai", which is Chinese standard time zone.
+
+## Time zone format list
+
+[List of TZ database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
diff --git a/new-docs/en/advanced/variables.md b/new-docs/en/advanced/variables.md
index 0e1868d0f7..2fb88cd5c7 100644
--- a/new-docs/en/advanced/variables.md
+++ b/new-docs/en/advanced/variables.md
@@ -26,4 +26,478 @@ under the License.
 
 # Variable
 
+This document focuses on currently supported variables.
 
+Variables in Doris refer to variable settings in MySQL. However, some of the variables are only used to be compatible with some MySQL client protocols, and do not produce their actual meaning in the MySQL database.
+
+## Variable setting and viewing
+
+### View
+
+All or specified variables can be viewed via `SHOW VARIABLES [LIKE 'xxx'];`. Such as:
+
+```
+SHOW VARIABLES;
+SHOW VARIABLES LIKE '%time_zone%';
+```
+
+### Settings
+
+Some variables can be set at global-level or session-only. For global-level, the set value will be used in subsequent new session connections. For session-only, the variable only works for the current session.
+
+For session-only, set by the `SET var_name=xxx;` statement. Such as:
+
+```
+SET exec_mem_limit = 137438953472;
+SET forward_to_master = true;
+SET time_zone = "Asia/Shanghai";
+```
+
+For global-level, set by `SET GLOBAL var_name=xxx;`. Such as:
+
+```
+SET GLOBAL exec_mem_limit = 137438953472
+```
+
+> Note 1: Only ADMIN users can set variable at global-level.
+> Note 2: Global-level variables do not affect variable values in the current session, only variables in new sessions.
+
+Variables that support both session-level and global-level setting include:
+
+* `time_zone`
+* `wait_timeout`
+* `sql_mode`
+* `enable_profile`
+* `query_timeout`
+* `exec_mem_limit`
+* `batch_size`
+* `parallel_fragment_exec_instance_num`
+* `parallel_exchange_instance_num`
+* `allow_partition_column_nullable`
+* `insert_visible_timeout_ms`
+* `enable_fold_constant_by_be`
+
+Variables that support only global-level setting include:
+
+* `default_rowset_type`
+
+At the same time, variable settings also support constant expressions. Such as:
+
+```
+SET exec_mem_limit = 10 * 1024 * 1024 * 1024;
+SET forward_to_master = concat('tr', 'u', 'e');
+```
+
+### Set variables in the query statement
+
+In some scenarios, we may need to set variables specifically for certain queries.
+The SET_VAR hint sets the session value of a system variable temporarily (for the duration of a single statement). Examples:
+
+```
+SELECT /*+ SET_VAR(exec_mem_limit = 8589934592) */ name FROM people ORDER BY name;
+SELECT /*+ SET_VAR(query_timeout = 1, enable_partition_cache=true) */ sleep(3);
+```
+
+Note that the comment must start with /*+ and can only follow the SELECT.
+
+## Supported variables
+
+* `SQL_AUTO_IS_NULL`
+
+    Used for compatible JDBC connection pool C3P0. No practical effect.
+    
+* `auto_increment_increment`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `autocommit`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `batch_size`
+
+    Used to specify the number of rows of a single packet transmitted by each node during query execution. By default, the number of rows of a packet is 1024 rows. That is, after the source node generates 1024 rows of data, it is packaged and sent to the destination node.
+    
+    A larger number of rows will increase the throughput of the query in the case of scanning large data volumes, but may increase the query delay in small query scenario. At the same time, it also increases the memory overhead of the query. The recommended setting range is 1024 to 4096.
+    
+* `character_set_client`
+
+   Used for compatibility with MySQL clients. No practical effect.
+
+* `character_set_connection`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `character_set_results`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `character_set_server`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `codegen_level`
+
+    Used to set the level of LLVM codegen. (Not currently in effect).
+    
+* `collation_connection`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `collation_database`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `collation_server`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `delete_without_partition`
+
+    When set to true. When using the delete command to delete partition table data, no partition is required. The delete operation will be automatically applied to all partitions.
+
+     Note, however, that the automatic application to all partitions may cause the delete command to take a long time to trigger a large number of subtasks and cause a long time. If it is not necessary, it is not recommended to turn it on.
+
+* `disable_colocate_join`
+
+    Controls whether the [Colocation Join](./colocation-join.md) function is enabled. The default is false, which means that the feature is enabled. True means that the feature is disabled. When this feature is disabled, the query plan will not attempt to perform a Colocation Join.
+    
+* `enable_bucket_shuffle_join`
+
+    Controls whether the [Bucket Shuffle Join] (./bucket-shuffle-join.md) function is enabled. The default is true, which means that the feature is enabled. False means that the feature is disabled. When this feature is disabled, the query plan will not attempt to perform a Bucket Shuffle Join.
+
+* `disable_streaming_preaggregations`
+
+    Controls whether streaming pre-aggregation is turned on. The default is false, which is enabled. Currently not configurable and enabled by default.
+    
+* `enable_insert_strict`
+
+    Used to set the `strict` mode when loading data via INSERT statement. The default is false, which means that the `strict` mode is not turned on. For an introduction to this mode, see [here](./load-data/insert-into-manual.md).
+
+* `enable_spilling`
+
+    Used to set whether to enable external sorting. The default is false, which turns off the feature. This feature is enabled when the user does not specify a LIMIT condition for the ORDER BY clause and also sets `enable_spilling` to true. When this feature is enabled, the temporary data is stored in the `doris-scratch/` directory of the BE data directory and the temporary data is cleared after the query is completed.
+    
+    This feature is mainly used for sorting operations with large amounts of data using limited memory.
+    
+    Note that this feature is experimental and does not guarantee stability. Please turn it on carefully.
+    
+* `exec_mem_limit`
+
+    Used to set the memory limit for a single query. The default is 2GB, you can set it in B/K/KB/M/MB/G/GB/T/TB/P/PB, the default is B.
+    
+    This parameter is used to limit the memory that can be used by an instance of a single query fragment in a query plan. A query plan may have multiple instances, and a BE node may execute one or more instances. Therefore, this parameter does not accurately limit the memory usage of a query across the cluster, nor does it accurately limit the memory usage of a query on a single BE node. The specific needs need to be judged according to the generated query plan.
+    
+    Usually, only some blocking nodes (such as sorting node, aggregation node, and join node) consume more memory, while in other nodes (such as scan node), data is streamed and does not occupy much memory.
+    
+    When a `Memory Exceed Limit` error occurs, you can try to increase the parameter exponentially, such as 4G, 8G, 16G, and so on.
+    
+* `forward_to_master`
+
+    The user sets whether to forward some commands to the Master FE node for execution. The default is `true`, which means no forwarding. There are multiple FE nodes in Doris, one of which is the Master node. Usually users can connect to any FE node for full-featured operation. However, some of detail information can only be obtained from the Master FE node.
+    
+    For example, the `SHOW BACKENDS;` command, if not forwarded to the Master FE node, can only see some basic information such as whether the node is alive, and forwarded to the Master FE to obtain more detailed information including the node startup time and the last heartbeat time.
+    
+    The commands currently affected by this parameter are as follows:
+    
+    1. `SHOW FRONTEND;`
+
+        Forward to Master to view the last heartbeat information.
+    
+    2. `SHOW BACKENDS;`
+
+        Forward to Master to view startup time, last heartbeat information, and disk capacity information.
+        
+    3. `SHOW BROKERS;`
+
+        Forward to Master to view the start time and last heartbeat information.
+        
+    4. `SHOW TABLET;`/`ADMIN SHOW REPLICA DISTRIBUTION;`/`ADMIN SHOW REPLICA STATUS;`
+
+        Forward to Master to view the tablet information stored in the Master FE metadata. Under normal circumstances, the tablet information in different FE metadata should be consistent. When a problem occurs, this method can be used to compare the difference between the current FE and Master FE metadata.
+        
+    5. `SHOW PROC;`
+
+        Forward to Master to view information about the relevant PROC stored in the Master FE metadata. Mainly used for metadata comparison.
+    
+* `init_connect`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `interactive_timeout`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `enable_profile`
+
+    Used to set whether you need to view the profile of the query. The default is false, which means no profile is required.
+    
+    By default, the BE sends a profile to the FE for viewing errors only if an error occurs in the query. A successful query will not send a profile. Sending a profile will incur a certain amount of network overhead, which is detrimental to a high concurrent query scenario.
+    
+    When the user wants to analyze the profile of a query, the query can be sent after this variable is set to true. After the query is finished, you can view the profile on the web page of the currently connected FE:
+    
+    `fe_host:fe_http:port/query`
+    
+    It will display the most recent 100 queries which `enable_profile` is set to true.
+    
+* `language`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `license`
+  
+    Show Doris's license. No other effect.
+
+* `load_mem_limit`
+
+    Used to specify the memory limit of the load operation. The default is 0, which means that this variable is not used, and `exec_mem_limit` is used as the memory limit for the load operation.
+
+    This variable is usually used for INSERT operations. Because the INSERT operation has both query and load part. If the user does not set this variable, the respective memory limits of the query and load part are `exec_mem_limit`. Otherwise, the memory of query part of INSERT is limited to `exec_mem_limit`, and the load part is limited to` load_mem_limit`.
+
+    For other load methods, such as BROKER LOAD, STREAM LOAD, the memory limit still uses `exec_mem_limit`.
+    
+* `lower_case_table_names`
+
+    Used to control whether the user table name is case-sensitive.
+
+    A value of 0 makes the table name case-sensitive. The default is 0.
+
+    When the value is 1, the table name is case insensitive. Doris will convert the table name to lowercase when storing and querying.  
+    The advantage is that any case of table name can be used in one statement. The following SQL is correct:
+    ```
+    mysql> show tables;
+    +------------------+
+    | Tables_ in_testdb|
+    +------------------+
+    | cost             |
+    +------------------+
+    mysql> select * from COST where COst.id < 100 order by cost.id;
+    ```
+    The disadvantage is that the table name specified in the table creation statement cannot be obtained after table creation. The table name viewed by 'show tables' is lower case of the specified table name.
+
+    When the value is 2, the table name is case insensitive. Doris stores the table name specified in the table creation statement and converts it to lowercase for comparison during query.  
+    The advantage is that the table name viewed by 'show tables' is the table name specified in the table creation statement;  
+    The disadvantage is that only one case of table name can be used in the same statement. For example, the table name 'cost' can be used to query the 'cost' table:
+    ```
+    mysql> select * from COST where COST.id < 100 order by COST.id;
+    ```
+
+    This variable is compatible with MySQL and must be configured at cluster initialization by specifying `lower_case_table_names=` in fe.conf. It cannot be modified by the `set` statement after cluster initialization is complete, nor can it be modified by restarting or upgrading the cluster.
+
+    The system view table names in information_schema are case-insensitive and behave as 2 when the value of `lower_case_table_names` is 0.
+
+Translated with www.DeepL.com/Translator (free version)
+
+* `max_allowed_packet`
+
+    Used for compatible JDBC connection pool C3P0. No practical effect.
+    
+* `max_pushdown_conditions_per_column`
+
+    For the specific meaning of this variable, please refer to the description of `max_pushdown_conditions_per_column` in [BE Configuration](./config/be_config.md). This variable is set to -1 by default, which means that the configuration value in `be.conf` is used. If the setting is greater than 0, the query in the current session will use the variable value, and ignore the configuration value in `be.conf`.
+
+* `max_scan_key_num`
+
+    For the specific meaning of this variable, please refer to the description of `doris_max_scan_key_num` in [BE Configuration](./config/be_config.md). This variable is set to -1 by default, which means that the configuration value in `be.conf` is used. If the setting is greater than 0, the query in the current session will use the variable value, and ignore the configuration value in `be.conf`.
+
+* `net_buffer_length`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `net_read_timeout`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `net_write_timeout`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `parallel_exchange_instance_num`
+
+    Used to set the number of exchange nodes used by an upper node to receive data from the lower node in the execution plan. The default is -1, which means that the number of exchange nodes is equal to the number of execution instances of the lower nodes (default behavior). When the setting is greater than 0 and less than the number of execution instances of the lower node, the number of exchange nodes is equal to the set value.
+    
+    In a distributed query execution plan, the upper node usually has one or more exchange nodes for receiving data from the execution instances of the lower nodes on different BEs. Usually the number of exchange nodes is equal to the number of execution instances of the lower nodes.
+    
+    In some aggregate query scenarios, if the amount of data to be scanned at the bottom is large, but the amount of data after aggregation is small, you can try to modify this variable to a smaller value, which can reduce the resource overhead of such queries. Such as the scenario of aggregation query on the DUPLICATE KEY data model.
+
+* `parallel_fragment_exec_instance_num`
+
+    For the scan node, set its number of instances to execute on each BE node. The default is 1.
+    
+    A query plan typically produces a set of scan ranges, the range of data that needs to be scanned. These data are distributed across multiple BE nodes. A BE node will have one or more scan ranges. By default, a set of scan ranges for each BE node is processed by only one execution instance. When the machine resources are abundant, you can increase the variable and let more execution instances process a set of scan ranges at the same time, thus improving query efficiency.
+    
+    The number of scan instances determines the number of other execution nodes in the upper layer, such as aggregate nodes and join nodes. Therefore, it is equivalent to increasing the concurrency of the entire query plan execution. Modifying this parameter will help improve the efficiency of large queries, but larger values will consume more machine resources, such as CPU, memory, and disk IO.
+    
+* `query_cache_size`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `query_cache_type`
+
+    Used for compatible JDBC connection pool C3P0. No practical effect.
+    
+* `query_timeout`
+
+    Used to set the query timeout. This variable applies to all query statements in the current connection, as well as INSERT statements. The default is 5 minutes, in seconds.
+
+* `resource_group`
+
+    Not used.
+    
+* `send_batch_parallelism`
+
+    Used to set the default parallelism for sending batch when execute InsertStmt operation, if the value for parallelism exceed `max_send_batch_parallelism_per_job` in BE config, then the coordinator BE will use the value of `max_send_batch_parallelism_per_job`.
+
+* `sql_mode`
+
+    Used to specify SQL mode to accommodate certain SQL dialects. For the SQL mode, see [here](./sql-mode.md).
+    
+* `sql_safe_updates`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `sql_select_limit`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `system_time_zone`
+
+    Displays the current system time zone. Cannot be changed.
+    
+* `time_zone`
+
+    Used to set the time zone of the current session. The time zone has an effect on the results of certain time functions. For the time zone, see [here](./time-zone.md).
+    
+* `tx_isolation`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `tx_read_only`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `transaction_read_only`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `transaction_isolation`
+
+    Used for compatibility with MySQL clients. No practical effect.
+    
+* `version`
+
+    Used for compatibility with MySQL clients. No practical effect.
+
+* `performance_schema`
+
+    Used for compatibility with MySQL JDBC 8.0.16 or later version. No practical effect.    
+    
+* `version_comment`
+
+    Used to display the version of Doris. Cannot be changed.
+    
+* `wait_timeout`
+
+    The length of the connection used to set up an idle connection. When an idle connection does not interact with Doris for that length of time, Doris will actively disconnect the link. The default is 8 hours, in seconds.
+
+* `default_rowset_type`
+
+    Used for setting the default storage format of Backends storage engine. Valid options: alpha/beta
+
+* `use_v2_rollup`
+
+    Used to control the sql query to use segment v2 rollup index to get data. This variable is only used for validation when upgrading to segment v2 feature. Otherwise, not recommended to use.
+
+* `rewrite_count_distinct_to_bitmap_hll`
+
+    Whether to rewrite count distinct queries of bitmap and HLL types as bitmap_union_count and hll_union_agg.
+
+* `prefer_join_method`
+
+    When choosing the join method(broadcast join or shuffle join), if the broadcast join cost and shuffle join cost are equal, which join method should we prefer.
+
+    Currently, the optional values for this variable are "broadcast" or "shuffle".
+
+* `allow_partition_column_nullable`
+
+    Whether to allow the partition column to be NULL when creating the table. The default is true, which means NULL is allowed. false means the partition column must be defined as NOT NULL.
+
+* `insert_visible_timeout_ms`
+
+    When execute insert statement, doris will wait for the transaction to commit and visible after the import is completed.
+    This parameter controls the timeout of waiting for transaction to be visible. The default value is 10000, and the minimum value is 1000.
+
+* `enable_exchange_node_parallel_merge`
+
+    In a sort query, when an upper level node receives the ordered data of the lower level node, it will sort the corresponding data on the exchange node to ensure that the final data is ordered. However, when a single thread merges multiple channels of data, if the amount of data is too large, it will lead to a single point of exchange node merge bottleneck.
+
+    Doris optimizes this part if there are too many data nodes in the lower layer. Exchange node will start multithreading for parallel merging to speed up the sorting process. This parameter is false by default, which means that exchange node does not adopt parallel merge sort to reduce the extra CPU and memory consumption.
+
+* `extract_wide_range_expr`
+
+    Used to control whether turn on the 'Wide Common Factors' rule. The value has two: true or false. On by default.
+
+* `enable_fold_constant_by_be`
+
+    Used to control the calculation method of constant folding. The default is `false`, that is, calculation is performed in `FE`; if it is set to `true`, it will be calculated by `BE` through `RPC` request.
+
+* `cpu_resource_limit`
+
+     Used to limit the resource overhead of a query. This is an experimental feature. The current implementation is to limit the number of scan threads for a query on a single node. The number of scan threads is limited, and the data returned from the bottom layer slows down, thereby limiting the overall computational resource overhead of the query. Assuming it is set to 2, a query can use up to 2 scan threads on a single node.
+
+     This parameter will override the effect of `parallel_fragment_exec_instance_num`. That is, assuming that `parallel_fragment_exec_instance_num` is set to 4, and this parameter is set to 2. Then 4 execution instances on a single node will share up to 2 scanning threads.
+
+     This parameter will be overridden by the `cpu_resource_limit` configuration in the user property.
+
+     The default is -1, which means no limit.
+
+* `disable_join_reorder`
+
+    Used to turn off all automatic join reorder algorithms in the system. There are two values: true and false.It is closed by default, that is, the automatic join reorder algorithm of the system is adopted. After set to true, the system will close all automatic sorting algorithms, adopt the original SQL table order, and execute join
+
+* `enable_infer_predicate`
+
+    Used to control whether to perform predicate derivation. There are two values: true and false. It is turned off by default, that is, the system does not perform predicate derivation, and uses the original predicate to perform related operations. After it is set to true, predicate expansion is performed.
+
+* `return_object_data_as_binary`
+  Used to identify whether to return the bitmap/hll result in the select result. In the select into outfile statement, if the export file format is csv, the bimap/hll data will be base64-encoded, if it is the parquet file format, the data will be stored as a byte array
+
+* `block_encryption_mode`
+  The block_encryption_mode variable controls the block encryption mode. The default setting is empty, when use AES equal to `AES_128_ECB`, when use SM4 equal to `SM3_128_ECB`
+  available values:
+  
+  ```
+    AES_128_ECB,
+    AES_192_ECB,
+    AES_256_ECB,
+    AES_128_CBC,
+    AES_192_CBC,
+    AES_256_CBC,
+    AES_128_CFB,
+    AES_192_CFB,
+    AES_256_CFB,
+    AES_128_CFB1,
+    AES_192_CFB1,
+    AES_256_CFB1,
+    AES_128_CFB8,
+    AES_192_CFB8,
+    AES_256_CFB8,
+    AES_128_CFB128,
+    AES_192_CFB128,
+    AES_256_CFB128,
+    AES_128_CTR,
+    AES_192_CTR,
+    AES_256_CTR,
+    AES_128_OFB,
+    AES_192_OFB,
+    AES_256_OFB,
+    SM4_128_ECB,
+    SM4_128_CBC,
+    SM4_128_CFB128,
+    SM4_128_OFB,
+    SM4_128_CTR,
+  ```
+  
+* `enable_infer_predicate`
+  
+  Used to control whether predicate deduction is performed. There are two values: true and false. It is turned off by default, and the system does not perform predicate deduction, and uses the original predicate for related operations. When set to true, predicate expansion occurs.
\ No newline at end of file
diff --git a/new-docs/zh-CN/admin-manual/config/be-config.md b/new-docs/zh-CN/admin-manual/config/be-config.md
index 8ea91f976d..ba1bc5fc19 100644
--- a/new-docs/zh-CN/admin-manual/config/be-config.md
+++ b/new-docs/zh-CN/admin-manual/config/be-config.md
@@ -26,4 +26,1518 @@ under the License.
 
 <!-- Please sort the configuration alphabetically -->
 
-# BE 配置项
\ No newline at end of file
+# BE 配置项
+
+该文档主要介绍 BE 的相关配置项。
+
+BE 的配置文件 `be.conf` 通常存放在 BE 部署路径的 `conf/` 目录下。 而在 0.14 版本中会引入另一个配置文件 `be_custom.conf`。该配置文件用于记录用户在运行时动态配置并持久化的配置项。
+
+BE 进程启动后,会先读取 `be.conf` 中的配置项,之后再读取 `be_custom.conf` 中的配置项。`be_custom.conf` 中的配置项会覆盖 `be.conf` 中相同的配置项。
+
+## 查看配置项
+
+用户可以通过访问 BE 的 Web 页面查看当前配置项:
+
+`http://be_host:be_webserver_port/varz`
+
+## 设置配置项
+
+BE 的配置项有两种方式进行配置:
+
+1. 静态配置
+
+  在 `conf/be.conf` 文件中添加和设置配置项。`be.conf` 中的配置项会在 BE 进行启动时被读取。没有在 `be.conf` 中的配置项将使用默认值。
+
+2. 动态配置
+
+  BE 启动后,可以通过以下命令动态设置配置项。
+
+  ```
+  curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}'
+  ```
+
+  在 0.13 版本及之前,通过该方式修改的配置项将在 BE 进程重启后失效。在 0.14 及之后版本中,可以通过以下命令持久化修改后的配置。修改后的配置项存储在 `be_custom.conf` 文件中。
+
+  ```
+  curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}&persist=true'
+  ```
+
+## 应用举例
+
+1. 静态方式修改 `max_compaction_concurrency`
+
+  通过在 `be.conf` 文件中添加:
+
+  ```max_compaction_concurrency=5```
+
+  之后重启 BE 进程以生效该配置。
+
+2. 动态方式修改 `streaming_load_max_mb`
+
+  BE 启动后,通过下面命令动态设置配置项 `streaming_load_max_mb`:
+
+  ```curl -X POST http://{be_ip}:{be_http_port}/api/update_config?streaming_load_max_mb=1024```
+
+  返回值如下,则说明设置成功。
+
+  ```
+  {
+      "status": "OK",
+      "msg": ""
+  }
+  ```
+
+  BE 重启后该配置将失效。如果想持久化修改结果,使用如下命令:
+
+  ```
+  curl -X POST http://{be_ip}:{be_http_port}/api/update_config?streaming_load_max_mb=1024\&persist=true
+  ```
+
+## 配置项列表
+
+### `alter_tablet_worker_count`
+
+默认值:3
+
+进行schema change的线程数
+
+### `base_compaction_check_interval_seconds`
+
+默认值:60 (s)
+
+BaseCompaction线程轮询的间隔
+
+### `base_compaction_interval_seconds_since_last_operation`
+
+默认值:86400
+
+BaseCompaction触发条件之一:上一次BaseCompaction距今的间隔
+
+### `base_compaction_num_cumulative_deltas`
+
+默认值:5
+
+BaseCompaction触发条件之一:Cumulative文件数目要达到的限制,达到这个限制之后会触发BaseCompaction
+
+### `base_compaction_write_mbytes_per_sec`
+
+默认值:5(MB)
+
+BaseCompaction任务每秒写磁盘最大速度
+
+### `base_cumulative_delta_ratio`
+
+默认值:0.3  (30%)
+
+BaseCompaction触发条件之一:Cumulative文件大小达到Base文件的比例
+
+### `base_compaction_trace_threshold`
+
+* 类型:int32
+* 描述:打印base compaction的trace信息的阈值,单位秒
+* 默认值:10
+
+base compaction是一个耗时较长的后台操作,为了跟踪其运行信息,可以调整这个阈值参数来控制trace日志的打印。打印信息如下:
+
+```
+W0610 11:26:33.804431 56452 storage_engine.cpp:552] Trace:
+0610 11:23:03.727535 (+     0us) storage_engine.cpp:554] start to perform base compaction
+0610 11:23:03.728961 (+  1426us) storage_engine.cpp:560] found best tablet 546859
+0610 11:23:03.728963 (+     2us) base_compaction.cpp:40] got base compaction lock
+0610 11:23:03.729029 (+    66us) base_compaction.cpp:44] rowsets picked
+0610 11:24:51.784439 (+108055410us) compaction.cpp:46] got concurrency lock and start to do compaction
+0610 11:24:51.784818 (+   379us) compaction.cpp:74] prepare finished
+0610 11:26:33.359265 (+101574447us) compaction.cpp:87] merge rowsets finished
+0610 11:26:33.484481 (+125216us) compaction.cpp:102] output rowset built
+0610 11:26:33.484482 (+     1us) compaction.cpp:106] check correctness finished
+0610 11:26:33.513197 (+ 28715us) compaction.cpp:110] modify rowsets finished
+0610 11:26:33.513300 (+   103us) base_compaction.cpp:49] compaction finished
+0610 11:26:33.513441 (+   141us) base_compaction.cpp:56] unused rowsets have been moved to GC queue
+Metrics: {"filtered_rows":0,"input_row_num":3346807,"input_rowsets_count":42,"input_rowsets_data_size":1256413170,"input_segments_num":44,"merge_rowsets_latency_us":101574444,"merged_rows":0,"output_row_num":3346807,"output_rowset_data_size":1228439659,"output_segments_num":6}
+```
+
+### `be_port`
+
+* 类型:int32
+* 描述:BE 上 thrift server 的端口号,用于接收来自 FE 的请求
+* 默认值:9060
+
+### `be_service_threads`
+* 类型:int32
+* 描述:BE 上 thrift server service的执行线程数,代表可以用于执行FE请求的线程数。
+* 默认值:64
+
+### `brpc_max_body_size`
+
+这个配置主要用来修改 brpc 的参数 `max_body_size`。
+
+有时查询失败,在 BE 日志中会出现 `body_size is too large` 的错误信息。这可能发生在 SQL 模式为 multi distinct + 无 group by + 超过1T 数据量的情况下。这个错误表示 brpc 的包大小超过了配置值。此时可以通过调大该配置避免这个错误。
+
+### `brpc_socket_max_unwritten_bytes`
+
+这个配置主要用来修改 brpc  的参数 `socket_max_unwritten_bytes`。
+
+有时查询失败,BE 日志中会出现 `The server is overcrowded` 的错误信息,表示连接上有过多的未发送数据。当查询需要发送较大的bitmap字段时,可能会遇到该问题,此时可能通过调大该配置避免该错误。
+
+### `transfer_data_by_brpc_attachment`
+
+* 类型: bool
+* 描述:该配置用来控制是否将ProtoBuf Request中的RowBatch转移到Controller Attachment后通过brpc发送。ProtoBuf Request的长度超过2G时会报错: Bad request, error_text=[E1003]Fail to compress request,将RowBatch放到Controller Attachment中将更快且避免这个错误。
+* 默认值:false
+
+### `brpc_num_threads`
+
+该配置主要用来修改brpc中bthreads的数量. 该配置的默认值被设置为-1, 这意味着bthreads的数量将被设置为机器的cpu核数。
+
+用户可以将该配置的值调大来获取更好的QPS性能。更多的信息可以参考`https://github.com/apache/incubator-brpc/blob/master/docs/cn/benchmark.md`。
+
+### `brpc_port`
+
+* 类型:int32
+* 描述:BE 上的 brpc 的端口,用于 BE 之间通讯
+* 默认值:8060
+
+### `buffer_pool_clean_pages_limit`
+
+默认值:20G
+
+清理可能被缓冲池保存的Page
+
+### `buffer_pool_limit`
+
+* 类型:string
+* 描述:buffer pool之中最大的可分配内存
+* 默认值:20%
+
+BE缓存池最大的内存可用量,buffer pool是BE新的内存管理结构,通过buffer page来进行内存管理,并能够实现数据的落盘。并发的所有查询的内存申请都会通过buffer pool来申请。当前buffer pool仅作用在**AggregationNode**与**ExchangeNode**。
+
+### `check_auto_compaction_interval_seconds`
+
+* 类型:int32
+* 描述:当自动执行compaction的功能关闭时,检查自动compaction开关是否被开启的时间间隔。
+* 默认值:5
+
+### `check_consistency_worker_count`
+
+默认值:1
+
+计算tablet的校验和(checksum)的工作线程数
+
+### `chunk_reserved_bytes_limit`
+
+默认值:2147483648
+
+Chunk Allocator的reserved bytes限制,默认为2GB,增加这个变量可以提高性能,但是会获得更多其他模块无法使用的空闲内存
+
+### `clear_transaction_task_worker_count`
+
+默认值:1
+
+用于清理事务的线程数
+
+### `clone_worker_count`
+
+默认值:3
+
+用于执行克隆任务的线程数
+
+### `cluster_id`
+
+* 类型:int32
+
+* 描述:配置BE的所属于的集群id。
+
+* 默认值:-1
+
+该值通常由FE通过心跳向BE下发,不需要额外进行配置。当确认某BE属于某一个确定的Drois集群时,可以进行配置,同时需要修改数据目录下的cluster_id文件,使二者相同。
+
+### `column_dictionary_key_ratio_threshold`
+
+默认值:0
+
+字符串类型的取值比例,小于这个比例采用字典压缩算法
+
+### `column_dictionary_key_size_threshold`
+
+默认值:0
+
+字典压缩列大小,小于这个值采用字典压缩算法
+
+### `compaction_tablet_compaction_score_factor`
+
+* 类型:int32
+* 描述:选择tablet进行compaction时,计算 tablet score 的公式中 compaction score的权重。
+* 默认值:1
+
+### `compaction_tablet_scan_frequency_factor`
+
+* 类型:int32
+* 描述:选择tablet进行compaction时,计算 tablet score 的公式中 tablet scan frequency 的权重。
+* 默认值:0
+
+选择一个tablet执行compaction任务时,可以将tablet的scan频率作为一个选择依据,对当前最近一段时间频繁scan的tablet优先执行compaction。
+tablet score可以通过以下公式计算:
+
+tablet_score = compaction_tablet_scan_frequency_factor * tablet_scan_frequency + compaction_tablet_compaction_score_factor * compaction_score
+
+### `compaction_task_num_per_disk`
+
+* 类型:int32
+* 描述:每个磁盘(HDD)可以并发执行的compaction任务数量。
+* 默认值:2
+
+### `compaction_task_num_per_fast_disk`
+
+* 类型:int32
+* 描述:每个高速磁盘(SSD)可以并发执行的compaction任务数量。
+* 默认值:4
+
+### `compress_rowbatches`
+* 类型:bool
+
+* 描述:序列化RowBatch时是否使用Snappy压缩算法进行数据压缩
+
+* 默认值:true
+
+### `create_tablet_worker_count`
+
+默认值:3
+
+BE创建tablet的工作线程数
+
+### `cumulative_compaction_rounds_for_each_base_compaction_round`
+
+* 类型:int32
+* 描述:Compaction任务的生产者每次连续生产多少轮cumulative compaction任务后生产一轮base compaction。
+* 默认值:9
+
+### `disable_auto_compaction`
+
+* 类型:bool
+* 描述:关闭自动执行compaction任务
+* 默认值:false
+
+一般需要为关闭状态,当调试或测试环境中想要手动操作compaction任务时,可以对该配置进行开启
+
+### `cumulative_compaction_budgeted_bytes`
+
+默认值:104857600
+
+BaseCompaction触发条件之一:Singleton文件大小限制,100MB
+
+### `cumulative_compaction_check_interval_seconds`
+
+默认值:10 (s)
+
+CumulativeCompaction线程轮询的间隔
+
+### `cumulative_compaction_skip_window_seconds`
+
+默认值:30 (s)
+
+CumulativeCompaction会跳过最近发布的增量,以防止压缩可能被查询的版本(以防查询计划阶段花费一些时间)。改参数是设置跳过的窗口时间大小
+
+### `cumulative_compaction_trace_threshold`
+
+* 类型:int32
+* 描述:打印cumulative compaction的trace信息的阈值,单位秒
+* 默认值:2
+
+与base_compaction_trace_threshold类似。
+
+### disable_compaction_trace_log
+
+* 类型: bool
+* 描述: 关闭compaction的trace日志
+* 默认值: true
+
+如果设置为true,`cumulative_compaction_trace_threshold` 和 `base_compaction_trace_threshold` 将不起作用。并且trace日志将关闭。
+
+### `cumulative_compaction_policy`
+
+* 类型:string
+* 描述:配置 cumulative compaction 阶段的合并策略,目前实现了两种合并策略,num_based和size_based
+* 默认值:size_based
+
+详细说明,ordinary,是最初版本的cumulative compaction合并策略,做一次cumulative compaction之后直接base compaction流程。size_based,通用策略是ordinary策略的优化版本,仅当rowset的磁盘体积在相同数量级时才进行版本合并。合并之后满足条件的rowset进行晋升到base compaction阶段。能够做到在大量小批量导入的情况下:降低base compact的写入放大率,并在读取放大率和空间放大率之间进行权衡,同时减少了文件版本的数据。
+
+### `cumulative_size_based_promotion_size_mbytes`
+
+* 类型:int64
+* 描述:在size_based策略下,cumulative compaction的输出rowset总磁盘大小超过了此配置大小,该rowset将用于base compaction。单位是m字节。
+* 默认值:1024
+
+一般情况下,配置在2G以内,为了防止cumulative compaction时间过长,导致版本积压。
+
+### `cumulative_size_based_promotion_ratio`
+
+* 类型:double
+* 描述:在size_based策略下,cumulative compaction的输出rowset总磁盘大小超过base版本rowset的配置比例时,该rowset将用于base compaction。
+* 默认值:0.05
+
+一般情况下,建议配置不要高于0.1,低于0.02。
+
+### `cumulative_size_based_promotion_min_size_mbytes`
+
+* 类型:int64
+* 描述:在size_based策略下,cumulative compaction的输出rowset总磁盘大小低于此配置大小,该rowset将不进行base compaction,仍然处于cumulative compaction流程中。单位是m字节。
+* 默认值:64
+
+一般情况下,配置在512m以内,配置过大会导致base版本早期的大小过小,一直不进行base compaction。
+
+### `cumulative_size_based_compaction_lower_size_mbytes`
+
+* 类型:int64
+* 描述:在size_based策略下,cumulative compaction进行合并时,选出的要进行合并的rowset的总磁盘大小大于此配置时,才按级别策略划分合并。小于这个配置时,直接执行合并。单位是m字节。
+* 默认值:64
+
+一般情况下,配置在128m以内,配置过大会导致cumulative compaction写放大较多。
+
+### `custom_config_dir`
+
+配置 `be_custom.conf` 文件的位置。默认为 `conf/` 目录下。
+
+在某些部署环境下,`conf/` 目录可能因为系统的版本升级被覆盖掉。这会导致用户在运行是持久化修改的配置项也被覆盖。这时,我们可以将 `be_custom.conf` 存储在另一个指定的目录中,以防止配置文件被覆盖。
+
+### `default_num_rows_per_column_file_block`
+* 类型:int32
+* 描述:配置单个RowBlock之中包含多少行的数据。
+* 默认值:1024
+
+### `default_rowset_type`
+* 类型:string
+* 描述:标识BE默认选择的存储格式,可配置的参数为:"**ALPHA**", "**BETA**"。主要起以下两个作用
+1. 当建表的storage_format设置为Default时,通过该配置来选取BE的存储格式。
+2. 进行Compaction时选择BE的存储格式
+* 默认值:BETA
+
+### `delete_worker_count`
+
+默认值:3
+
+执行数据删除任务的线程数
+
+### `disable_mem_pools`
+
+默认值:false
+
+是否禁用内存缓存池,默认不禁用
+
+### `disable_storage_page_cache`
+
+* 类型:bool
+* 描述:是否进行使用page cache进行index的缓存,该配置仅在BETA存储格式时生效
+* 默认值:false
+
+### `disk_stat_monitor_interval`
+
+默认值:5  (s)
+
+磁盘状态检查时间间隔
+
+### `doris_cgroups`
+
+默认值:空
+
+分配给doris的cgroups
+
+### `doris_max_pushdown_conjuncts_return_rate`
+
+* 类型:int32
+* 描述:BE在进行HashJoin时,会采取动态分区裁剪的方式将join条件下推到OlapScanner上。当OlapScanner扫描的数据大于32768行时,BE会进行过滤条件检查,如果该过滤条件的过滤率低于该配置,则Doris会停止使用动态分区裁剪的条件进行数据过滤。
+* 默认值:90
+
+
+### `doris_max_scan_key_num`
+
+* 类型:int
+* 描述:用于限制一个查询请求中,scan node 节点能拆分的最大 scan key 的个数。当一个带有条件的查询请求到达 scan node 节点时,scan node 会尝试将查询条件中 key 列相关的条件拆分成多个 scan key range。之后这些 scan key range 会被分配给多个 scanner 线程进行数据扫描。较大的数值通常意味着可以使用更多的 scanner 线程来提升扫描操作的并行度。但在高并发场景下,过多的线程可能会带来更大的调度开销和系统负载,反而会降低查询响应速度。一个经验数值为 50。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables.html) 中 `max_scan_key_num` 的说明。
+* 默认值:1024
+
+当在高并发场景下发下并发度无法提升时,可以尝试降低该数值并观察影响。
+
+### `doris_scan_range_row_count`
+
+* 类型:int32
+* 描述:BE在进行数据扫描时,会将同一个扫描范围拆分为多个ScanRange。该参数代表了每个ScanRange代表扫描数据范围。通过该参数可以限制单个OlapScanner占用io线程的时间。
+* 默认值:524288
+
+### `doris_scanner_queue_size`
+
+* 类型:int32
+* 描述:TransferThread与OlapScanner之间RowBatch的缓存队列的长度。Doris进行数据扫描时是异步进行的,OlapScanner扫描上来的Rowbatch会放入缓存队列之中,等待上层TransferThread取走。
+* 默认值:1024
+
+### `doris_scanner_row_num`
+
+默认值:16384
+
+每个扫描线程单次执行最多返回的数据行数
+
+### `doris_scanner_thread_pool_queue_size`
+
+* 类型:int32
+* 描述:Scanner线程池的队列长度。在Doris的扫描任务之中,每一个Scanner会作为一个线程task提交到线程池之中等待被调度,而提交的任务数目超过线程池队列的长度之后,后续提交的任务将阻塞直到队列之中有新的空缺。
+* 默认值:102400
+
+### `doris_scanner_thread_pool_thread_num`
+
+* 类型:int32
+* 描述:Scanner线程池线程数目。在Doris的扫描任务之中,每一个Scanner会作为一个线程task提交到线程池之中等待被调度,该参数决定了Scanner线程池的大小。
+* 默认值:48
+
+### `download_low_speed_limit_kbps`
+
+默认值:50 (KB/s)
+
+下载最低限速
+
+### `download_low_speed_time`
+
+默认值:300 (s)
+
+下载时间限制,默认300秒
+
+### `download_worker_count`
+
+默认值:1
+
+下载线程数,默认1个
+
+### `drop_tablet_worker_count`
+
+默认值:3
+
+删除tablet的线程数
+
+### `enable_metric_calculator`
+
+默认值:true
+
+如果设置为 true,metric calculator 将运行,收集BE相关指标信息,如果设置成false将不运行
+
+### `enable_partitioned_aggregation`
+
+* 类型:bool
+* 描述:BE节点是否通过PartitionAggregateNode来实现聚合操作,如果false的话将会执行AggregateNode完成聚合。非特殊需求场景不建议设置为false。
+* 默认值:true
+
+### `enable_prefetch`
+
+* 类型:bool
+* 描述:当使用PartitionedHashTable进行聚合和join计算时,是否进行HashBuket的预取,推荐设置为true。
+* 默认值:true
+
+### `enable_quadratic_probing`
+
+* 类型:bool
+* 描述:当使用PartitionedHashTable时发生Hash冲突时,是否采用平方探测法来解决Hash冲突。该值为false的话,则选用线性探测发来解决Hash冲突。关于平方探测法可参考:[quadratic_probing](https://en.wikipedia.org/wiki/Quadratic_probing)
+* 默认值:true
+
+### `enable_system_metrics`
+
+默认值:true
+
+用户控制打开和关闭系统指标
+
+### `enable_token_check`
+
+默认值:true
+
+用于向前兼容,稍后将被删除
+
+### `es_http_timeout_ms`
+
+默认值:5000 (ms)
+
+通过http连接ES的超时时间,默认是5秒
+
+### `es_scroll_keepalive`
+
+默认值:5m
+
+es scroll Keeplive保持时间,默认5分钟
+
+### `etl_thread_pool_queue_size`
+
+默认值:256
+
+ETL线程池的大小
+
+### `etl_thread_pool_size`
+
+### `exchg_node_buffer_size_bytes`
+
+* 类型:int32
+* 描述:ExchangeNode节点Buffer队列的大小,单位为byte。来自Sender端发送的数据量大于ExchangeNode的Buffer大小之后,后续发送的数据将阻塞直到Buffer腾出可写入的空间。
+* 默认值:10485760
+
+### `file_descriptor_cache_capacity`
+
+默认值:32768
+
+文件句柄缓存的容量,默认缓存32768个文件句柄
+
+### `cache_clean_interval`
+
+默认值:1800 (s)
+
+文件句柄缓存清理的间隔,用于清理长期不用的文件句柄。
+同时也是Segment Cache的清理间隔时间。
+
+### `flush_thread_num_per_store`
+
+默认值:2
+
+每个store用于刷新内存表的线程数
+
+### `force_recovery`
+
+### `fragment_pool_queue_size`
+
+默认值:2048
+
+单节点上能够处理的查询请求上限
+
+### `fragment_pool_thread_num_min`
+
+默认值:64
+
+### `fragment_pool_thread_num_max`
+
+默认值:256
+
+查询线程数,默认最小启动64个线程,后续查询请求动态创建线程,最大创建256个线程
+
+### `heartbeat_service_port`
+
+* 类型:int32
+* 描述:BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳
+* 默认值:9050
+
+### `heartbeat_service_thread_count`
+
+* 类型:int32
+* 描述:执行BE上心跳服务的线程数,默认为1,不建议修改
+* 默认值:1
+
+### `ignore_broken_disk`
+
+ 当BE启动时,会检查``storage_root_path`` 配置下的所有路径。
+
+ - `ignore_broken_disk=true`
+
+   如果路径不存在或路径下无法进行读写文件(坏盘),将忽略此路径,如果有其他可用路径则不中断启动。
+
+ - `ignore_broken_disk=false`
+
+   如果路径不存在或路径下无法进行读写文件(坏盘),将中断启动失败退出。
+
+​    默认为false
+
+### `ignore_load_tablet_failure`
+
+* 类型:bool
+* 描述:用来决定在有tablet 加载失败的情况下是否忽略错误,继续启动be
+* 默认值:false
+
+BE启动时,会对每个数据目录单独启动一个线程进行 tablet header 元信息的加载。默认配置下,如果某个数据目录有 tablet 加载失败,则启动进程会终止。同时会在 `be.INFO` 日志中看到如下错误信息:
+
+```
+load tablets from header failed, failed tablets size: xxx, path=xxx
+```
+
+表示该数据目录共有多少 tablet 加载失败。同时,日志中也会有加载失败的 tablet 的具体信息。此时需要人工介入来对错误原因进行排查。排查后,通常有两种方式进行恢复:
+
+1. tablet 信息不可修复,在确保其他副本正常的情况下,可以通过 `meta_tool` 工具将错误的tablet删除。
+2. 将 `ignore_load_tablet_failure` 设置为 true,则 BE 会忽略这些错误的 tablet,正常启动。
+
+### `ignore_rowset_stale_unconsistent_delete`
+
+* 类型:bool
+* 描述:用来决定当删除过期的合并过的rowset后无法构成一致的版本路径时,是否仍要删除。
+* 默认值:false
+
+合并的过期 rowset 版本路径会在半个小时后进行删除。在异常下,删除这些版本会出现构造不出查询一致路径的问题,当配置为false时,程序检查比较严格,程序会直接报错退出。
+当配置为true时,程序会正常运行,忽略这个错误。一般情况下,忽略这个错误不会对查询造成影响,仅会在fe下发了合并过的版本时出现-230错误。
+
+### `inc_rowset_expired_sec`
+
+默认值:1800 (s)
+
+导入激活的数据,存储引擎保留的时间,用于增量克隆
+
+### `index_stream_cache_capacity`
+
+默认值:10737418240
+
+BloomFilter/Min/Max等统计信息缓存的容量
+
+### `kafka_broker_version_fallback`
+
+默认值:0.10.0
+
+如果依赖的 kafka 版本低于routine load依赖的 kafka 客户端版本, 将使用回退版本 kafka_broker_version_fallback 设置的值,有效值为:0.9.0、0.8.2、0.8.1、0.8.0。
+
+### `load_data_reserve_hours`
+
+默认值:4 (小时)
+
+用于mini load。mini load数据文件将在此时间后被删除
+
+### `load_error_log_reserve_hours`
+
+默认值:48(小时)
+
+load错误日志将在此时间后删除
+
+### `load_process_max_memory_limit_bytes`
+
+默认值:107374182400
+
+单节点上所有的导入线程占据的内存上限,默认值:100G
+
+将这些默认值设置得很大,因为我们不想在用户升级 Doris 时影响负载性能。 如有必要,用户应正确设置这些配置。
+
+### `load_process_max_memory_limit_percent`
+
+默认值:80
+
+单节点上所有的导入线程占据的内存上限比例,默认80%
+
+将这些默认值设置得很大,因为我们不想在用户升级 Doris 时影响负载性能。 如有必要,用户应正确设置这些配置。
+
+### `log_buffer_level`
+
+默认值:空
+
+日志刷盘的策略,默认保持在内存中
+
+### `madvise_huge_pages`
+
+默认值:false
+
+是否使用linux内存大页,默认不启用
+
+### `make_snapshot_worker_count`
+
+默认值:5
+
+制作快照的线程数
+
+### `max_client_cache_size_per_host`
+
+默认值:10
+
+每个主机的最大客户端缓存数,BE 中有多种客户端缓存,但目前我们使用相同的缓存大小配置。 如有必要,使用不同的配置来设置不同的客户端缓存。
+
+### `max_compaction_threads`
+
+* 类型:int32
+* 描述:Compaction线程池中线程数量的最大值。
+* 默认值:10
+
+### `max_consumer_num_per_group`
+
+默认值:3
+
+一个数据消费者组中的最大消费者数量,用于routine load
+
+### `min_cumulative_compaction_num_singleton_deltas`
+
+默认值:5
+
+cumulative compaction策略:最小增量文件的数量
+
+### `max_cumulative_compaction_num_singleton_deltas`
+
+默认值:1000
+
+cumulative compaction策略:最大增量文件的数量
+
+### `max_download_speed_kbps`
+
+默认值:50000 (kb/s)
+
+最大下载速度限制
+
+### `max_free_io_buffers`
+
+默认值:128
+
+对于每个 io 缓冲区大小,IoMgr 将保留的最大缓冲区数从 1024B 到 8MB 的缓冲区,最多约为 2GB 的缓冲区。
+
+### `max_garbage_sweep_interval`
+
+默认值:3600
+
+磁盘进行垃圾清理的最大间隔,默认一个小时  
+
+### `max_memory_sink_batch_count`
+
+默认值:20
+
+最大外部扫描缓存批次计数,表示缓存max_memory_cache_batch_count * batch_size row,默认为20,batch_size的默认值为1024,表示将缓存20 * 1024行
+
+### `max_percentage_of_error_disk`
+
+* 类型:int32
+* 描述:存储引擎允许存在损坏硬盘的百分比,损坏硬盘超过改比例后,BE将会自动退出。
+* 默认值:0
+
+### `max_pushdown_conditions_per_column`
+
+* 类型:int
+* 描述:用于限制一个查询请求中,针对单个列,能够下推到存储引擎的最大条件数量。在查询计划执行的过程中,一些列上的过滤条件可以下推到存储引擎,这样可以利用存储引擎中的索引信息进行数据过滤,减少查询需要扫描的数据量。比如等值条件、IN 谓词中的条件等。这个参数在绝大多数情况下仅影响包含 IN 谓词的查询。如 `WHERE colA IN (1,2,3,4,...)`。较大的数值意味值 IN 谓词中更多的条件可以推送给存储引擎,但过多的条件可能会导致随机读的增加,某些情况下可能会降低查询效率。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables.html) 中 `max_pushdown_conditions_per_column ` 的说明。
+* 默认值:1024
+
+* 示例
+
+    表结构为 `id INT, col2 INT, col3 varchar(32), ...`。
+    
+    查询请求为 `... WHERE id IN (v1, v2, v3, ...)`
+    
+    如果 IN 谓词中的条件数量超过了该配置,则可以尝试增加该配置值,观察查询响应是否有所改善。
+
+### `max_runnings_transactions_per_txn_map`
+
+默认值:100
+
+txn 管理器中每个 txn_partition_map 的最大 txns 数,这是一种自我保护,以避免在管理器中保存过多的 txns
+
+### `max_send_batch_parallelism_per_job`
+
+* 类型:int
+* 描述:OlapTableSink 发送批处理数据的最大并行度,用户为 `send_batch_parallelism` 设置的值不允许超过 `max_send_batch_parallelism_per_job` ,如果超过, `send_batch_parallelism` 将被设置为 `max_send_batch_parallelism_per_job` 的值。
+* 默认值:1
+
+### `max_tablet_num_per_shard`
+
+默认:1024
+
+每个shard的tablet数目,用于划分tablet,防止单个目录下tablet子目录过多
+
+### `max_tablet_version_num`
+
+* 类型:int
+* 描述:限制单个 tablet 最大 version 的数量。用于防止导入过于频繁,或 compaction 不及时导致的大量 version 堆积问题。当超过限制后,导入任务将被拒绝。
+* 默认值:500
+
+### `mem_limit`
+
+* 类型:string
+* 描述:限制BE进程使用服务器最大内存百分比。用于防止BE内存挤占太多的机器内存,该参数必须大于0,当百分大于100%之后,该值会默认为100%。
+* 默认值:80%
+
+### `memory_limitation_per_thread_for_schema_change`
+
+默认值:2 (GB)
+
+单个schema change任务允许占用的最大内存
+
+### `memory_maintenance_sleep_time_s`
+
+默认值:10 
+
+内存维护迭代之间的休眠时间(以秒为单位)
+
+### `memory_max_alignment`
+
+默认值:16
+
+最大校对内存
+
+### `read_size`
+
+默认值:8388608
+
+读取大小是发送到 os 的读取大小。 在延迟和整个过程之间进行权衡,试图让磁盘保持忙碌但不引入寻道。 对于 8 MB 读取,随机 io 和顺序 io 的性能相似
+
+### `min_buffer_size`
+
+默认值:1024
+
+最小读取缓冲区大小(以字节为单位)
+
+### `min_compaction_failure_interval_sec`
+
+* 类型:int32
+* 描述:在 cumulative compaction 过程中,当选中的 tablet 没能成功的进行版本合并,则会等待一段时间后才会再次有可能被选中。等待的这段时间就是这个配置的值。
+* 默认值:5
+* 单位:秒
+
+### `min_compaction_threads`
+
+* 类型:int32
+* 描述:Compaction线程池中线程数量的最小值。
+* 默认值:10
+
+### `min_file_descriptor_number`
+
+默认值:60000
+
+BE进程的文件句柄limit要求的下限
+
+### `min_garbage_sweep_interval`
+
+默认值:180
+
+磁盘进行垃圾清理的最小间隔,时间秒
+
+### `mmap_buffers`
+
+默认值:false
+
+是否使用mmap分配内存,默认不使用
+
+### `num_cores`
+
+* 类型:int32
+* 描述:BE可以使用CPU的核数。当该值为0时,BE将从/proc/cpuinfo之中获取本机的CPU核数。
+* 默认值:0
+
+### `num_disks`
+
+默认值:0
+
+控制机器上的磁盘数量。 如果为 0,则来自系统设置。
+
+### `num_threads_per_core`
+
+默认值:3
+
+控制每个内核运行工作的线程数。 通常选择 2 倍或 3 倍的内核数量。 这使核心保持忙碌而不会导致过度抖动
+
+### `num_threads_per_disk`
+
+默认值:0
+
+每个磁盘的最大线程数也是每个磁盘的最大队列深度
+
+### `number_tablet_writer_threads`
+
+默认值:16
+
+tablet写线程数
+
+### `path_gc_check`
+
+默认值:true
+
+是否启用回收扫描数据线程检查,默认启用
+
+### `path_gc_check_interval_second`
+
+默认值:86400
+
+回收扫描数据线程检查时间间隔,单位秒
+
+### `path_gc_check_step`
+
+默认值:1000
+
+### `path_gc_check_step_interval_ms`
+
+默认值:10 (ms)
+
+### `path_scan_interval_second`
+
+默认值:86400
+
+### `pending_data_expire_time_sec`
+
+默认值:1800 
+
+存储引擎保留的未生效数据的最大时长,默认单位:秒
+
+### `periodic_counter_update_period_ms`
+
+默认值:500
+
+更新速率计数器和采样计数器的周期,默认单位:毫秒
+
+### `plugin_path`
+
+默认值:${DORIS_HOME}/plugin
+
+插件路径
+
+### `port`
+
+* 类型:int32
+* 描述:BE单测时使用的端口,在实际环境之中无意义,可忽略。
+* 默认值:20001
+
+### `pprof_profile_dir`
+
+默认值:${DORIS_HOME}/log
+
+pprof profile保存目录
+
+### `priority_networks`
+
+默认值:空
+
+为那些有很多 ip 的服务器声明一个选择策略。 请注意,最多应该有一个 ip 与此列表匹配。 这是一个以分号分隔格式的列表,用 CIDR 表示法,例如 10.10.10.0/24 , 如果没有匹配这条规则的ip,会随机选择一个。
+
+### `priority_queue_remaining_tasks_increased_frequency`
+
+默认值:512
+
+ the increased frequency of priority for remaining tasks in BlockingPriorityQueue
+
+### `publish_version_worker_count`
+
+默认值:8
+
+生效版本的线程数
+
+### `pull_load_task_dir`
+
+默认值:${DORIS_HOME}/var/pull_load
+
+拉取laod任务的目录
+
+### `push_worker_count_high_priority`
+
+默认值:3
+
+导入线程数,用于处理HIGH优先级任务
+
+### `push_worker_count_normal_priority`
+
+默认值:3
+
+导入线程数,用于处理NORMAL优先级任务
+
+### `push_write_mbytes_per_sec`
+
++ 类型:int32
++ 描述:导入数据速度控制,默认最快每秒10MB。适用于所有的导入方式。
++ 单位:MB
++ 默认值:10
+
+### `query_scratch_dirs`
+
+* 类型:string
+* 描述:BE进行数据落盘时选取的目录来存放临时数据,与存储路径配置类似,多目录之间用;分隔。
+* 默认值:${DORIS_HOME}
+
+### `release_snapshot_worker_count`
+
+默认值:5
+
+释放快照的线程数
+
+### `report_disk_state_interval_seconds`
+
+默认值:60
+
+代理向 FE 报告磁盘状态的间隔时间(秒)
+
+### `report_tablet_interval_seconds`
+
+默认值:60
+
+代理向 FE 报告 olap 表的间隔时间(秒)
+
+### `report_task_interval_seconds`
+
+默认值:10
+
+代理向 FE 报告任务签名的间隔时间(秒)
+
+### `result_buffer_cancelled_interval_time`
+
+默认值:300
+
+结果缓冲区取消时间(单位:秒)
+
+### `routine_load_thread_pool_size`
+
+默认值:10
+
+routine load任务的线程池大小。 这应该大于 FE 配置 'max_concurrent_task_num_per_be'(默认 5)
+
+### `row_nums_check`
+
+默认值:true
+
+检查 BE/CE 和schema更改的行号。 true 是打开的,false 是关闭的。
+
+### `row_step_for_compaction_merge_log`
+
+* 类型:int64
+* 描述:Compaction执行过程中,每次合并row_step_for_compaction_merge_log行数据会打印一条LOG。如果该参数被设置为0,表示merge过程中不需要打印LOG。
+* 默认值: 0
+* 可动态修改:是
+
+### `scan_context_gc_interval_min`
+
+默认值:5
+
+此配置用于上下文gc线程调度周期 , 注意:单位为分钟,默认为 5 分钟
+
+### `send_batch_thread_pool_thread_num`
+
+* 类型:int32
+* 描述:SendBatch线程池线程数目。在NodeChannel的发送数据任务之中,每一个NodeChannel的SendBatch操作会作为一个线程task提交到线程池之中等待被调度,该参数决定了SendBatch线程池的大小。
+* 默认值:256
+
+### `send_batch_thread_pool_queue_size`
+
+* 类型:int32
+* 描述:SendBatch线程池的队列长度。在NodeChannel的发送数据任务之中,每一个NodeChannel的SendBatch操作会作为一个线程task提交到线程池之中等待被调度,而提交的任务数目超过线程池队列的长度之后,后续提交的任务将阻塞直到队列之中有新的空缺。
+* 默认值:102400
+
+### `serialize_batch`
+
+默认值:false
+
+BE之间rpc通信是否序列化RowBatch,用于查询层之间的数据传输
+
+### `sleep_one_second`
++ 类型:int32
++ 描述:全局变量,用于BE线程休眠1秒,不应该被修改
++ 默认值:1
+
+### `small_file_dir`
+
+默认值:${DORIS_HOME}/lib/small_file/
+
+用于保存 SmallFileMgr 下载的文件的目录
+
+### `snapshot_expire_time_sec`
+
+默认值:172800
+
+快照文件清理的间隔,默认值:48小时
+
+### `status_report_interval`
+
+默认值:5
+
+配置文件报告之间的间隔;单位:秒
+
+### `storage_flood_stage_left_capacity_bytes`
+
+默认值:1073741824
+
+数据目录应该剩下的最小存储空间,默认1G
+
+### `storage_flood_stage_usage_percent`
+
+默认值:95 (95%)
+
+storage_flood_stage_usage_percent和storage_flood_stage_left_capacity_bytes两个配置限制了数据目录的磁盘容量的最大使用。 如果这两个阈值都达到,则无法将更多数据写入该数据目录。 数据目录的最大已用容量百分比
+
+### `storage_medium_migrate_count`
+
+默认值:1
+
+要克隆的线程数
+
+### `storage_page_cache_limit`
+
+默认值:20%
+
+缓存存储页大小
+
+### `index_page_cache_percentage`
+* 类型:int32
+* 描述:索引页缓存占总页面缓存的百分比,取值为[0, 100]。
+* 默认值:10
+
+### `storage_root_path`
+
+* 类型:string
+
+* 描述:BE数据存储的目录,多目录之间用英文状态的分号`;`分隔。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号`,`隔开。
+
+  示例1如下:
+  
+  **注意:如果是SSD磁盘要在目录后面加上`.SSD`,HDD磁盘在目录后面加`.HDD`**
+
+  `storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris`
+
+  * /home/disk1/doris.HDD,50,表示存储限制为50GB,HDD;
+  * /home/disk2/doris.SSD,10,存储限制为10GB,SSD;
+  * /home/disk2/doris,存储限制为磁盘最大容量,默认为HDD
+  
+  示例2如下:
+      
+  **注意:不论HHD磁盘目录还是SSD磁盘目录,文件夹目录名称都无需添加后缀,storage_root_path参数里指定medium即可**
+  
+  `storage_root_path=/home/disk1/doris,medium:hdd,capacity:50;/home/disk2/doris,medium:ssd,capacity:50`
+  
+  **说明**
+  
+  - /home/disk1/doris,medium:hdd,capacity:10,表示存储限制为10GB, HHD;
+  - /home/disk2/doris,medium:ssd,capacity:50,表示存储限制为50GB, SSD;
+
+
+* 默认值:${DORIS_HOME}
+
+### `storage_strict_check_incompatible_old_format`
+* 类型:bool
+* 描述:用来检查不兼容的旧版本格式时是否使用严格的验证方式
+* 默认值: true
+* 可动态修改:否
+
+配置用来检查不兼容的旧版本格式时是否使用严格的验证方式,当含有旧版本的 hdr 格式时,使用严谨的方式时,程序会
+打出 fatal log 并且退出运行;否则,程序仅打印 warn log.
+
+### `streaming_load_max_mb`
+
+* 类型:int64
+* 描述:用于限制数据格式为 csv 的一次 Stream load 导入中,允许的最大数据量。单位 MB。
+* 默认值: 10240
+* 可动态修改:是
+
+Stream Load 一般适用于导入几个GB以内的数据,不适合导入过大的数据。
+
+### `streaming_load_json_max_mb`
+
+* 类型:int64
+* 描述:用于限制数据格式为 json 的一次 Stream load 导入中,允许的最大数据量。单位 MB。
+* 默认值: 100
+* 可动态修改:是
+
+一些数据格式,如 JSON,无法进行拆分处理,必须读取全部数据到内存后才能开始解析,因此,这个值用于限制此类格式数据单次导入最大数据量。
+
+### `streaming_load_rpc_max_alive_time_sec`
+
+默认值:1200
+
+TabletsChannel 的存活时间。如果此时通道没有收到任何数据, 通道将被删除。
+
+### `sync_tablet_meta`
+
+默认值:false
+
+存储引擎是否开sync保留到磁盘上
+
+### `sys_log_dir`
+
+* 类型:string
+* 描述:BE日志数据的存储目录
+* 默认值:${DORIS_HOME}/log
+
+### `sys_log_level`
+
+默认值:INFO
+
+日志级别,INFO < WARNING < ERROR < FATAL
+
+### `sys_log_roll_mode`
+
+默认值:SIZE-MB-1024
+
+日志拆分的大小,每1G拆分一个日志文件
+
+### `sys_log_roll_num`
+
+默认值:10
+
+日志文件保留的数目
+
+### `sys_log_verbose_level`
+
+默认值:10
+
+日志显示的级别,用于控制代码中VLOG开头的日志输出
+
+### `sys_log_verbose_modules`
+
+默认值:空
+
+日志打印的模块,写olap就只打印olap模块下的日志
+
+### `tablet_map_shard_size`
+
+默认值:1
+
+tablet_map_lock 分片大小,值为 2^n, n=0,1,2,3,4 ,这是为了更好地管理tablet
+
+### `tablet_meta_checkpoint_min_interval_secs`
+
+默认值:600 (秒)
+
+TabletMeta Checkpoint线程轮询的时间间隔
+
+### `tablet_meta_checkpoint_min_new_rowsets_num`
+
+默认值:10
+
+TabletMeta Checkpoint的最小Rowset数目
+
+### `tablet_scan_frequency_time_node_interval_second`
+
+* 类型:int64
+* 描述:用来表示记录 metric 'query_scan_count' 的时间间隔。为了计算当前一段时间的tablet的scan频率,需要每隔一段时间记录一次 metric 'query_scan_count'。
+* 默认值:300
+
+### `tablet_stat_cache_update_interval_second`
+
+默认值:300
+
+tablet状态缓存的更新间隔,单位:秒
+
+### `tablet_rowset_stale_sweep_time_sec`
+
+* 类型:int64
+* 描述:用来表示清理合并版本的过期时间,当当前时间 now() 减去一个合并的版本路径中rowset最近创建创建时间大于tablet_rowset_stale_sweep_time_sec时,对当前路径进行清理,删除这些合并过的rowset, 单位为s。
+* 默认值:1800
+
+当写入过于频繁,磁盘空间不足时,可以配置较少这个时间。不过这个时间过短小于5分钟时,可能会引发fe查询不到已经合并过的版本,引发查询-230错误。
+
+### `tablet_writer_open_rpc_timeout_sec`
+
+默认值:60
+
+在远程BE 中打开tablet writer的 rpc 超时。 操作时间短,可设置短超时时间
+
+### `tablet_writer_ignore_eovercrowded`
+
+* 类型:bool
+* 描述:写入时可忽略brpc的'[E1011]The server is overcrowded'错误。
+* 默认值:false
+
+当遇到'[E1011]The server is overcrowded'的错误时,可以调整配置项`brpc_socket_max_unwritten_bytes`,但这个配置项不能动态调整。所以可通过设置此项为`true`来临时避免写失败。注意,此配置项只影响写流程,其他的rpc请求依旧会检查是否overcrowded。
+
+### `tc_free_memory_rate`
+
+默认值:20   (%)
+
+可用内存,取值范围:[0-100]
+
+### `tc_max_total_thread_cache_bytes`
+
+* 类型:int64
+* 描述:用来限制 tcmalloc 中总的线程缓存大小。这个限制不是硬限,因此实际线程缓存使用可能超过这个限制。具体可参阅 [TCMALLOC\_MAX\_TOTAL\_THREAD\_CACHE\_BYTES](https://gperftools.github.io/gperftools/tcmalloc.html)
+* 默认值: 1073741824
+
+如果发现系统在高压力场景下,通过 BE 线程堆栈发现大量线程处于 tcmalloc 的锁竞争阶段,如大量的 `SpinLock` 相关堆栈,则可以尝试增大该参数来提升系统性能。[参考](https://github.com/gperftools/gperftools/issues/1111)
+
+### `tc_use_memory_min`
+
+默认值:10737418240
+
+TCmalloc 的最小内存,当使用的内存小于这个时,不返回给操作系统
+
+### `thrift_client_retry_interval_ms`
+
+* 类型:int64
+* 描述:用来为be的thrift客户端设置重试间隔, 避免fe的thrift server发生雪崩问题,单位为ms。
+* 默认值:1000
+
+### `thrift_connect_timeout_seconds`
+
+默认值:3
+
+默认thrift客户端连接超时时间(单位:秒)
+
+### `thrift_rpc_timeout_ms`
+
+默认值:5000
+
+thrift默认超时时间,默认:5秒
+
+### `thrift_server_type_of_fe`
+
+该配置表示FE的Thrift服务使用的服务模型, 类型为string, 大小写不敏感,该参数需要和fe的thrift_server_type参数的设置保持一致。目前该参数的取值有两个,`THREADED`和`THREAD_POOL`。
+
+若该参数为`THREADED`, 该模型为非阻塞式I/O模型,
+
+若该参数为`THREAD_POOL`, 该模型为阻塞式I/O模型。
+
+### `total_permits_for_compaction_score`
+
+* 类型:int64
+* 描述:被所有的compaction任务所能持有的 "permits" 上限,用来限制compaction占用的内存。
+* 默认值:10000
+* 可动态修改:是
+
+### `trash_file_expire_time_sec`
+
+默认值:259200
+
+回收站清理的间隔,72个小时,当磁盘空间不足时,trash下的文件保存期可不遵守这个参数
+
+### `txn_commit_rpc_timeout_ms`
+
+默认值:10000
+
+txn 提交 rpc 超时,默认10秒
+
+### `txn_map_shard_size`
+
+默认值:128
+
+txn_map_lock 分片大小,取值为2^n,n=0,1,2,3,4。这是一项增强功能,可提高管理 txn 的性能
+
+### `txn_shard_size`
+
+默认值:1024
+
+txn_lock 分片大小,取值为2^n,n=0,1,2,3,4,  这是一项增强功能,可提高提交和发布 txn 的性能
+
+### `unused_rowset_monitor_interval`
+
+默认值:30
+
+清理过期Rowset的时间间隔,单位:秒
+
+### `upload_worker_count`
+
+默认值:1
+
+上传文件最大线程数
+
+### `use_mmap_allocate_chunk`
+
+默认值:false
+
+是否使用 mmap 分配块。 如果启用此功能,最好增加 vm.max_map_count 的值,其默认值为 65530。您可以通过“sysctl -w vm.max_map_count=262144”或“echo 262144 > /proc/sys/vm/”以 root 身份进行操作 max_map_count" ,当这个设置为true时,你必须将chunk_reserved_bytes_limit设置为一个相对较大的数字,否则性能非常非常糟糕。
+
+### `user_function_dir`
+
+默认值:${DORIS_HOME}/lib/udf
+
+udf函数目录
+
+### `webserver_num_workers`
+
+默认值:48
+
+webserver默认工作线程数
+
+### `webserver_port`
+* 类型:int32
+* 描述:BE 上的 http server 的服务端口
+* 默认值:8040
+
+### `write_buffer_size`
+
+默认值:104857600
+
+刷写前缓冲区的大小
+
+### `zone_map_row_num_threshold`
+
+* 类型: int32
+* 描述: 如果一个page中的行数小于这个值就不会创建zonemap,用来减少数据膨胀
+* 默认值: 20
+
+### `aws_log_level`
+
+* 类型: int32
+* 描述: AWS SDK 的日志级别
+  ```
+     Off = 0,
+     Fatal = 1,
+     Error = 2,
+     Warn = 3,
+     Info = 4,
+     Debug = 5,
+     Trace = 6
+  ```
+* 默认值: 3
+
+### `track_new_delete`
+
+* 类型:bool
+* 描述:是否Hook TCmalloc new/delete,目前在Hook中统计thread local MemTracker。
+* 默认值:true
+
+### `mem_tracker_level`
+
+* 类型: int16
+* 描述: MemTracker在Web页面上展示的级别,等于或低于这个级别的MemTracker会在Web页面上展示
+  ```
+    OVERVIEW = 0
+    TASK = 1
+    INSTANCE = 2
+    VERBOSE = 3
+  ```
+* 默认值: 0
+
+### `mem_tracker_consume_min_size_bytes`
+
+* 类型: int32
+* 描述: TCMalloc Hook consume/release MemTracker时的最小长度,小于该值的consume size会持续累加,避免频繁调用MemTracker的consume/release,减小该值会增加consume/release的频率,增大该值会导致MemTracker统计不准,理论上一个MemTracker的统计值与真实值相差 = (mem_tracker_consume_min_size_bytes * 这个MemTracker所在的BE线程数)。
+* 默认值: 1048576
+
+### `memory_leak_detection`
+
+* 类型: bool
+* 描述: 是否启动内存泄漏检测,当 MemTracker 为负值时认为发生了内存泄漏,但实际 MemTracker 记录不准确时也会导致负值,所以这个功能处于实验阶段。
+* 默认值: false
+
+### `max_segment_num_per_rowset`
+
+* 类型: int32
+* 描述: 用于限制导入时,新产生的rowset中的segment数量。如果超过阈值,导入会失败并报错 -238。过多的 segment 会导致compaction占用大量内存引发 OOM 错误。
+* 默认值: 200
+
+### `remote_storage_read_buffer_mb`
+
+* 类型: int32
+* 描述: 读取hdfs或者对象存储上的文件时,使用的缓存大小。
+* 默认值: 16MB
+
+增大这个值,可以减少远端数据读取的调用次数,但会增加内存开销。
+
+### `external_table_connect_timeout_sec`
+
+* 类型: int32
+* 描述: 和外部表建立连接的超时时间。
+* 默认值: 5秒
+
+### `segment_cache_capacity`
+
+* 类型: int32
+* 描述: Segment Cache 缓存的 Segment 最大数量
+* 默认值: 1000000
+
+默认值目前只是一个经验值,可能需要根据实际场景修改。增大该值可以缓存更多的segment从而避免一些IO。减少该值则会降低内存使用。
+
+### `auto_refresh_brpc_channel`
+
+* 类型: bool
+* 描述: 获取brpc连接时,通过hand_shake rpc 判断连接的可用性,如果不可用则重新建立连接 
+* 默认值: false
+
+### `high_priority_flush_thread_num_per_store`
+
+* 类型:int32
+* 描述:每个存储路径所分配的用于高优导入任务的 flush 线程数量。
+* 默认值:1
+
+### `routine_load_consumer_pool_size`
+
+* 类型:int32
+* 描述:routine load 所使用的 data consumer 的缓存数量。
+* 默认值:10
+
+### `load_task_high_priority_threshold_second`
+
+* 类型:int32
+* 描述:当一个导入任务的超时时间小于这个阈值是,Doris 将认为他是一个高优任务。高优任务会使用独立的 flush 线程池。
+* 默认:120
+
+### `min_load_rpc_timeout_ms`
+
+* 类型:int32
+* 描述:load 作业中各个rpc 的最小超时时间。
+* 默认:20
+
+### `doris_scan_range_max_mb`
+* 类型: int32
+* 描述: 每个OlapScanner 读取的最大数据量
+* 默认值: 1024
+
+### `string_type_length_soft_limit_bytes`
+* 类型: int32
+* 描述: String 类型最大长度的软限,单位是字节
+* 默认值: 1048576
diff --git a/new-docs/zh-CN/admin-manual/config/fe-config.md b/new-docs/zh-CN/admin-manual/config/fe-config.md
index 55bfdbb37f..b7025e8367 100644
--- a/new-docs/zh-CN/admin-manual/config/fe-config.md
+++ b/new-docs/zh-CN/admin-manual/config/fe-config.md
@@ -25,4 +25,2198 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# Doris FE配置参数
\ No newline at end of file
+# Doris FE配置参数
+
+该文档主要介绍 FE 的相关配置项。
+
+FE 的配置文件 `fe.conf` 通常存放在 FE 部署路径的 `conf/` 目录下。 而在 0.14 版本中会引入另一个配置文件 `fe_custom.conf`。该配置文件用于记录用户在运行是动态配置并持久化的配置项。
+
+FE 进程启动后,会先读取 `fe.conf` 中的配置项,之后再读取 `fe_custom.conf` 中的配置项。`fe_custom.conf` 中的配置项会覆盖 `fe.conf` 中相同的配置项。
+
+`fe_custom.conf` 文件的位置可以在 `fe.conf` 通过 `custom_config_dir` 配置项配置。
+
+## 查看配置项
+
+FE 的配置项有两种方式进行查看:
+
+1. FE 前端页面查看
+
+   在浏览器中打开 FE 前端页面 `http://fe_host:fe_http_port/variable`。在 `Configure Info` 中可以看到当前生效的 FE 配置项。
+
+2. 通过命令查看
+
+   FE 启动后,可以在 MySQL 客户端中,通过以下命令查看 FE 的配置项:
+
+   `ADMIN SHOW FRONTEND CONFIG;`
+
+   结果中各列含义如下:
+
+   - Key:配置项名称。
+   - Value:当前配置项的值。
+   - Type:配置项值类型,如果整型、字符串。
+   - IsMutable:是否可以动态配置。如果为 true,表示该配置项可以在运行时进行动态配置。如果false,则表示该配置项只能在 `fe.conf` 中配置并且重启 FE 后生效。
+   - MasterOnly:是否为 Master FE 节点独有的配置项。如果为 true,则表示该配置项仅在 Master FE 节点有意义,对其他类型的 FE 节点无意义。如果为 false,则表示该配置项在所有 FE 节点中均有意义。
+   - Comment:配置项的描述。
+
+## 设置配置项
+
+FE 的配置项有两种方式进行配置:
+
+1. 静态配置
+
+   在 `conf/fe.conf` 文件中添加和设置配置项。`fe.conf` 中的配置项会在 FE 进程启动时被读取。没有在 `fe.conf` 中的配置项将使用默认值。
+
+2. 通过 MySQL 协议动态配置
+
+   FE 启动后,可以通过以下命令动态设置配置项。该命令需要管理员权限。
+
+   `ADMIN SET FRONTEND CONFIG ("fe_config_name" = "fe_config_value");`
+
+   不是所有配置项都支持动态配置。可以通过 `ADMIN SHOW FRONTEND CONFIG;` 命令结果中的 `IsMutable` 列查看是否支持动态配置。
+
+   如果是修改 `MasterOnly` 的配置项,则该命令会直接转发给 Master FE 并且仅修改 Master FE 中对应的配置项。
+
+   **通过该方式修改的配置项将在 FE 进程重启后失效。**
+
+   更多该命令的帮助,可以通过 `HELP ADMIN SET CONFIG;` 命令查看。
+
+3. 通过 HTTP 协议动态配置
+
+   具体请参阅 [Set Config Action](http://doris.apache.org/master/zh-CN/administrator-guide/http-actions/fe/set-config-action.html)
+
+   该方式也可以持久化修改后的配置项。配置项将持久化在 `fe_custom.conf` 文件中,在 FE 重启后仍会生效。
+
+## 应用举例
+
+1. 修改 `async_pending_load_task_pool_size`
+
+   通过 `ADMIN SHOW FRONTEND CONFIG;` 可以查看到该配置项不能动态配置(`IsMutable` 为 false)。则需要在 `fe.conf` 中添加:
+
+   `async_pending_load_task_pool_size=20`
+
+   之后重启 FE 进程以生效该配置。
+
+2. 修改 `dynamic_partition_enable`
+
+   通过 `ADMIN SHOW FRONTEND CONFIG;` 可以查看到该配置项可以动态配置(`IsMutable` 为 true)。并且是 Master FE 独有配置。则首先我们可以连接到任意 FE,执行如下命令修改配置:
+
+   ```text
+   ADMIN SET FRONTEND CONFIG ("dynamic_partition_enable" = "true");`
+   ```
+
+   之后可以通过如下命令查看修改后的值:
+
+   ```text
+   set forward_to_master=true;
+   ADMIN SHOW FRONTEND CONFIG;
+   ```
+
+   通过以上方式修改后,如果 Master FE 重启或进行了 Master 切换,则配置将失效。可以通过在 `fe.conf` 中直接添加配置项,并重启 FE 后,永久生效该配置项。
+
+3. 修改 `max_distribution_pruner_recursion_depth`
+
+   通过 `ADMIN SHOW FRONTEND CONFIG;` 可以查看到该配置项可以动态配置(`IsMutable` 为 true)。并且不是 Master FE 独有配置。
+
+   同样,我们可以通过动态修改配置的命令修改该配置。因为该配置不是 Master FE 独有配置,所以需要单独连接到不同的 FE,进行动态修改配置的操作,这样才能保证所有 FE 都使用了修改后的配置值
+
+## 配置项列表
+
+### `max_dynamic_partition_num`
+
+默认值:500
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+用于限制创建动态分区表时可以创建的最大分区数,避免一次创建过多分区。 数量由动态分区参数中的“开始”和“结束”决定。
+
+### `grpc_max_message_size_bytes`
+
+默认值:1G
+
+用于设置 GRPC 客户端通道的初始流窗口大小,也用于设置最大消息大小。当结果集较大时,可能需要增大该值。
+
+### `min_replication_num_per_tablet`
+
+默认值:1
+
+用于设置单个tablet的最小replication数量。
+
+### `max_replication_num_per_tablet`
+
+默认值:32767
+
+用于设置单个 tablet 的最大 replication 数量。
+
+### `enable_outfile_to_local`
+
+默认值:false
+
+是否允许 outfile 函数将结果导出到本地磁盘
+
+### `enable_access_file_without_broker`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+此配置用于在通过代理访问 bos 或其他云存储时尝试跳过代理
+
+### `enable_bdbje_debug_mode`
+
+默认值:false
+
+如果设置为 true,FE 将在 BDBJE 调试模式下启动,在 Web 页面 `System->bdbje` 可以查看相关信息,否则不可以查看
+
+### `enable_alpha_rowset`
+
+默认值:false
+
+是否支持创建 alpha rowset。默认为 false,只应在紧急情况下使用,此配置应在未来的某个版本中删除
+
+### `enable_http_server_v2`
+
+默认值:从官方 0.14.0 release 版之后默认是 true,之前默认 false
+
+HTTP Server V2 由 SpringBoot 实现, 并采用前后端分离的架构。只有启用 httpv2,用户才能使用新的前端 UI 界面
+
+### `jetty_server_acceptors`
+
+默认值:2
+
+### `jetty_server_selectors`
+
+默认值:4
+
+### `jetty_server_workers`
+
+默认值:0
+
+Jetty 的线程数量由以上三个参数控制。Jetty的线程架构模型非常简单,分为 acceptors、selectors 和 workers 三个线程池。acceptors 负责接受新连接,然后交给 selectors 处理HTTP消息协议的解包,最后由 workers 处理请求。前两个线程池采用非阻塞模型,一个线程可以处理很多 socket 的读写,所以线程池数量较小。
+
+大多数项目,acceptors 线程只需要1~2个,selectors 线程配置2~4个足矣。workers 是阻塞性的业务逻辑,往往有较多的数据库操作,需要的线程数量较多,具体数量随应用程序的 QPS 和 IO 事件占比而定。QPS 越高,需要的线程数量越多,IO 占比越高,等待的线程数越多,需要的总线程数也越多。
+
+workers 线程池默认不做设置,根据自己需要进行设置
+
+### `jetty_server_max_http_post_size`
+
+默认值:100 * 1024 * 1024  (100MB)
+
+这个是 put 或 post 方法上传文件的最大字节数,默认值:100MB
+
+### `default_max_filter_ratio`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+可过滤数据(由于数据不规则等原因)的最大百分比。默认值为0,表示严格模式,只要数据有一条被过滤掉整个导入失败
+
+### `default_db_data_quota_bytes`
+
+默认值:1PB
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+用于设置默认数据库数据配额大小,设置单个数据库的配额大小可以使用:
+
+```
+设置数据库数据量配额,单位为B/K/KB/M/MB/G/GB/T/TB/P/PB
+ALTER DATABASE db_name SET DATA QUOTA quota;
+查看配置
+show data (其他用法:HELP SHOW DATA)
+```
+
+### `default_db_replica_quota_size`
+
+默认值:1073741824
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+用于设置默认数据库Replica数量配额大小,设置单个数据库配额大小可以使用:
+
+```
+设置数据库Replica数量配额
+ALTER DATABASE db_name SET REPLICA QUOTA quota;
+查看配置
+show data (其他用法:HELP SHOW DATA)
+```
+
+### `enable_batch_delete_by_default`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+创建唯一表时是否添加删除标志列,具体原理参照官方文档:操作手册->数据导入->批量删除
+
+### `recover_with_empty_tablet`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+在某些情况下,某些 tablet 可能会损坏或丢失所有副本。 此时数据已经丢失,损坏的 tablet 会导致整个查询失败,无法查询剩余的健康 tablet。 在这种情况下,您可以将此配置设置为 true。 系统会将损坏的 tablet 替换为空 tablet,以确保查询可以执行。 (但此时数据已经丢失,所以查询结果可能不准确)
+
+### `max_allowed_in_element_num_of_delete`
+
+默认值:1024
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+用于限制 delete 语句中 Predicate 的元素个数
+
+### `cache_result_max_row_count`
+
+默认值:3000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+设置可以缓存的最大行数,详细的原理可以参考官方文档:操作手册->分区缓存
+
+### `cache_last_version_interval_second`
+
+默认值:900
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+缓存结果时上一版本的最小间隔,该参数区分离线更新和实时更新
+
+### `cache_enable_partition_mode`
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+如果设置为 true,FE 将从 BE cache 中获取数据,该选项适用于部分分区的实时更新。
+
+### `cache_enable_sql_mode`
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+如果设置为 true,FE 会启用 sql 结果缓存,该选项适用于离线数据更新场景
+
+|                        | case1 | case2 | case3 | case4 |
+| ---------------------- | ----- | ----- | ----- | ----- |
+| enable_sql_cache       | false | true  | true  | false |
+| enable_partition_cache | false | false | true  | true  |
+
+### `min_clone_task_timeout_sec`  和 `max_clone_task_timeout_sec`
+
+默认值:最小3分钟,最大两小时
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+`min_clone_task_timeout_sec` 和 `max_clone_task_timeout_sec` 用于限制克隆任务的最小和最大超时间。 一般情况下,克隆任务的超时时间是通过数据量和最小传输速度(5MB/s)来估计的。 但在特殊情况下,您可能需要手动设置这两个配置,以确保克隆任务不会因超时而失败。
+
+### `agent_task_resend_wait_time_ms`
+
+默认值:5000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+当代理任务的创建时间被设置的时候,此配置将决定是否重新发送代理任务, 当且仅当当前时间减去创建时间大于 `agent_task_task_resend_wait_time_ms` 时,ReportHandler可以重新发送代理任务。
+
+该配置目前主要用来解决 `PUBLISH_VERSION` 代理任务的重复发送问题, 目前该配置的默认值是5000,是个实验值,由于把代理任务提交到代理任务队列和提交到 BE 存在一定的时间延迟,所以调大该配置的值可以有效解决代理任务的重复发送问题,
+
+但同时会导致提交失败或者执行失败的代理任务再次被执行的时间延长。
+
+### `enable_odbc_table`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+是否启用 ODBC 表,默认不启用,在使用的时候需要手动配置启用,该参数可以通过:
+
+`ADMIN SET FRONTEND CONFIG("key"="value") `方式进行设置
+
+### `enable_spark_load`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+是否临时启用 spark load,默认不启用
+
+### `disable_storage_medium_check`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果 disable_storage_medium_check 为true, ReportHandler 将不会检查 tablet 的存储介质, 并使得存储冷却功能失效,默认值为false。当您不关心 tablet 的存储介质是什么时,可以将值设置为true 。
+
+### `drop_backend_after_decommission`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+该配置用于控制系统在成功下线(Decommission) BE 后,是否 Drop 该 BE。如果为 true,则在 BE 成功下线后,会删除掉该 BE 节点。如果为 false,则在 BE 成功下线后,该 BE 会一直处于 DECOMMISSION 状态,但不会被删除。
+
+该配置在某些场景下可以发挥作用。假设一个 Doris 集群的初始状态为每个 BE 节点有一块磁盘。运行一段时间后,系统进行了纵向扩容,即每个 BE 节点新增2块磁盘。因为 Doris 当前还不支持 BE 内部各磁盘间的数据均衡,所以会导致初始磁盘的数据量可能一直远高于新增磁盘的数据量。此时我们可以通过以下操作进行人工的磁盘间均衡:
+
+1. 将该配置项置为 false。
+2. 对某一个 BE 节点,执行 decommission 操作,该操作会将该 BE 上的数据全部迁移到其他节点中。
+3. decommission 操作完成后,该 BE 不会被删除。此时,取消掉该 BE 的 decommission 状态。则数据会开始从其他 BE 节点均衡回这个节点。此时,数据将会均匀的分布到该 BE 的所有磁盘上。
+4. 对所有 BE 节点依次执行 2,3 两个步骤,最终达到所有节点磁盘均衡的目的。
+
+### `period_of_auto_resume_min`
+
+默认值:5 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+自动恢复 Routine load 的周期
+
+### `max_tolerable_backend_down_num`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+只要有一个BE宕机,Routine Load 就无法自动恢复
+
+### `enable_materialized_view`
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+该配置用于开启和关闭创建物化视图功能。如果设置为 true,则创建物化视图功能开启。用户可以通过 `CREATE MATERIALIZED VIEW` 命令创建物化视图。如果设置为 false,则无法创建物化视图。
+
+如果在创建物化视图的时候报错 `The materialized view is coming soon` 或 `The materialized view is disabled` 则说明改配置被设置为了 false,创建物化视图功能关闭了。可以通过修改配置为 true 来启动创建物化视图功能。
+
+该变量为动态配置,用户可以在 FE 进程启动后,通过命令修改配置。也可以通过修改 FE 的配置文件,重启 FE 来生效
+
+### `check_java_version`
+
+默认值:true
+
+Doris 将检查已编译和运行的 Java 版本是否兼容,如果不兼容将抛出Java版本不匹配的异常信息,并终止启动
+
+### `max_running_rollup_job_num_per_table`
+
+默认值:1
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+控制 Rollup 作业并发限制
+
+### `dynamic_partition_enable`
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+是否启用动态分区,默认启用
+
+### `dynamic_partition_check_interval_seconds`
+
+默认值:600秒,10分钟
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+检查动态分区的频率
+
+### `disable_cluster_feature`
+
+默认值:true
+
+是否可以动态配置:true
+
+多集群功能将在 0.12 版本中弃用 ,将此配置设置为 true 将禁用与集群功能相关的所有操作,包括:
+
+1. 创建/删除集群
+2. 添加、释放BE/将BE添加到集群/停用集群balance
+3. 更改集群的后端数量
+4. 链接/迁移数据库
+
+### `force_do_metadata_checkpoint`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为 true,则无论 jvm 内存使用百分比如何,检查点线程都会创建检查点
+
+### `metadata_checkpoint_memory_threshold`
+
+默认值:60  (60%)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果 jvm 内存使用百分比(堆或旧内存池)超过此阈值,则检查点线程将无法工作以避免 OOM。
+
+### `max_distribution_pruner_recursion_depth`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+这将限制哈希分布修剪器的最大递归深度。 例如:其中 a  in(5 个元素)和 b in(4 个元素)和 c in(3 个元素)和 d in(2 个元素)。 a/b/c/d 是分布式列,所以递归深度为 5 * 4 * 3 * 2 = 120,大于 100, 因此该分发修剪器将不起作用,只会返回所有 buckets。  增加深度可以支持更多元素的分布修剪,但可能会消耗更多的 CPU
+
+通过 `ADMIN SHOW FRONTEND CONFIG;` 可以查看到该配置项可以动态配置(`IsMutable` 为 true)。并且不是 Master FE 独有配置。
+
+同样,我们可以通过动态修改配置的命令修改该配置。因为该配置不是 Master FE 独有配置,所以需要单独连接到不同的 FE,进行动态修改配置的操作,这样才能保证所有 FE 都使用了修改后的配置值
+
+
+### `using_old_load_usage_pattern`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为 true,处理错误的 insert stmt  仍将返回一个标签给用户。 用户可以使用此标签来检查加载作业的状态。 默认值为 false,表示插入操作遇到错误,不带加载标签,直接抛出异常给用户客户端。
+
+### `small_file_dir`
+
+默认值:DORIS_HOME_DIR + “/small_files”
+
+保存小文件的目录
+
+### `max_small_file_size_bytes`
+
+默认值:1M
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+SmallFileMgr 中单个文件存储的最大大小
+
+### `max_small_file_number`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+SmallFileMgr 中存储的最大文件数
+
+### `max_routine_load_task_num_per_be`
+
+默认值:5
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+每个 BE 的最大并发例 Routine Load 任务数。 这是为了限制发送到 BE 的 Routine Load 任务的数量,并且它也应该小于 BE config `routine_load_thread_pool_size`(默认 10),这是 BE 上的 Routine Load 任务线程池大小。
+
+### `max_routine_load_task_concurrent_num`
+
+默认值:5
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+单个 Routine Load 作业的最大并发任务数
+
+### `max_routine_load_job_num`
+
+默认值:100
+
+最大 Routine Load 作业数,包括 NEED_SCHEDULED, RUNNING, PAUSE
+
+### `max_backup_restore_job_num_per_db`
+
+默认值:10
+
+此配置用于控制每个 DB 能够记录的 backup/restore 任务的数量
+
+### `max_running_txn_num_per_db`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+这个配置主要是用来控制同一个 DB 的并发导入个数的。
+
+当集群中有过多的导入任务正在运行时,新提交的导入任务可能会报错:
+
+```text
+current running txns on db xxx is xx, larger than limit xx
+```
+
+该遇到该错误时,说明当前集群内正在运行的导入任务超过了该配置值。此时建议在业务侧进行等待并重试导入任务。
+
+一般来说不推荐增大这个配置值。过高的并发数可能导致系统负载过大
+
+### `enable_metric_calculator`
+
+默认值:true
+
+如果设置为 true,指标收集器将作为守护程序计时器运行,以固定间隔收集指标
+
+### `report_queue_size`
+
+默认值: 100
+
+是否可以动态配置:true
+
+是否为  Master FE  节点独有的配置项:true
+
+这个阈值是为了避免在 FE 中堆积过多的报告任务,可能会导致 OOM 异常等问题。 并且每个 BE 每 1 分钟会报告一次 tablet 信息,因此无限制接收报告是不可接受的。以后我们会优化 tablet 报告的处理速度
+
+**不建议修改这个值**
+
+### `partition_rebalance_max_moves_num_per_selection`
+
+默认值:10
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+仅在使用  PartitionRebalancer  时有效 ,
+
+### `partition_rebalance_move_expire_after_access`
+
+默认值:600   (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+仅在使用  PartitionRebalancer  时有效。 如果更改,缓存的移动将被清除
+
+### tablet_rebalancer_type
+
+默认值:BeLoad
+
+是否为 Master FE 节点独有的配置项:true
+
+rebalancer 类型(忽略大小写):BeLoad、Partition。 如果类型解析失败,默认使用 BeLoad
+
+### `max_balancing_tablets`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果 TabletScheduler 中的 balance tablet 数量超过 `max_balancing_tablets`,则不再进行 balance 检查
+
+### `max_scheduling_tablets`
+
+默认值:2000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果 TabletScheduler 中调度的 tablet 数量超过 `max_scheduling_tablets`, 则跳过检查。
+
+### `disable_balance`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为 true,TabletScheduler 将不会做 balance
+
+### `balance_load_score_threshold`
+
+默认值:0.1 (10%)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+集群 balance 百分比的阈值,如果一个BE的负载分数比平均分数低10%,这个后端将被标记为低负载,如果负载分数比平均分数高10%,将被标记为高负载。
+
+### `schedule_slot_num_per_path`
+
+默认值:2
+
+tablet 调度程序中每个路径的默认 slot 数量
+
+### `tablet_repair_delay_factor_second`
+
+默认值:60 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+决定修复 tablet 前的延迟时间因素。
+
+1. 如果优先级为 VERY_HIGH,请立即修复。
+2. HIGH,延迟 tablet_repair_delay_factor_second  * 1;
+3. 正常:延迟 tablet_repair_delay_factor_second * 2;
+4. 低:延迟 tablet_repair_delay_factor_second * 3;
+
+### `es_state_sync_interval_second`
+
+默认值:10
+
+FE 会在每隔 es_state_sync_interval_secs 调用 es api 获取 es 索引分片信息
+
+### `disable_hadoop_load`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+默认不禁用,将来不推荐使用 hadoop 集群 load。 设置为 true 以禁用这种 load 方式。
+
+### `db_used_data_quota_update_interval_secs`
+
+默认值:300 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+一个主守护线程将每 `db_used_data_quota_update_interval_secs` 更新数据库 txn 管理器的数据库使用数据配额
+
+为了更好的数据导入性能,在数据导入之前的数据库已使用的数据量是否超出配额的检查中,我们并不实时计算数据库已经使用的数据量,而是获取后台线程周期性更新的值。
+
+该配置用于设置更新数据库使用的数据量的值的时间间隔
+
+### `disable_load_job`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+不禁用,如果这设置为 true
+
+- 调用开始 txn api 时,所有挂起的加载作业都将失败
+- 调用 commit txn api 时,所有准备加载作业都将失败
+- 所有提交的加载作业将等待发布
+
+### `catalog_try_lock_timeout_ms`
+
+默认值:5000  (ms)
+
+是否可以动态配置:true
+
+元数据锁的 tryLock 超时配置。 通常它不需要改变,除非你需要测试一些东西。
+
+### `max_query_retry_time`
+
+默认值:1
+
+是否可以动态配置:true
+
+查询重试次数。 如果我们遇到 RPC 异常并且没有将结果发送给用户,则可能会重试查询。 您可以减少此数字以避免雪崩灾难。
+
+### `remote_fragment_exec_timeout_ms`
+
+默认值:5000  (ms)
+
+是否可以动态配置:true
+
+异步执行远程 fragment 的超时时间。 在正常情况下,异步远程 fragment 将在短时间内执行。 如果系统处于高负载状态,请尝试将此超时设置更长的时间。
+
+### `enable_local_replica_selection`
+
+默认值:false
+
+是否可以动态配置:true
+
+如果设置为 true,Planner 将尝试在与此前端相同的主机上选择 tablet 的副本。
+在以下情况下,这可能会减少网络传输:
+
+1. N 个主机,部署了 N 个 BE 和 N 个 FE。
+
+2. 数据有N个副本。
+
+3. 高并发查询均匀发送到所有 Frontends
+
+在这种情况下,所有 Frontends 只能使用本地副本进行查询。如果想当本地副本不可用时,使用非本地副本服务查询,请将 enable_local_replica_selection_fallback 设置为 true
+
+### `enable_local_replica_selection_fallback`
+
+默认值:false
+
+是否可以动态配置:true
+
+与 enable_local_replica_selection 配合使用,当本地副本不可用时,使用非本地副本服务查询。
+
+### `max_unfinished_load_job`
+
+默认值:1000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+最大加载任务数,包括 PENDING、ETL、LOADING、QUORUM_FINISHED。 如果超过此数量,则不允许提交加载作业。
+
+### `max_bytes_per_broker_scanner`
+
+默认值:3 * 1024 * 1024 * 1024L  (3G)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+broker scanner 程序可以在一个 broker 加载作业中处理的最大字节数。 通常,每个 BE 都有一个 broker scanner 程序。
+
+### `enable_auth_check`
+
+默认值:true
+
+如果设置为 false,则身份验证检查将被禁用,以防新权限系统出现问题。
+
+### `tablet_stat_update_interval_second`
+
+默认值:300,(5分钟)
+
+tablet 状态更新间隔
+所有 FE 将在每个时间间隔从所有 BE 获取 tablet 统计信息
+
+### `storage_flood_stage_usage_percent `
+
+默认值:95 (95%)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### ` storage_flood_stage_left_capacity_bytes`
+
+默认值:
+
+  storage_flood_stage_usage_percent  : 95  (95%)
+  
+  storage_flood_stage_left_capacity_bytes :  1 * 1024 * 1024 * 1024 (1GB)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果磁盘容量达到 `storage_flood_stage_usage_percent` 和 `storage_flood_stage_left_capacity_bytes`      以下操作将被拒绝:
+
+1. load 作业      
+2. restore 工作 
+
+### `storage_high_watermark_usage_percent`
+
+默认值:85  (85%)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### `storage_min_left_capacity_bytes`
+
+默认值: 2 * 1024 * 1024 * 1024  (2GB)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+`storage_high_watermark_usage_percent` 限制 BE 端存储路径使用最大容量百的分比。  `storage_min_left_capacity_bytes`限制 BE 端存储路径的最小剩余容量。  如果达到这两个限制,则不能选择此存储路径作为 tablet 存储目的地。 但是对于 tablet 恢复,我们可能会超过这些限制以尽可能保持数据完整性。
+
+### `backup_job_default_timeout_ms`
+
+默认值:86400 * 1000  (1天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+备份作业的默认超时时间
+
+### `with_k8s_certs`
+
+默认值:false
+
+如果在本地使用 k8s 部署管理器,请将其设置为 true 并准备证书文件
+
+### `dpp_hadoop_client_path`
+
+默认值:/lib/hadoop-client/hadoop/bin/hadoop
+
+### `dpp_bytes_per_reduce`
+
+默认值:100 * 1024 * 1024L (100M)
+
+### `dpp_default_cluster`
+
+默认值:palo-dpp
+
+### `dpp_default_config_str`
+
+默认值:{
+            hadoop_configs : 'mapred.job.priority=NORMAL;mapred.job.map.capacity=50;mapred.job.reduce.capacity=50;mapred.hce.replace.streaming=false;abaci.long.stored.job=true;dce.shuffle.enable=false;dfs.client.authserver.force_stop=true;dfs.client.auth.method=0'
+        } 
+
+### dpp_config_str
+
+默认值:{
+            palo-dpp : {
+                    hadoop_palo_path : '/dir',
+                    hadoop_configs : 'fs.default.name=hdfs://host:port;mapred.job.tracker=host:port;hadoop.job.ugi=user,password'
+                }
+        }
+
+### `enable_deploy_manager`
+
+默认值:disable
+
+如果使用第三方部署管理器部署 Doris,则设置为 true
+
+有效的选项是:
+
+- disable:没有部署管理器
+- k8s:Kubernetes
+- ambari:Ambari
+- local:本地文件(用于测试或 Boxer2 BCC 版本)
+
+### `enable_token_check`
+
+默认值:true
+
+为了向前兼容,稍后将被删除。 下载image文件时检查令牌。
+
+### `expr_depth_limit`
+
+默认值:3000
+
+是否可以动态配置:true
+
+限制 expr 树的深度。 超过此限制可能会导致在持有 db read lock 时分析时间过长。
+
+### `expr_children_limit`
+
+默认值:10000
+
+是否可以动态配置:true
+
+限制 expr 树的 expr 子节点的数量。 超过此限制可能会导致在持有数据库读锁时分析时间过长。
+
+### `proxy_auth_magic_prefix`
+
+默认值:x@8
+
+### `proxy_auth_enable`
+
+默认值:false
+
+### `meta_publish_timeout_ms`
+
+默认值:1000ms
+
+默认元数据发布超时时间
+
+### `disable_colocate_balance`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+此配置可以设置为 true 以禁用自动 colocate 表的重新定位和平衡。 如果 `disable_colocate_balance'`设置为 true,则 ColocateTableBalancer 将不会重新定位和平衡并置表。
+
+**注意:**
+
+1. 一般情况下,根本不需要关闭平衡。
+2. 因为一旦关闭平衡,不稳定的 colocate 表可能无法恢复
+3. 最终查询时无法使用 colocate 计划。
+
+### `query_colocate_join_memory_limit_penalty_factor`
+
+默认值:1
+
+是否可以动态配置:true
+
+colocote join PlanFragment instance 的 memory_limit = exec_mem_limit / min (query_colocate_join_memory_limit_penalty_factor, instance_num)
+
+### `max_connection_scheduler_threads_num`
+
+默认值:4096
+
+查询请求调度器中的最大线程数。
+
+前的策略是,有请求过来,就为其单独申请一个线程进行服务
+
+### `qe_max_connection`
+
+默认值:1024
+
+每个 FE 的最大连接数
+
+### `check_consistency_default_timeout_second`
+
+默认值:600 (10分钟)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+单个一致性检查任务的默认超时。 设置足够长以适合您的tablet大小。
+
+### `consistency_check_start_time`
+
+默认值:23
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+一致性检查开始时间
+
+一致性检查器将从 `consistency_check_start_time` 运行到 `consistency_check_end_time`。 默认为 23:00 至 04:00
+
+### `consistency_check_end_time`
+
+默认值:04
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+一致性检查结束时间
+
+一致性检查器将从 `consistency_check_start_time` 运行到 `consistency_check_end_time`。 默认为 23:00 至 04:00
+
+### `export_tablet_num_per_task`
+
+默认值:5
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+每个导出查询计划的 tablet 数量
+
+### `export_task_default_timeout_second`
+
+默认值:2 * 3600   (2小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+导出作业的默认超时时间
+
+### `export_running_job_num_limit`
+
+默认值:5
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+运行导出作业的并发限制,默认值为 5,0 表示无限制
+
+### `export_checker_interval_second`
+
+默认值:5
+
+导出检查器的运行间隔
+
+### `default_load_parallelism`
+
+默认值:1
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+单个节点broker load导入的默认并发度。
+如果用户在提交broker load任务时,在properties中自行指定了并发度,则采用用户自定义的并发度。
+此参数将与`max_broker_concurrency`、`min_bytes_per_broker_scanner`等多个配置共同决定导入任务的并发度。
+
+### `max_broker_concurrency`
+
+默认值:10
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+broker scanner 的最大并发数。
+
+### `min_bytes_per_broker_scanner`
+
+默认值:67108864L (64M)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+单个 broker scanner 将读取的最小字节数。
+
+### `catalog_trash_expire_second`
+
+默认值:86400L (1天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+删除数据库(表/分区)后,您可以使用 RECOVER stmt 恢复它。 这指定了最大数据保留时间。 一段时间后,数据将被永久删除。
+
+### `storage_cooldown_second`
+
+默认值:30 * 24 * 3600L  (30天)
+
+创建表(或分区)时,可以指定其存储介质(HDD 或 SSD)。 如果设置为 SSD,这将指定tablet在 SSD 上停留的默认时间。 之后,tablet将自动移动到 HDD。 您可以在 `CREATE TABLE stmt` 中设置存储冷却时间。
+
+### `default_storage_medium`
+
+默认值:HDD
+
+创建表(或分区)时,可以指定其存储介质(HDD 或 SSD)。 如果未设置,则指定创建时的默认介质。
+
+### `max_backend_down_time_second`
+
+默认值:3600  (1小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果 BE 关闭了 `max_backend_down_time_second`,将触发 BACKEND_DOWN 事件。
+
+### `alter_table_timeout_second`
+
+默认值:86400   (1天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+ALTER TABLE 请求的最大超时时间。 设置足够长以适合您的表格数据大小
+
+### `capacity_used_percent_high_water`
+
+默认值:0.75  (75%)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+磁盘容量的高水位使用百分比。 这用于计算后端的负载分数
+
+### `clone_distribution_balance_threshold`
+
+默认值:0.2
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+BE副本数的平衡阈值。
+
+### `clone_capacity_balance_threshold`
+
+默认值:0.2
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+* BE 中数据大小的平衡阈值。
+
+  平衡算法为:
+
+    1. 计算整个集群的平均使用容量(AUC)(总数据大小/BE数)
+
+    2. 高水位为(AUC * (1 + clone_capacity_balance_threshold))
+
+    3. 低水位为(AUC * (1 - clone_capacity_balance_threshold))
+
+克隆检查器将尝试将副本从高水位 BE 移动到低水位 BE。
+
+### `replica_delay_recovery_second`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+副本之间的最小延迟秒数失败,并且尝试使用克隆来恢复它。
+
+### `clone_high_priority_delay_second`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+高优先级克隆作业的延迟触发时间
+
+### `clone_normal_priority_delay_second`
+
+默认值:300 (5分钟)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+正常优先级克隆作业的延迟触发时间
+
+### `clone_low_priority_delay_second`
+
+默认值:600 (10分钟)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+低优先级克隆作业的延迟触发时间。 克隆作业包含需要克隆(恢复或迁移)的tablet。 如果优先级为 LOW,则会延迟  `clone_low_priority_delay_second `,在作业创建之后然后被执行。 这是为了避免仅因为主机短时间停机而同时运行大量克隆作业。
+
+注意这个配置(还有 `clone_normal_priority_delay_second`) 如果它小于 `clone_checker_interval_second` 将不起作用
+
+### `clone_max_job_num`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+低优先级克隆作业的并发数。 高优先级克隆作业的并发性目前是无限的。
+
+### `clone_job_timeout_second`
+
+默认值:7200  (2小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+单个克隆作业的默认超时。 设置足够长以适合您的副本大小。 副本数据越大,完成克隆所需的时间就越多
+
+### `clone_checker_interval_second`
+
+默认值:300 (5分钟)
+
+克隆检查器的运行间隔
+
+### `tablet_delete_timeout_second`
+
+默认值:2
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+与 `tablet_create_timeout_second` 含义相同,但在删除 tablet 时使用
+
+### `async_loading_load_task_pool_size`
+
+默认值:10
+
+是否可以动态配置:false
+
+是否为 Master FE 节点独有的配置项:true
+
+`loading_load`任务执行程序池大小。 该池大小限制了正在运行的最大 `loading_load`任务数。
+
+当前,它仅限制 `broker load`的 `loading_load`任务的数量。
+
+### `async_pending_load_task_pool_size`
+
+默认值:10
+
+是否可以动态配置:false
+
+是否为 Master FE 节点独有的配置项:true
+
+`pending_load`任务执行程序池大小。 该池大小限制了正在运行的最大 `pending_load`任务数。
+
+当前,它仅限制 `broker load`和 `spark load`的 `pending_load`任务的数量。
+
+它应该小于 `max_running_txn_num_per_db`的值
+
+### `async_load_task_pool_size`
+
+默认值:10
+
+是否可以动态配置:false
+
+是否为 Master FE 节点独有的配置项:true
+
+此配置只是为了兼容旧版本,此配置已被 `async_loading_load_task_pool_size`取代,以后会被移除。
+
+### `disable_show_stream_load`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+是否禁用显示 stream load 并清除内存中的 stream load 记录。
+
+### `max_stream_load_record_size`
+
+默认值:5000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+可以存储在内存中的最近 stream load 记录的默认最大数量
+
+### `fetch_stream_load_record_interval_second`
+
+默认值:120
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+获取 stream load 记录间隔
+
+### `desired_max_waiting_jobs`
+
+默认值:100
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+routine load V2 版本加载的默认等待作业数 ,这是一个理想的数字。 在某些情况下,例如切换 master,当前数量可能超过` desired_max_waiting_jobs`
+
+### `yarn_config_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/lib/yarn-config"
+
+
+默认的 Yarn 配置文件目录每次运行 Yarn 命令之前,我们需要检查一下这个路径下是否存在 config 文件,如果不存在,则创建它们。
+
+
+### `yarn_client_path`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/lib/yarn-client/hadoop/bin/yarn"
+
+默认 Yarn 客户端路径
+
+### `spark_launcher_log_dir`
+
+默认值: sys_log_dir + "/spark_launcher_log"
+
+指定的 Spark 启动器日志目录
+
+### `spark_resource_path`
+
+默认值:空
+
+默认值的 Spark 依赖路径
+
+### `spark_home_default_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/lib/spark2x"
+
+默认的 Spark home 路径
+
+### `spark_load_default_timeout_second`
+
+默认值:86400  (1天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+默认 Spark 加载超时时间
+
+### `spark_dpp_version`
+
+默认值:1.0.0
+
+Spark 默认版本号
+
+### `hadoop_load_default_timeout_second`
+
+默认值:86400 * 3   (3天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+Hadoop 加载超时时间
+
+### `min_load_timeout_second`
+
+默认值:1 (1秒)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+mini load 超时时间,适用于所有类型的加载
+
+### `max_stream_load_timeout_second`
+
+默认值:259200 (3天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+stream load 和 mini load 最大超时时间
+
+### `max_load_timeout_second`
+
+默认值:259200 (3天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+load 最大超时时间,适用于除 stream load 之外的所有类型的加载
+
+### `stream_load_default_timeout_second`
+
+默认值:600 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+默认 stream load 和 mini load 超时时间
+
+### `insert_load_default_timeout_second`
+
+默认值:3600    (1小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+默认 insert load 超时时间
+
+### `mini_load_default_timeout_second`
+
+默认值:3600    (1小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+默认非 stream load 类型的 mini load 的超时时间
+
+### `broker_load_default_timeout_second`
+
+默认值:14400   (4小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+Broker load 的默认超时时间
+
+### `load_running_job_num_limit`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+Load 任务数量限制,默认0,无限制
+
+### `load_input_size_limit_gb`
+
+默认值:0
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+Load 作业输入的数据大小,默认是0,无限制
+
+### `delete_thread_num`
+
+默认值:10
+
+删除作业的并发线程数
+
+### `load_etl_thread_num_normal_priority`
+
+默认值:10
+
+NORMAL 优先级 etl 加载作业的并发数。
+
+### `load_etl_thread_num_high_priority`
+
+默认值:3
+
+高优先级 etl 加载作业的并发数。
+
+### `load_pending_thread_num_normal_priority`
+
+默认值:10
+
+NORMAL 优先级挂起加载作业的并发数。
+
+### `load_pending_thread_num_high_priority`
+
+默认值:3
+
+高优先级挂起加载作业的并发数。 加载作业优先级定义为 HIGH 或 NORMAL。 所有小批量加载作业都是 HIGH 优先级,其他类型的加载作业是 NORMAL 优先级。 设置优先级是为了避免慢加载作业长时间占用线程。 这只是内部优化的调度策略。 目前,您无法手动指定作业优先级。
+
+### `load_checker_interval_second`
+
+默认值:5 (s)
+
+负载调度器运行间隔。 加载作业将其状态从 PENDING 转移到 LOADING 到 FINISHED。 加载调度程序将加载作业从 PENDING 转移到 LOADING  而 txn 回调会将加载作业从 LOADING 转移到 FINISHED。 因此,当并发未达到上限时,加载作业最多需要一个时间间隔才能完成。
+
+### `max_layout_length_per_row`
+
+默认值:100000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+一行的最大内存布局长度。 默认为 100 KB。
+在 BE 中,RowBlock 的最大大小为 100MB(在 be.conf 中配置为  `max_unpacked_row_block_size `)。
+每个 RowBlock 包含 1024 行。 因此,一行的最大大小约为 100 KB。
+
+例如。
+schema:k1(int), v1(decimal), v2(varchar(2000))
+那么一行的内存布局长度为:4(int) + 16(decimal) + 2000(varchar) = 2020 (Bytes)
+
+查看所有类型的内存布局长度,在 mysql-client 中运行 `help create table`。
+
+如果要增加此数字以支持一行中的更多列,则还需要增加
+be.conf 中的  `max_unpacked_row_block_size `,但性能影响未知。
+
+### `load_straggler_wait_second`
+
+默认值:300
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+负载中落后节点的最大等待秒数
+例如:有 3 个副本 A, B, C load 已经在 t1 时仲裁完成 (A,B) 并且 C 没有完成,如果 (current_time-t1)> 300s,那么 doris会将 C 视为故障节点,将调用事务管理器提交事务并告诉事务管理器 C 失败。
+
+这也用于等待发布任务时
+
+**注意:**这个参数是所有作业的默认值,DBA 可以为单独的作业指定它
+
+### `thrift_server_type`
+
+该配置表示FE的Thrift服务使用的服务模型, 类型为string, 大小写不敏感。
+
+若该参数为 `SIMPLE`, 则使用 `TSimpleServer` 模型, 该模型一般不适用于生产环境,仅限于测试使用。
+
+若该参数为 `THREADED`, 则使用 `TThreadedSelectorServer` 模型,该模型为非阻塞式I/O模型,即主从 Reactor 模型,该模型能及时响应大量的并发连接请求,在多数场景下有较好的表现。
+
+若该参数为 `THREAD_POOL`, 则使用 `TThreadPoolServer` 模型,该模型为阻塞式I/O模型,使用线程池处理用户连接,并发连接数受限于线程池的数量,如果能提前预估并发请求的数量,并且能容忍足够多的线程资源开销,该模型会有较好的性能表现,默认使用该服务模型
+
+### `thrift_server_max_worker_threads`
+
+默认值:4096
+
+Thrift Server最大工作线程数
+
+### `publish_version_interval_ms`
+
+默认值:10 (ms)
+
+两个发布版本操作之间的最小间隔
+
+### `publish_version_timeout_second`
+
+默认值:30 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+一个事务的所有发布版本任务完成的最大等待时间
+
+### `max_create_table_timeout_second`
+
+默认值:60 (s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+为了在创建表(索引)不等待太久,设置一个最大超时时间
+
+### `tablet_create_timeout_second`
+
+默认值:1(s)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+创建单个副本的最长等待时间。
+例如。
+如果您为每个表创建一个包含 m 个 tablet 和 n 个副本的表,
+创建表请求将在超时前最多运行 (m * n * tablet_create_timeout_second)。
+
+### `max_mysql_service_task_threads_num`
+
+默认值:4096
+
+mysql 中处理任务的最大线程数。
+
+### `cluster_id`
+
+默认值:-1
+
+如果节点(FE 或 BE)具有相同的集群 id,则将认为它们属于同一个Doris 集群。 Cluster id 通常是主 FE 首次启动时生成的随机整数。 您也可以指定一个。
+
+### `auth_token`
+
+默认值:空
+
+用于内部身份验证的集群令牌。
+
+### `cluster_name`
+
+默认值: Apache doris
+
+集群名称,将显示为网页标题
+
+### `mysql_service_io_threads_num`
+
+默认值:4
+
+mysql 中处理 io 事件的线程数。
+
+### `mysql_service_nio_enabled`
+
+默认值:true
+
+mysql 服务 nio 选项是否启用,默认启用
+
+### `query_port`
+
+默认值:9030
+
+Doris FE 通过 mysql 协议查询连接端口
+
+### `rewrite_count_distinct_to_bitmap_hll`
+
+默认值:true
+
+该变量为 session variable,session 级别生效。
+
+- 类型:boolean
+- 描述:**仅对于 AGG 模型的表来说**,当变量为 true 时,用户查询时包含 count(distinct c1) 这类聚合函数时,如果 c1 列本身类型为 bitmap,则 count distnct 会改写为 bitmap_union_count(c1)。 当 c1 列本身类型为 hll,则 count distinct 会改写为 hll_union_agg(c1) 如果变量为 false,则不发生任何改写。
+
+### `rpc_port`
+
+默认值:9020
+
+FE Thrift Server的端口
+
+### `thrift_backlog_num`
+
+默认值:1024
+
+thrift 服务器的 backlog_num 当你扩大这个 backlog_num 时,你应该确保它的值大于 linux `/proc/sys/net/core/somaxconn` 配置
+
+### `thrift_client_timeout_ms`
+
+默认值:0
+
+thrift 服务器的连接超时和套接字超时配置 thrift_client_timeout_ms 的默认值设置为零以防止读取超时
+
+### `mysql_nio_backlog_num`
+
+默认值:1024
+
+mysql nio server 的 backlog_num 当你放大这个 backlog_num 时,你应该同时放大 linux `/proc/sys/net/core/somaxconn`文件中的值
+
+### `http_backlog_num`
+
+默认值:1024
+
+netty http server 的 backlog_num 当你放大这个 backlog_num 时,你应该同时放大 linux `/proc/sys/net/core/somaxconn`文件中的值
+
+### `http_max_line_length`
+
+默认值:4096
+
+HTTP 服务允许接收请求的 URL 的最大长度,单位为比特
+
+### `http_max_header_size`
+
+默认值:8192
+
+HTTP 服务允许接收请求的 Header 的最大长度,单位为比特
+
+### `http_max_chunk_size`
+
+默认值:8192
+
+http 上下文 chunk 块的最大尺寸
+
+### `http_port`
+
+默认值:8030
+
+FE http 端口,当前所有 FE http 端口都必须相同
+
+### `max_bdbje_clock_delta_ms`
+
+默认值:5000 (5秒)
+
+设置非主 FE 到主 FE 主机之间的最大可接受时钟偏差。 每当非主 FE 通过 BDBJE 建立到主 FE 的连接时,都会检查该值。 如果时钟偏差大于此值,则放弃连接。
+
+### `ignore_meta_check`
+
+默认值:false
+
+是否可以动态配置:true
+
+如果为 true,非主 FE 将忽略主 FE 与其自身之间的元数据延迟间隙,即使元数据延迟间隙超过 `meta_delay_toleration_second`。 非主 FE 仍将提供读取服务。 当您出于某种原因尝试停止 Master FE 较长时间,但仍希望非 Master FE 可以提供读取服务时,这会很有帮助。
+
+### `metadata_failure_recovery`
+
+默认值:false
+
+如果为 true,FE 将重置 bdbje 复制组(即删除所有可选节点信息)并应该作为 Master 启动。 如果所有可选节点都无法启动,我们可以将元数据复制到另一个节点并将此配置设置为 true 以尝试重新启动 FE。
+
+### `priority_networks`
+
+默认值:空
+
+为那些有很多 ip 的服务器声明一个选择策略。 请注意,最多应该有一个 ip 与此列表匹配。 这是一个以分号分隔格式的列表,用 CIDR 表示法,例如 10.10.10.0/24。 如果没有匹配这条规则的ip,会随机选择一个。
+
+### `txn_rollback_limit`
+
+默认值:100
+
+尝试重新加入组时 bdbje 可以回滚的最大 txn 数
+
+### `max_agent_task_threads_num`
+
+默认值:4096
+
+是否为 Master FE 节点独有的配置项:true
+
+代理任务线程池中处理代理任务的最大线程数。
+
+### `heartbeat_mgr_blocking_queue_size`
+
+默认值:1024
+
+是否为 Master FE 节点独有的配置项:true
+
+在 heartbeat_mgr 中存储心跳任务的阻塞队列大小。
+
+### `heartbeat_mgr_threads_num`
+
+默认值:8
+
+是否为 Master FE 节点独有的配置项:true
+
+heartbeat _mgr 中处理心跳事件的线程数。
+
+### `bdbje_replica_ack_timeout_second`
+
+默认值:10
+
+元数据会同步写入到多个 Follower FE,这个参数用于控制 Master FE 等待 Follower FE 发送 ack 的超时时间。当写入的数据较大时,可能 ack 时间较长,如果超时,会导致写元数据失败,FE 进程退出。此时可以适当调大这个参数。
+
+### `bdbje_lock_timeout_second`
+
+默认值:1
+
+bdbje 操作的 lock timeout  如果 FE WARN 日志中有很多 LockTimeoutException,可以尝试增加这个值
+
+### `bdbje_heartbeat_timeout_second`
+
+默认值:30
+
+master 和 follower 之间 bdbje 的心跳超时。 默认为 30 秒,与 bdbje 中的默认值相同。 如果网络遇到暂时性问题,一些意外的长 Java GC 使您烦恼,您可以尝试增加此值以减少错误超时的机会
+
+### `replica_ack_policy`
+
+默认值:SIMPLE_MAJORITY
+
+选项:ALL, NONE, SIMPLE_MAJORITY
+
+bdbje 的副本 ack 策略。 更多信息,请参见:http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.ReplicaAckPolicy.html
+
+### `replica_sync_policy`
+
+默认值:SYNC
+
+选项:SYNC, NO_SYNC, WRITE_NO_SYNC
+
+bdbje 的Follower FE 同步策略。
+
+### `master_sync_policy`
+
+默认值:SYNC
+
+选项:SYNC, NO_SYNC, WRITE_NO_SYNC
+
+Master FE 的 bdbje 同步策略。 如果您只部署一个 Follower FE,请将其设置为“SYNC”。 如果你部署了超过 3 个 Follower FE,你可以将这个和下面的 `replica_sync_policy ` 设置为 WRITE_NO_SYNC。 更多信息,参见:http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.SyncPolicy.html
+
+### `meta_delay_toleration_second`
+
+默认值:300 (5分钟)
+
+如果元数据延迟间隔超过  `meta_delay_toleration_second `,非主 FE 将停止提供服务
+
+### `edit_log_roll_num`
+
+默认值:50000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+Master FE will save image every  `edit_log_roll_num ` meta journals.。
+
+### `edit_log_port`
+
+默认值:9010
+
+bdbje端口
+
+### `edit_log_type`
+
+默认值:BDB
+
+编辑日志类型。
+BDB:将日志写入 bdbje
+LOCAL:已弃用。
+
+### `tmp_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/temp_dir"
+
+temp dir 用于保存某些过程的中间结果,例如备份和恢复过程。 这些过程完成后,将清除此目录中的文件。
+
+### `meta_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/doris-meta"
+
+Doris 元数据将保存在这里。 强烈建议将此目录的存储为:
+
+1. 高写入性能(SSD)
+
+2. 安全(RAID)
+
+### `custom_config_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/conf"
+
+自定义配置文件目录
+
+配置 `fe_custom.conf` 文件的位置。默认为 `conf/` 目录下。
+
+在某些部署环境下,`conf/` 目录可能因为系统的版本升级被覆盖掉。这会导致用户在运行是持久化修改的配置项也被覆盖。这时,我们可以将 `fe_custom.conf` 存储在另一个指定的目录中,以防止配置文件被覆盖。
+
+### `log_roll_size_mb`
+
+默认值:1024  (1G)
+
+一个系统日志和审计日志的最大大小
+
+### `sys_log_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/log"
+
+sys_log_dir:
+
+这指定了 FE 日志目录。 FE 将产生 2 个日志文件:
+
+1. fe.log:FE进程的所有日志。
+2. fe.warn.log FE 进程的所有警告和错误日志。
+
+### `sys_log_level`
+
+默认值:INFO
+
+日志级别,可选项:INFO, WARNING, ERROR, FATAL
+
+### `sys_log_roll_num`
+
+默认值:10
+
+要保存在  `sys_log_roll_interval ` 内的最大 FE 日志文件。 默认为 10,表示一天最多有 10 个日志文件
+
+### `sys_log_verbose_modules`
+
+默认值:{}
+
+详细模块。 VERBOSE 级别由 log4j DEBUG 级别实现。
+
+例如:
+    sys_log_verbose_modules = org.apache.doris.catalog
+    这只会打印包 org.apache.doris.catalog 及其所有子包中文件的调试日志。
+
+### `sys_log_roll_interval`
+
+默认值:DAY
+
+可选项:
+
+- DAY:  log 前缀是 yyyyMMdd
+- HOUR: log 前缀是 yyyyMMddHH
+
+### `sys_log_delete_age`
+
+默认值:7d
+
+默认为 7 天,如果日志的最后修改时间为 7 天前,则将其删除。
+
+支持格式:
+
+- 7d: 7 天
+- 10h: 10 小时
+- 60m: 60 分钟
+- 120s: 120 秒
+
+### `audit_log_dir`
+
+默认值:PaloFe.DORIS_HOME_DIR + "/log"
+
+审计日志目录:
+这指定了 FE 审计日志目录。
+审计日志 fe.audit.log 包含所有请求以及相关信息,如  `user, host, cost, status ` 等。
+
+### `audit_log_roll_num`
+
+默认值:90
+
+保留在  `audit_log_roll_interval ` 内的最大 FE 审计日志文件。
+
+### `audit_log_modules`
+
+默认值:{"slow_query", "query", "load", "stream_load"}
+
+慢查询包含所有开销超过 *qe_slow_log_ms* 的查询
+
+### `qe_slow_log_ms`
+
+默认值:5000 (5秒)
+
+如果查询的响应时间超过此阈值,则会在审计日志中记录为 slow_query。
+
+### `audit_log_roll_interval`
+
+默认值:DAY
+
+DAY:  log前缀是:yyyyMMdd
+HOUR: log前缀是:yyyyMMddHH
+
+### `audit_log_delete_age`
+
+默认值:30d
+
+默认为 30 天,如果日志的最后修改时间为 30 天前,则将其删除。
+支持格式:
+7d 7 天
+10 小时 10 小时
+60m 60 分钟
+120s    120 秒
+
+### `plugin_dir`
+
+默认值:DORIS_HOME + "/plugins
+
+插件安装目录
+
+### `plugin_enable`
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+插件是否启用,默认启用
+
+### `label_keep_max_second`
+
+默认值:3 * 24 * 3600  (3天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+`label_keep_max_second  `后将删除已完成或取消的加载作业的标签,
+
+1. 去除的标签可以重复使用。
+2. 设置较短的时间会降低 FE 内存使用量 (因为所有加载作业的信息在被删除之前都保存在内存中)
+
+在高并发写的情况下,如果出现大量作业积压,出现 `call frontend service failed`的情况,查看日志如果是元数据写占用锁的时间太长,可以将这个值调成12小时,或者更小6小时
+
+### `streaming_label_keep_max_second`
+
+默认值:43200 (12小时)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+对于一些高频负载工作,例如:INSERT、STREAMING LOAD、ROUTINE_LOAD_TASK 。 如果过期,则删除已完成的作业或任务。
+
+### `history_job_keep_max_second`
+
+默认值:7 * 24 * 3600   (7天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+某些作业的最大保留时间。 像 schema 更改和 Rollup 作业。
+
+### `label_clean_interval_second`
+
+默认值:4 * 3600  (4小时)
+
+load 标签清理器将每隔 `label_clean_interval_second` 运行一次以清理过时的作业。
+
+### `delete_info_keep_max_second`
+
+默认值:3 * 24 * 3600  (3天)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+删除元数据中创建时间大于`delete_info_keep_max_second`的delete信息。
+
+设置较短的时间将减少 FE 内存使用量和镜像文件大小。(因为所有的deleteInfo在被删除之前都存储在内存和镜像文件中)
+
+### `transaction_clean_interval_second`
+
+默认值:30
+
+如果事务 visible 或者 aborted 状态,事务将在 `transaction_clean_interval_second` 秒后被清除 ,我们应该让这个间隔尽可能短,每个清洁周期都尽快
+
+
+### `default_max_query_instances`
+
+默认值:-1
+
+用户属性max_query_instances小于等于0时,使用该配置,用来限制单个用户同一时刻可使用的查询instance个数。该参数小于等于0表示无限制。
+
+### `use_compact_thrift_rpc`
+
+默认值:true
+
+是否使用压缩格式发送查询计划结构体。开启后,可以降低约50%的查询计划结构体大小,从而避免一些 "send fragment timeout" 错误。
+但是在某些高并发小查询场景下,可能会降低约10%的并发度。
+
+### `disable_tablet_scheduler`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为true,将关闭副本修复和均衡逻辑。
+
+
+
+### `enable_force_drop_redundant_replica`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为 true,系统会在副本调度逻辑中,立即删除冗余副本。这可能导致部分正在对对应副本写入的导入作业失败,但是会加速副本的均衡和修复速度。
+当集群中有大量等待被均衡或修复的副本时,可以尝试设置此参数,以牺牲部分导入成功率为代价,加速副本的均衡和修复。
+
+### `repair_slow_replica`
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+如果设置为 true,会自动检测compaction比较慢的副本,并将迁移到其他机器,检测条件是 最慢副本的版本计数超过 `min_version_count_indicate_replica_compaction_too_slow` 的值, 且与最快副本的版本计数差异所占比例超过 `valid_version_count_delta_ratio_between_replicas` 的值
+
+### `colocate_group_relocate_delay_second`
+
+默认值:1800
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+重分布一个 Colocation Group 可能涉及大量的tablet迁移。因此,我们需要一个更保守的策略来避免不必要的 Colocation 重分布。
+重分布通常发生在 Doris 检测到有 BE 节点宕机后。这个参数用于推迟对BE宕机的判断。如默认参数下,如果 BE 节点能够在 1800 秒内恢复,则不会触发 Colocation 重分布。
+
+### `allow_replica_on_same_host`
+
+默认值:false
+
+是否可以动态配置:false
+
+是否为 Master FE 节点独有的配置项:false
+
+是否允许同一个 tablet 的多个副本分布在同一个 host 上。这个参数主要用于本地测试是,方便搭建多个 BE 已测试某些多副本情况。不要用于非测试环境。
+
+### `min_version_count_indicate_replica_compaction_too_slow`
+
+默认值:300
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+版本计数阈值,用来判断副本做 compaction 的速度是否太慢
+
+### `valid_version_count_delta_ratio_between_replicas`
+
+默认值:0.5
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+最慢副本的版本计数与最快副本的差异有效比率阈值,如果设置 `repair_slow_replica` 为 true,则用于判断是否修复最慢的副本
+
+### `min_bytes_indicate_replica_too_large`
+
+默认值:2 * 1024 * 1024 * 1024 (2G)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+数据大小阈值,用来判断副本的数据量是否太大
+
+### skip_compaction_slower_replica
+
+默认值:true
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:false
+
+如果设置为true,则在选择可查询副本时,将跳过 compaction 较慢的副本
+
+### enable_create_sync_job
+
+开启 MySQL 数据同步作业功能。默认是 false,关闭此功能
+
+默认值:false
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### sync_commit_interval_second
+
+提交事务的最大时间间隔。若超过了这个时间 channel 中还有数据没有提交,consumer 会通知 channel 提交事务。
+
+默认值:10(秒)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### min_sync_commit_size
+
+提交事务需满足的最小 event 数量。若 Fe 接收到的 event 数量小于它,会继续等待下一批数据直到时间超过了 `sync_commit_interval_second ` 为止。默认值是 10000 个 events,如果你想修改此配置,请确保此值小于 canal 端的 `canal.instance.memory.buffer.size` 配置(默认16384),否则在 ack 前Fe会尝试获取比 store 队列长度更多的 event,导致 store 队列阻塞至超时为止。
+
+默认值:10000
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### min_bytes_sync_commit
+
+提交事务需满足的最小数据大小。若 Fe 接收到的数据大小小于它,会继续等待下一批数据直到时间超过了 `sync_commit_interval_second` 为止。默认值是 15 MB,如果你想修改此配置,请确保此值小于 canal 端的 `canal.instance.memory.buffer.size` 和 `canal.instance.memory.buffer.memunit` 的乘积(默认 16 MB),否则在 ack 前 Fe 会尝试获取比 store 空间更大的数据,导致 store 队列阻塞至超时为止。
+
+默认值:15 * 1024 * 1024(15M)
+
+是否可以动态配置:true
+
+是否为 Master FE 节点独有的配置项:true
+
+### max_bytes_sync_commit
+
+ 数据同步作业线程池中的最大线程数量。此线程池整个FE中只有一个,用于处理FE中所有数据同步作业向BE发送数据的任务 task,线程池的实现在 `SyncTaskPool` 类。
+
+默认值:10
+
+是否可以动态配置:false
+
+是否为 Master FE 节点独有的配置项:false
diff --git a/new-docs/zh-CN/admin-manual/config/user-property.md b/new-docs/zh-CN/admin-manual/config/user-property.md
index d7eb0d8576..ff57234296 100644
--- a/new-docs/zh-CN/admin-manual/config/user-property.md
+++ b/new-docs/zh-CN/admin-manual/config/user-property.md
@@ -24,4 +24,50 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# User 配置项
\ No newline at end of file
+# User 配置项
+
+该文档主要介绍了 User 级别的相关配置项。User 级别的配置生效范围为单个用户。每个用户都可以设置自己的 User property。相互不影响。
+
+## 查看配置项
+
+FE 启动后,在 MySQL 客户端,通过下面命令查看 User 的配置项:
+
+`SHOW PROPERTY [FOR user] [LIKE key pattern]`
+
+具体语法可通过命令:`help show property;` 查询。
+
+## 设置配置项
+
+FE 启动后,在MySQL 客户端,通过下面命令修改 User 的配置项:
+
+`SET PROPERTY [FOR 'user'] 'key' = 'value' [, 'key' = 'value']`
+
+具体语法可通过命令:`help set property;` 查询。
+
+User 级别的配置项只会对指定用户生效,并不会影响其他用户的配置。
+
+## 应用举例
+
+1. 修改用户 Billie 的 `max_user_connections`
+
+    通过 `SHOW PROPERTY FOR 'Billie' LIKE '%max_user_connections%';` 查看 Billie 用户当前的最大链接数为 100。
+
+    通过 `SET PROPERTY FOR 'Billie' 'max_user_connections' = '200';` 修改 Billie 用户的当前最大连接数到 200。
+
+## 配置项列表
+
+### max_user_connections
+
+    用户最大的连接数,默认值为100。一般情况不需要更改该参数,除非查询的并发数超过了默认值。
+
+### max_query_instances
+
+    用户同一时间点可使用的instance个数, 默认是-1,小于等于0将会使用配置default_max_query_instances.
+
+### resource
+
+### quota
+
+### default_load_cluster
+
+### load_cluster
diff --git a/new-docs/zh-CN/admin-manual/user-privilege.md b/new-docs/zh-CN/admin-manual/user-privilege.md
index 13cad1a7f1..40f485d968 100644
--- a/new-docs/zh-CN/admin-manual/user-privilege.md
+++ b/new-docs/zh-CN/admin-manual/user-privilege.md
@@ -1,6 +1,6 @@
 ---
 {
-    "title": "用户及权限管理",
+    "title": "权限管理",
     "language": "zh-CN"
 }
 ---
@@ -24,4 +24,196 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# 权限管理
\ No newline at end of file
+# 权限管理
+
+Doris 新的权限管理系统参照了 Mysql 的权限管理机制,做到了表级别细粒度的权限控制,基于角色的权限访问控制,并且支持白名单机制。
+
+## 名词解释
+
+1. 用户标识 user_identity
+
+   在权限系统中,一个用户被识别为一个 User Identity(用户标识)。用户标识由两部分组成:username 和 userhost。其中 username 为用户名,由英文大小写组成。userhost 表示该用户链接来自的 IP。user_identity 以 username@'userhost' 的方式呈现,表示来自 userhost 的 username。
+
+   user_identity 的另一种表现方式为 username@['domain'],其中 domain 为域名,可以通过 DNS 或 BNS(百度名字服务)解析为一组 ip。最终表现为一组 username@'userhost',所以后面我们统一使用 username@'userhost' 来表示。
+
+2. 权限 Privilege
+
+   权限作用的对象是节点、数据库或表。不同的权限代表不同的操作许可。
+
+3. 角色 Role
+
+   Doris可以创建自定义命名的角色。角色可以被看做是一组权限的集合。新创建的用户可以被赋予某一角色,则自动被赋予该角色所拥有的权限。后续对角色的权限变更,也会体现在所有属于该角色的用户权限上。
+
+4. 用户属性 user_property
+
+   用户属性直接附属于某一用户,而不是用户标识。即 cmy@'192.%' 和 cmy@['domain'] 都拥有同一组用户属性,该属性属于用户 cmy,而不是 cmy@'192.%' 或 cmy@['domain']。
+
+   用户属性包括但不限于: 用户最大连接数、导入集群配置等等。
+
+## 支持的操作
+
+1. 创建用户:CREATE USER
+2. 删除用户:DROP USER
+3. 授权:GRANT
+4. 撤权:REVOKE
+5. 创建角色:CREATE ROLE
+6. 删除角色:DROP ROLE
+7. 查看当前用户权限:SHOW GRANTS
+8. 查看所有用户权限:SHOW ALL GRANTS
+9. 查看已创建的角色:SHOW ROLES
+10. 查看用户属性:SHOW PROPERTY
+
+关于以上命令的详细帮助,可以通过 mysql 客户端连接 Doris 后,使用 help + command 获取帮助。如 `HELP CREATE USER`。
+
+## 权限类型
+
+Doris 目前支持以下几种权限
+
+1. Node_priv
+
+   节点变更权限。包括 FE、BE、BROKER 节点的添加、删除、下线等操作。目前该权限只能授予 Root 用户。
+
+2. Grant_priv
+
+   权限变更权限。允许执行包括授权、撤权、添加/删除/变更 用户/角色 等操作。
+
+3. Select_priv
+
+   对数据库、表的只读权限。
+
+4. Load_priv
+
+   对数据库、表的写权限。包括 Load、Insert、Delete 等。
+
+5. Alter_priv
+
+   对数据库、表的更改权限。包括重命名 库/表、添加/删除/变更 列、添加/删除 分区等操作。
+
+6. Create_priv
+
+   创建数据库、表、视图的权限。
+
+7. Drop_priv
+
+   删除数据库、表、视图的权限。
+
+8. Usage_priv
+
+   资源的使用权限。
+
+## 权限层级
+
+同时,根据权限适用范围的不同,我们将库表的权限分为以下三个层级:
+
+1. GLOBAL LEVEL:全局权限。即通过 GRANT 语句授予的 `*.*` 上的权限。被授予的权限适用于任意数据库中的任意表。
+2. DATABASE LEVEL:数据库级权限。即通过 GRANT 语句授予的 `db.*` 上的权限。被授予的权限适用于指定数据库中的任意表。
+3. TABLE LEVEL:表级权限。即通过 GRANT 语句授予的 `db.tbl` 上的权限。被授予的权限适用于指定数据库中的指定表。
+
+将资源的权限分为以下两个层级:
+
+1. GLOBAL LEVEL:全局权限。即通过 GRANT 语句授予的 `*` 上的权限。被授予的权限适用于资源。
+2. RESOURCE LEVEL: 资源级权限。即通过 GRANT 语句授予的 `resource_name` 上的权限。被授予的权限适用于指定资源。
+
+## ADMIN/GRANT 权限说明
+
+ADMIN_PRIV 和 GRANT_PRIV 权限同时拥有**授予权限**的权限,较为特殊。这里对和这两个权限相关的操作逐一说明。
+
+1. CREATE USER
+   - 拥有 ADMIN 权限,或任意层级的 GRANT 权限的用户可以创建新用户。
+2. DROP USER
+   - 只有 ADMIN 权限可以删除用户。
+3. CREATE/DROP ROLE
+   - 只有 ADMIN 权限可以创建角色。
+4. GRANT/REVOKE
+   - 拥有 ADMIN 权限,或者 GLOBAL 层级 GRANT 权限的用户,可以授予或撤销任意用户的权限。
+   - 拥有 DATABASE 层级 GRANT 权限的用户,可以授予或撤销任意用户对指定数据库的权限。
+   - 拥有 TABLE 层级 GRANT 权限的用户,可以授予或撤销任意用户对指定数据库中指定表的权限。
+5. SET PASSWORD
+   - 拥有 ADMIN 权限,或者 GLOBAL 层级 GRANT 权限的用户,可以设置任意用户的密码。
+   - 普通用户可以设置自己对应的 UserIdentity 的密码。自己对应的 UserIdentity 可以通过 `SELECT CURRENT_USER();` 命令查看。
+   - 拥有非 GLOBAL 层级 GRANT 权限的用户,不可以设置已存在用户的密码,仅能在创建用户时指定密码。
+
+## 一些说明
+
+1. Doris 初始化时,会自动创建如下用户和角色:
+   1. operator 角色:该角色拥有 Node_priv 和 Admin_priv,即对Doris的所有权限。后续某个升级版本中,我们可能会将该角色的权限限制为 Node_priv,即仅授予节点变更权限。以满足某些云上部署需求。
+   2. admin 角色:该角色拥有 Admin_priv,即除节点变更以外的所有权限。
+   3. root@'%':root 用户,允许从任意节点登陆,角色为 operator。
+   4. admin@'%':admin 用户,允许从任意节点登陆,角色为 admin。
+2. 不支持删除或更改默认创建的角色或用户的权限。
+
+3. operator 角色的用户有且只有一个。admin 角色的用户可以创建多个。
+
+4. 一些可能产生冲突的操作说明
+
+   1. 域名与ip冲突:
+
+      假设创建了如下用户:
+
+      CREATE USER cmy@['domain'];
+
+      并且授权:
+
+      GRANT SELECT_PRIV ON *.* TO cmy@['domain']
+
+      该 domain 被解析为两个 ip:ip1 和 ip2
+
+      假设之后,我们对 cmy@'ip1' 进行一次单独授权:
+
+      GRANT ALTER_PRIV ON *.* TO cmy@'ip1';
+
+      则 cmy@'ip1' 的权限会被修改为 SELECT_PRIV, ALTER_PRIV。并且当我们再次变更 cmy@['domain'] 的权限时,cmy@'ip1' 也不会跟随改变。
+
+   2. 重复ip冲突:
+
+      假设创建了如下用户:
+
+      CREATE USER cmy@'%' IDENTIFIED BY "12345";
+
+      CREATE USER cmy@'192.%' IDENTIFIED BY "abcde";
+
+      在优先级上,'192.%' 优先于 '%',因此,当用户 cmy 从 192.168.1.1 这台机器尝试使用密码 '12345' 登陆 Doris 会被拒绝。
+
+5. 忘记密码
+
+   如果忘记了密码无法登陆 Doris,可以在 Doris FE 节点所在机器,使用如下命令无密码登陆 Doris:
+
+   `mysql-client -h 127.0.0.1 -P query_port -uroot`
+
+   登陆后,可以通过 SET PASSWORD 命令重置密码。
+
+6. 任何用户都不能重置 root 用户的密码,除了 root 用户自己。
+
+7. ADMIN_PRIV 权限只能在 GLOBAL 层级授予或撤销。
+
+8. 拥有 GLOBAL 层级 GRANT_PRIV 其实等同于拥有 ADMIN_PRIV,因为该层级的 GRANT_PRIV 有授予任意权限的权限,请谨慎使用。
+
+9. `current_user()` 和 `user()`
+
+   用户可以通过 `SELECT current_user();` 和 `SELECT user();` 分别查看 `current_user` 和 `user`。其中 `current_user` 表示当前用户是以哪种身份通过认证系统的,而 `user` 则是用户当前实际的 `user_identity`。举例说明:
+
+   假设创建了 `user1@'192.%'` 这个用户,然后以为来自 192.168.10.1 的用户 user1 登陆了系统,则此时的 `current_user` 为 `user1@'192.%'`,而 `user` 为 `user1@'192.168.10.1'`。
+
+   所有的权限都是赋予某一个 `current_user` 的,真实用户拥有对应的 `current_user` 的所有权限。
+
+## 最佳实践
+
+这里举例一些 Doris 权限系统的使用场景。
+
+1. 场景一
+
+   Doris 集群的使用者分为管理员(Admin)、开发工程师(RD)和用户(Client)。其中管理员拥有整个集群的所有权限,主要负责集群的搭建、节点管理等。开发工程师负责业务建模,包括建库建表、数据的导入和修改等。用户访问不同的数据库和表来获取数据。
+
+   在这种场景下,可以为管理员赋予 ADMIN 权限或 GRANT 权限。对 RD 赋予对任意或指定数据库表的 CREATE、DROP、ALTER、LOAD、SELECT 权限。对 Client 赋予对任意或指定数据库表 SELECT 权限。同时,也可以通过创建不同的角色,来简化对多个用户的授权操作。
+
+2. 场景二
+
+   一个集群内有多个业务,每个业务可能使用一个或多个数据。每个业务需要管理自己的用户。在这种场景下。管理员用户可以为每个数据库创建一个拥有 DATABASE 层级 GRANT 权限的用户。该用户仅可以对用户进行指定的数据库的授权。
+
+3. 黑名单
+
+   Doris 本身不支持黑名单,只有白名单功能,但我们可以通过某些方式来模拟黑名单。假设先创建了名为 `user@'192.%'` 的用户,表示允许来自 `192.*` 的用户登录。此时如果想禁止来自 `192.168.10.1` 的用户登录。则可以再创建一个用户 `cmy@'192.168.10.1'` 的用户,并设置一个新的密码。因为 `192.168.10.1` 的优先级高于 `192.%`,所以来自 `192.168.10.1` 将不能再使用旧密码进行登录。
+
+## 更多帮助
+
+ 关于 权限管理 使用的更多详细语法及最佳实践,请参阅 [GRANTS](../sql-manual/sql-reference-v2/Account-Management-Statements/GRANT.html) 命令手册,你也可以在 MySql 客户端命令行下输入 `HELP GRANTS` 获取更多帮助信息。
\ No newline at end of file
diff --git a/new-docs/zh-CN/advanced/broker.md b/new-docs/zh-CN/advanced/broker.md
index 29e33f6261..0244c2fd9c 100644
--- a/new-docs/zh-CN/advanced/broker.md
+++ b/new-docs/zh-CN/advanced/broker.md
@@ -24,4 +24,170 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# Broker
\ No newline at end of file
+# Broker
+
+Broker 是 Doris 集群中一种可选进程,主要用于支持 Doris 读写远端存储上的文件和目录,如 HDFS、BOS 和 AFS 等。
+
+Broker 通过提供一个 RPC 服务端口来提供服务,是一个无状态的 Java 进程,负责为远端存储的读写操作封装一些类 POSIX 的文件操作,如 open,pread,pwrite 等等。除此之外,Broker 不记录任何其他信息,所以包括远端存储的连接信息、文件信息、权限信息等等,都需要通过参数在 RPC 调用中传递给 Broker 进程,才能使得 Broker 能够正确读写文件。
+
+Broker 仅作为一个数据通路,并不参与任何计算,因此仅需占用较少的内存。通常一个 Doris 系统中会部署一个或多个 Broker 进程。并且相同类型的 Broker 会组成一个组,并设定一个 **名称(Broker name)**。
+
+Broker 在 Doris 系统架构中的位置如下:
+
+```text
++----+   +----+
+| FE |   | BE |
++-^--+   +--^-+
+  |         |
+  |         |
++-v---------v-+
+|   Broker    |
++------^------+
+       |
+       |
++------v------+
+|HDFS/BOS/AFS |
++-------------+
+```
+
+本文档主要介绍 Broker 在访问不同远端存储时需要的参数,如连接信息、权限认证信息等等。
+
+## 支持的存储系统
+
+不同的 Broker 类型支持不同的存储系统。
+
+1. 社区版 HDFS
+   - 支持简单认证访问
+   - 支持通过 kerberos 认证访问
+   - 支持 HDFS HA 模式访问
+2. 百度 HDFS/AFS(开源版本不支持)
+   - 支持通过 ugi 简单认证访问
+3. 百度对象存储 BOS(开源版本不支持)
+   - 支持通过 AK/SK 认证访问
+
+## 需要 Broker 的操作
+
+1. [Broker Load](../data-operate/import/import-way/broker-load-manual.html)
+2. [数据导出(Export)](../data-operate/export/export-manual.html)
+3. [数据备份](../admin-manual/data-admin/backup.html)
+
+## Broker 信息
+
+Broker 的信息包括 **名称(Broker name)** 和 **认证信息** 两部分。通常的语法格式如下:
+
+```text
+WITH BROKER "broker_name" 
+(
+    "username" = "xxx",
+    "password" = "yyy",
+    "other_prop" = "prop_value",
+    ...
+);
+```
+
+### 名称
+
+通常用户需要通过操作命令中的 `WITH BROKER "broker_name"` 子句来指定一个已经存在的 Broker Name。Broker Name 是用户在通过 `ALTER SYSTEM ADD BROKER` 命令添加 Broker 进程时指定的一个名称。一个名称通常对应一个或多个 Broker 进程。Doris 会根据名称选择可用的 Broker 进程。用户可以通过 `SHOW BROKER` 命令查看当前集群中已经存在的 Broker。
+
+**注:Broker Name 只是一个用户自定义名称,不代表 Broker 的类型。**
+
+### 认证信息
+
+不同的 Broker 类型,以及不同的访问方式需要提供不同的认证信息。认证信息通常在 `WITH BROKER "broker_name"` 之后的 Property Map 中以 Key-Value 的方式提供。
+
+#### 社区版 HDFS
+
+1. 简单认证
+
+   简单认证即 Hadoop 配置 `hadoop.security.authentication` 为 `simple`。
+
+   使用系统用户访问 HDFS。或者在 Broker 启动的环境变量中添加:`HADOOP_USER_NAME`。
+
+   ```text
+   (
+       "username" = "user",
+       "password" = ""
+   );
+   ```
+
+   密码置空即可。
+
+2. Kerberos 认证
+
+   该认证方式需提供以下信息:
+
+   - `hadoop.security.authentication`:指定认证方式为 kerberos。
+   - `kerberos_principal`:指定 kerberos 的 principal。
+   - `kerberos_keytab`:指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问。
+   - `kerberos_keytab_content`:指定 kerberos 中 keytab 文件内容经过 base64 编码之后的内容。这个跟 `kerberos_keytab` 配置二选一即可。
+
+   示例如下:
+
+   ```text
+   (
+       "hadoop.security.authentication" = "kerberos",
+       "kerberos_principal" = "doris@YOUR.COM",
+       "kerberos_keytab" = "/home/doris/my.keytab"
+   )
+   ```
+
+   ```text
+   (
+       "hadoop.security.authentication" = "kerberos",
+       "kerberos_principal" = "doris@YOUR.COM",
+       "kerberos_keytab_content" = "ASDOWHDLAWIDJHWLDKSALDJSDIWALD"
+   )
+   ```
+
+   如果采用Kerberos认证方式,则部署Broker进程的时候需要[krb5.conf (opens new window)](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html)文件, krb5.conf文件包含Kerberos的配置信息,通常,您应该将krb5.conf文件安装在目录/etc中。您可以通过设置环境变量KRB5_CONFIG覆盖默认位置。 krb5.conf文件的内容示例如下:
+
+   ```text
+   [libdefaults]
+       default_realm = DORIS.HADOOP
+       default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
+       default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
+       dns_lookup_kdc = true
+       dns_lookup_realm = false
+   
+   [realms]
+       DORIS.HADOOP = {
+           kdc = kerberos-doris.hadoop.service:7005
+       }
+   ```
+
+3. HDFS HA 模式
+
+   这个配置用于访问以 HA 模式部署的 HDFS 集群。
+
+   - `dfs.nameservices`:指定 hdfs 服务的名字,自定义,如:"dfs.nameservices" = "my_ha"。
+   - `dfs.ha.namenodes.xxx`:自定义 namenode 的名字,多个名字以逗号分隔。其中 xxx 为 `dfs.nameservices` 中自定义的名字,如: "dfs.ha.namenodes.my_ha" = "my_nn"。
+   - `dfs.namenode.rpc-address.xxx.nn`:指定 namenode 的rpc地址信息。其中 nn 表示 `dfs.ha.namenodes.xxx` 中配置的 namenode 的名字,如:"dfs.namenode.rpc-address.my_ha.my_nn" = "host:port"。
+   - `dfs.client.failover.proxy.provider`:指定 client 连接 namenode 的 provider,默认为:org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider。
+
+   示例如下:
+
+   ```text
+   (
+       "dfs.nameservices" = "my_ha",
+       "dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2",
+       "dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
+       "dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
+       "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+   )
+   ```
+
+   HA 模式可以和前面两种认证方式组合,进行集群访问。如通过简单认证访问 HA HDFS:
+
+   ```text
+   (
+       "username"="user",
+       "password"="passwd",
+       "dfs.nameservices" = "my_ha",
+       "dfs.ha.namenodes.my_ha" = "my_namenode1, my_namenode2",
+       "dfs.namenode.rpc-address.my_ha.my_namenode1" = "nn1_host:rpc_port",
+       "dfs.namenode.rpc-address.my_ha.my_namenode2" = "nn2_host:rpc_port",
+       "dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+   )
+   ```
+
+   关于HDFS集群的配置可以写入hdfs-site.xml文件中,用户使用Broker进程读取HDFS集群的信息时,只需要填写集群的文件路径名和认证信息即可。
\ No newline at end of file
diff --git a/new-docs/zh-CN/advanced/resource.md b/new-docs/zh-CN/advanced/resource.md
index c18b1b4004..35225efa90 100644
--- a/new-docs/zh-CN/advanced/resource.md
+++ b/new-docs/zh-CN/advanced/resource.md
@@ -24,4 +24,125 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# 资源管理
\ No newline at end of file
+# 资源管理
+
+为了节省Doris集群内的计算、存储资源,Doris需要引入一些其他外部资源来完成相关的工作,如Spark/GPU用于查询,HDFS/S3用于外部存储,Spark/MapReduce用于ETL, 通过ODBC连接外部存储等,因此我们引入资源管理机制来管理Doris使用的这些外部资源。
+
+## 基本概念
+
+一个资源包含名字、类型等基本信息,名字为全局唯一,不同类型的资源包含不同的属性,具体参考各资源的介绍。
+
+资源的创建和删除只能由拥有 `admin` 权限的用户进行操作。一个资源隶属于整个Doris集群。拥有 `admin` 权限的用户可以将使用权限`usage_priv` 赋给普通用户。可参考`HELP GRANT`或者权限文档。
+
+## 具体操作
+
+资源管理主要有三个命令:`CREATE RESOURCE`,`DROP RESOURCE`和`SHOW RESOURCES`,分别为创建、删除和查看资源。这三个命令的具体语法可以通过MySQL客户端连接到 Doris 后,执行 `HELP cmd` 的方式查看帮助。
+
+1. CREATE RESOURCE
+
+   该语句用于创建资源。具体操作可参考 [CREATE RESOURCE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Create/CREATE-RESOURCE.html)。
+
+2. DROP RESOURCE
+
+   该命令可以删除一个已存在的资源。具体操作见 [DROP RESOURCE](../sql-manual/sql-reference-v2/Data-Definition-Statements/Drop/DROP-RESOURCE.html) 。
+
+3. SHOW RESOURCES
+
+   该命令可以查看用户有使用权限的资源。具体操作见  [SHOW RESOURCES](../sql-manual/sql-reference-v2/Show-Statements/SHOW-RESOURCES.html)。
+
+## 支持的资源
+
+目前Doris能够支持
+
+- Spark资源 : 完成ETL工作。
+- ODBC资源:查询和导入外部表的数据
+
+下面将分别展示两种资源的使用方式。
+
+### Spark
+
+#### 参数
+
+##### Spark 相关参数如下:
+
+`spark.master`: 必填,目前支持yarn,spark://host:port。
+
+`spark.submit.deployMode`: Spark 程序的部署模式,必填,支持 cluster,client 两种。
+
+`spark.hadoop.yarn.resourcemanager.address`: master为yarn时必填。
+
+`spark.hadoop.fs.defaultFS`: master为yarn时必填。
+
+其他参数为可选,参考http://spark.apache.org/docs/latest/configuration.html。
+
+##### 如果Spark用于ETL,还需要指定以下参数:
+
+`working_dir`: ETL 使用的目录。spark作为ETL资源使用时必填。例如:hdfs://host:port/tmp/doris。
+
+`broker`: broker 名字。spark作为ETL资源使用时必填。需要使用`ALTER SYSTEM ADD BROKER` 命令提前完成配置。
+
+- `broker.property_key`: broker读取ETL生成的中间文件时需要指定的认证信息等。
+
+#### 示例
+
+创建 yarn cluster 模式,名为 spark0 的 Spark 资源。
+
+```sql
+CREATE EXTERNAL RESOURCE "spark0"
+PROPERTIES
+(
+  "type" = "spark",
+  "spark.master" = "yarn",
+  "spark.submit.deployMode" = "cluster",
+  "spark.jars" = "xxx.jar,yyy.jar",
+  "spark.files" = "/tmp/aaa,/tmp/bbb",
+  "spark.executor.memory" = "1g",
+  "spark.yarn.queue" = "queue0",
+  "spark.hadoop.yarn.resourcemanager.address" = "127.0.0.1:9999",
+  "spark.hadoop.fs.defaultFS" = "hdfs://127.0.0.1:10000",
+  "working_dir" = "hdfs://127.0.0.1:10000/tmp/doris",
+  "broker" = "broker0",
+  "broker.username" = "user0",
+  "broker.password" = "password0"
+);
+```
+
+### ODBC
+
+#### 参数
+
+##### ODBC 相关参数如下:
+
+`type`: 必填,且必须为`odbc_catalog`。作为resource的类型标识。
+
+`user`: 外部表的账号,必填。
+
+`password`: 外部表的密码,必填。
+
+`host`: 外部表的连接ip地址,必填。
+
+`port`: 外部表的连接端口,必填。
+
+`odbc_type`: 标示外部表的类型,当前doris支持`mysql`与`oracle`,未来可能支持更多的数据库。引用该resource的ODBC外表必填,旧的mysql外表选填。
+
+`driver`: 标示外部表使用的driver动态库,引用该resource的ODBC外表必填,旧的mysql外表选填。
+
+具体如何使用可以,可以参考[ODBC of Doris](https://doris.apache.org/zh-CN/extending-doris/odbc-of-doris.html)
+
+#### 示例
+
+创建oracle的odbc resource,名为 odbc_oracle 的 odbc_catalog的 资源。
+
+```sql
+CREATE EXTERNAL RESOURCE `oracle_odbc`
+PROPERTIES (
+"type" = "odbc_catalog",
+"host" = "192.168.0.1",
+"port" = "8086",
+"user" = "test",
+"password" = "test",
+"database" = "test",
+"odbc_type" = "oracle",
+"driver" = "Oracle 19 ODBC driver"
+);
+```
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org