Currently, TiDB can track the memory quota of a single SQL query and take actions to prevent OOM (out of memory) or troubleshoot OOM when the memory usage exceeds a specific threshold value. In the TiDB configuration file, you can configure the options as below to control TiDB behaviors when the memory quota exceeds the threshold value:
# Valid options: ["log", "cancel"]
oom-action = "log"
tidb_mem_quota_query
variable, TiDB prints an entry of log. Then the SQL query continues to be executed. If OOM occurs, you can find the corresponding SQL query in the log.You can control the memory quota of a query using the following session variables. Generally, you only need to configure tidb_mem_quota_query
. Other variables are used for advanced configuration which most users do not need to care about.
Variable Name | Description | Unit | Default Value |
---|---|---|---|
tidb_mem_quota_query | Control the memory quota of a query | Byte | 32 << 30 |
tidb_mem_quota_hashjoin | Control the memory quota of “HashJoinExec” | Byte | 32 << 30 |
tidb_mem_quota_mergejoin | Control the memory quota of “MergeJoinExec” | Byte | 32 << 30 |
tidb_mem_quota_sort | Control the memory quota of “SortExec” | Byte | 32 << 30 |
tidb_mem_quota_topn | Control the memory quota of “TopNExec” | Byte | 32 << 30 |
tidb_mem_quota_indexlookupreader | Control the memory quota of “IndexLookUpExecutor” | Byte | 32 << 30 |
tidb_mem_quota_indexlookupjoin | Control the memory quota of “IndexLookUpJoin” | Byte | 32 << 30 |
tidb_mem_quota_nestedloopapply | Control the memory quota of “NestedLoopApplyExec” | Byte | 32 << 30 |
Some usage examples:
-- Set the threshold value of memory quota for a single SQL query to 8GB:
set @@tidb_mem_quota_query = 8 << 30;
-- Set the threshold value of memory quota for a single SQL query to 8MB:
set @@tidb_mem_quota_query = 8 << 20;
-- Set the threshold value of memory quota for a single SQL query to 8KB:
set @@tidb_mem_quota_query = 8 << 10;
What’s on this page