システム変数
TiDBのシステム変数はMySQLと同様に、設定がSESSIONまたはGLOBALスコープで適用されるという点で類似した動作をします。
- スコープ
SESSIONに対する変更は、現在のセッションのみに影響します。 - スコープが
GLOBALの場合、変更は即座に反映されます。この変数がスコープSESSIONにも設定されている場合は、すべてのセッション(あなたのセッションを含む)で現在のセッション値が引き続き使用されます。 - 変更は
SETステートメントを使用して行われます。
# These two identical statements change a session variable
SET tidb_distsql_scan_concurrency = 10;
SET SESSION tidb_distsql_scan_concurrency = 10;
# These two identical statements change a global variable
SET @@global.tidb_distsql_scan_concurrency = 10;
SET GLOBAL tidb_distsql_scan_concurrency = 10;
注記:
いくつかの
GLOBAL変数は TiDB クラスタに保持されます。このドキュメントにあるいくつかの変数にはPersists to cluster設定があり、YesまたはNoに設定できます。
- 設定が
Persists to cluster: Yesの変数については、グローバル変数が変更されると、すべてのTiDBサーバーに通知が送信され、システム変数キャッシュが更新されます。TiDBサーバーを追加したり、既存のTiDBサーバーを再起動したりすると、保存された設定値が自動的に使用されます。- 設定が
Persists to cluster: No変数については、変更は接続先のローカルTiDBインスタンスにのみ適用されます。設定した値を保持するには、設定ファイルtidb.tomlで変数を指定する必要があります。さらに、TiDBはいくつかのMySQL変数を読み取りと設定の両方が可能な変数として提供します。これは、アプリケーションとコネクタの両方がMySQL変数を読み取ることが一般的であるため、互換性のために必要です。たとえば、JDBCコネクタは、その動作に依存していないにもかかわらず、クエリキャッシュ設定の読み取りと設定の両方を行います。
注記:
値が大きいほど必ずしもパフォーマンスが向上するとは限りません。また、ほとんどの設定は接続ごとに適用されるため、ステートメントを実行している同時接続数を考慮することも重要です。
安全な値を決定する際には、変数の単位を考慮してください。
- スレッドの場合、安全な値は通常、CPUコアの数までです。
- バイト単位の場合、安全な値は通常、システムメモリの量よりも小さくなります。
- 時間を表す単位は秒またはミリ秒の場合があることに注意してください。
同じ単位を使用する変数は、同じリソースを巡って競合する可能性がある。
バージョン7.4.0以降では、 SET_VARを使用してステートメントの実行中にSESSION変数の値を一時的に変更できます。ステートメントの実行後、現在のセッションのシステム変数の値は自動的に元の値に戻ります。このヒントは、オプティマイザとエグゼキュータに関連する一部のシステム変数を変更するために使用できます。このドキュメントの変数にはApplies to hint SET_VAR設定があり、 YesまたはNoに設定できます。
- 設定が
Applies to hint SET_VAR: Yesの変数については、SET_VARヒントを使用して、ステートメントの実行中に現在のセッション内のシステム変数の値を変更できます。 - 設定が
Applies to hint SET_VAR: No変数については、ステートメントの実行中に、SET_VARヒントを使用して現在のセッションのシステム変数の値を変更することはできません。
ヒントSET_VAR詳細については、 SET_VAR参照してください。
変数参照
allow_auto_random_explicit_insert v4.0.3で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF INSERTステートメントで、AUTO_RANDOM属性を持つ列の値を明示的に指定することを許可するかどうかを決定します。
authentication_ldap_sasl_auth_method_name v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
SCRAM-SHA-1 - 可能
GSSAPI値:SCRAM-SHA-1SCRAM-SHA-256 - LDAP SASL認証の場合、この変数は認証方法名を指定します。
authentication_ldap_sasl_bind_base_dn はv7.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP SASL認証の場合、この変数は検索ツリー内の検索範囲を制限します。1
AS ...を指定せずにユーザーを作成した場合、TiDBはユーザー名に基づいてLDAPサーバー内でdnを自動的に検索します。
authentication_ldap_sasl_bind_root_dn はv7.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP SASL認証の場合、この変数はLDAPサーバーにログインしてユーザーを検索するために使用される
dn指定します。
authentication_ldap_sasl_bind_root_pwd はv7.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP SASL認証の場合、この変数はLDAPサーバーにログインしてユーザーを検索する際に使用するパスワードを指定します。
authentication_ldap_sasl_ca_path v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP SASL認証の場合、この変数はStartTLS接続用の認証局ファイルの絶対パスを指定します。
authentication_ldap_sasl_init_pool_size v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
10 - 範囲:
[1, 32767] - LDAP SASL認証の場合、この変数はLDAPサーバーへの接続プール内の初期接続を指定します。
authentication_ldap_sasl_max_pool_size v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1000 - 範囲:
[1, 32767] - LDAP SASL認証の場合、この変数はLDAPサーバーへの接続プール内の最大接続数を指定します。
authentication_ldap_sasl_server_host v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP SASL認証の場合、この変数はLDAPサーバーのホスト名またはIPアドレスを指定します。
authentication_ldap_sasl_server_port v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
389 - 範囲:
[1, 65535] - LDAP SASL認証の場合、この変数はLDAPサーバーのTCP/IPポート番号を指定します。
authentication_ldap_sasl_tls v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - LDAP SASL認証の場合、この変数は、プラグインによるLDAPサーバーへの接続がStartTLSで保護されるかどうかを制御します。
authentication_ldap_simple_auth_method_name v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
SIMPLE - 可能な値:
SIMPLE。 - LDAP簡易認証の場合、この変数は認証方法名を指定します。サポートされている値は
SIMPLEです。
authentication_ldap_simple_bind_base_dn はv7.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP シンプル認証の場合、この変数は検索ツリー内の検索範囲を制限します。1
AS ...を指定せずにユーザーを作成した場合、TiDB はユーザー名に基づいて LDAPサーバー内でdnを自動的に検索します。
authentication_ldap_simple_bind_root_dn はv7.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP簡易認証の場合、この変数はLDAPサーバーにログインしてユーザーを検索するために使用される
dn指定します。
authentication_ldap_simple_bind_root_pwd v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP簡易認証の場合、この変数はLDAPサーバーにログインしてユーザーを検索する際に使用するパスワードを指定します。
authentication_ldap_simple_ca_path v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP簡易認証の場合、この変数はStartTLS接続用の認証局ファイルの絶対パスを指定します。
authentication_ldap_simple_init_pool_size v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
10 - 範囲:
[1, 32767] - LDAP シンプル認証の場合、この変数は、LDAPサーバーへの接続プール内の初期接続を指定します。
authentication_ldap_simple_max_pool_size v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1000 - 範囲:
[1, 32767] - LDAP シンプル認証の場合、この変数は、LDAPサーバーへの接続プール内の最大接続数を指定します。
authentication_ldap_simple_server_host v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- LDAP簡易認証の場合、この変数はLDAPサーバーのホスト名またはIPアドレスを指定します。
authentication_ldap_simple_server_port v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
389 - 範囲:
[1, 65535] - LDAP シンプル認証の場合、この変数は LDAPサーバーの TCP/IP ポート番号を指定します。
authentication_ldap_simple_tls v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - LDAP簡易認証の場合、この変数はプラグインによるLDAPサーバーへの接続をStartTLSで保護するかどうかを制御します。
自動インクリメントインクリメント
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 65535] - 列に割り当てる値のステップサイズ(
AUTO_INCREMENTと、AUTO_RANDOMIDの割り当てルールを制御します。auto_increment_offsetとauto_increment_offsetて使用されることがよくあります。
自動インクリメントオフセット
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 65535] - 列に割り当てる
AUTO_INCREMENT値の初期オフセットと、AUTO_RANDOMIDの割り当てルールを制御します。この設定は、auto_increment_incrementと組み合わせて使用されることがよくあります。例:
mysql> CREATE TABLE t1 (a int not null primary key auto_increment);
Query OK, 0 rows affected (0.10 sec)
mysql> set auto_increment_offset=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set auto_increment_increment=3;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t1 VALUES (),(),(),();
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM t1;
+----+
| a |
+----+
| 1 |
| 4 |
| 7 |
| 10 |
+----+
4 rows in set (0.00 sec)
自動コミット
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - 明示的なトランザクションにないときにステートメントを自動的にコミットするかどうかを制御します。詳細については、トランザクション概要参照してください。
ブロック暗号化モード
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
aes-128-ecb aes-256-ecbaes-192-cbcaes-128-cbcaes-128-ecbaes-192-ecbaes-256-cbcaes-128-ofbaes-192-ofbaes-256-ofbaes-128-cfbaes-192-cfbaes-256-cfb- この変数は、組み込み関数
AES_ENCRYPT()およびAES_DECRYPT()の暗号化モードを設定します。
文字セットクライアント
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4 - クライアントから送信されるデータの文字セット。 TiDB での文字セットと照合順序の使用の詳細については、文字セットと照合を参照してください。必要に応じて、
SET NAMESを使用して文字セットを変更することをお勧めします。
文字セット接続
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4 - 文字セットが指定されていない文字列リテラルに使用される文字セット。
文字セットデータベース
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4 - この変数は、現在使用されているデフォルトデータベースの文字セットを示します。この変数を設定することは推奨されません。新しいデフォルトデータベースが選択されると、サーバーはこの変数の値を変更します。
文字セット結果
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4 - クライアントにデータを送信する際に使用される文字セット。
文字セットサーバー
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4 - サーバーのデフォルトの文字セット。
照合接続
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4_bin - この変数は、現在の接続で使用されている照合順序を示します。これは、MySQL 変数
collation_connectionと一致します。
照合データベース
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4_bin - この変数は、使用中のデータベースのデフォルトの照合照合順序を示します。この変数を設定することは推奨されません。新しいデータベースが選択されると、TiDBはこの変数の値を変更します。
照合サーバー
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
utf8mb4_bin - データベース作成時にデフォルトで使用される照合照合順序。
cte_max_recursion_depth
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
1000 - 範囲:
[0, 4294967295] - 共通テーブル式における最大再帰深度を制御します。
データディレクトリ
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialではサポートされていません。
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値:コンポーネントとデプロイ方法によって異なります。
/tmp/tidb:--storeに"unistore"設定した場合、または--store設定しなかった場合。${pd-ip}:${pd-port}: TiKV を使用する場合。TiKV は、Kubernetes デプロイメント用のTiUPおよびTiDB Operator のデフォルトのstorageエンジンです。
- この変数は、データが保存されている場所を示します。この場所は、ローカルパス
/tmp/tidbを指定することも、データがTiKVに保存されている場合はPDサーバーを指すこともできます。3の形式の値は${pd-ip}:${pd-port}TiDBが起動時に接続するPDサーバーを示します。
ddl_slow_threshold
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
300 - 範囲:
[0, 2147483647] - 単位:ミリ秒
- 実行時間がしきい値を超えたDDL操作をログに記録する。
デフォルト認証プラグイン
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
mysql_native_password authentication_ldap_simpletidb_auth_tokencaching_sha2_passwordtidb_sm3_passwordmysql_native_passwordauthentication_ldap_sasl- この変数は、サーバーとクライアント間の接続が確立される際にサーバーが通知する認証方法を設定します。
tidb_sm3_password方法で認証するには、 TiDB-JDBCを使用してTiDBに接続できます。
この変数の可能な値の詳細については、 認証プラグインの状態を参照してください。
default_collation_for_utf8mb4 v7.4.0で追加
- 範囲:グローバル | セッション
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値:
utf8mb4_bin utf8mb4_0900_ai_ciutf8mb4_general_ci:utf8mb4_bin- この変数は、
utf8mb4文字セットのデフォルト照合順序を設定するために使用されます。これは、以下のステートメントの動作に影響します。SHOW COLLATIONおよびSHOW CHARACTER SETステートメントに表示されるデフォルトの照合順序。CREATE TABLEおよびALTER TABLEステートメントで、テーブルまたは列に対してCHARACTER SET utf8mb4句が指定されているにもかかわらず照合順序が指定されていない場合、この変数で指定された照合順序が使用されます。これは、CHARACTER SET句が使用されていない場合の動作には影響しません。CREATE DATABASEおよびALTER DATABASEステートメントに、照合順序を指定しないCHARACTER SET utf8mb4句が含まれている場合、この変数で指定された照合順序が使用されます。これは、CHARACTER SET句を使用しない場合の動作には影響しません。COLLATE句が使用されない場合、_utf8mb4'string'の形式のリテラル文字列はすべて、この変数で指定された照合順序を使用します。
default_password_lifetime v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 65535] - パスワードの自動有効期限に関するグローバルポリシーを設定します。デフォルト値の
0パスワードの有効期限がないことを示します。このシステム変数を正の整数Nに設定すると、パスワードの有効期間はN日間となり、N日以内にパスワードを変更する必要があります。
デフォルトの週フォーマット
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 7] WEEK()関数で使用される週の形式を設定します。
パスワード期限切れ時の切断機能(v6.5.0 で追加)
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は読み取り専用です。パスワードの有効期限が切れたときに、TiDBがクライアント接続を切断するかどうかを示します。変数が
ONに設定されている場合、パスワードの有効期限が切れるとクライアント接続が切断されます。変数がOFFに設定されている場合、クライアント接続は「サンドボックスモード」に制限され、ユーザーはパスワードリセット操作のみを実行できます。
- パスワードの有効期限切れ時のクライアント接続の動作を変更する必要がある場合は、設定ファイル内の
security.disconnect-on-expired-password設定項目を変更してください。
div_precision_increment v8.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
4 - 範囲:
[0, 30] - この変数は、演算子
/を使用して実行される除算演算の結果の桁数を増やすための桁数を指定します。この変数はMySQLと同じです。
エラー数
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - メッセージを生成した最後のステートメントによって発生したエラーの数を示す読み取り専用変数。
外部キーチェック
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:v6.6.0より前のバージョンではデフォルト値は
OFFです。v6.6.0以降ではデフォルト値はONです。 - この変数は、外部キー制約チェックを有効にするかどうかを制御します。
グループ連結最大長さ
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1024 - 範囲:
[4, 18446744073709551615] GROUP_CONCAT()関数内の項目の最大バッファサイズ。
have_openssl
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
DISABLED - MySQLとの互換性を確保するための読み取り専用変数。サーバーがTLSを有効にしている場合、サーバーによって
YESに設定されます。
have_sl
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
DISABLED - MySQLとの互換性を確保するための読み取り専用変数。サーバーがTLSを有効にしている場合、サーバーによって
YESに設定されます。
ホスト名
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: (システムホスト名)
- TiDBサーバーのホスト名を読み取り専用変数として指定します。
アイデンティティv5.3.0の新機能
この変数はlast_insert_idの別名です。
init_connect
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
init_connect機能を使用すると、TiDBサーバーに初めて接続したときにSQLステートメントが自動的に実行されます。3CONNECTION_ADMINまたはSUPER権限を持っている場合、このinit_connectステートメントは実行されません。9init_connectのステートメントでエラーが発生した場合、ユーザー接続は終了します。
innodb_lock_wait_timeout
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
50 - 範囲:
[1, 3600] - 単位:秒
- 悲観的トランザクションのロック待機タイムアウト(デフォルト)。
インタラクティブタイムアウト
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
28800 - 範囲:
[1, 31536000] - 単位:秒
- この変数は、対話型ユーザーセッションのアイドルタイムアウトを表します。対話型ユーザーセッションとは
mysql_real_connect()API をオプションCLIENT_INTERACTIVEを使用して呼び出すことで確立されるセッション(例えば、MySQL Shell や MySQL Client)を指します。この変数は MySQL と完全に互換性があります。
最後の挿入ID
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 18446744073709551615] - この変数は、INSERT文によって生成された最後の
AUTO_INCREMENTまたはAUTO_RANDOM値を返します。 last_insert_idの値は、関数LAST_INSERT_ID()によって返される値と同じです。
last_plan_from_binding v4.0の新機能
last_plan_from_cache v4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- この変数は、前のステートメント
executeで使用された実行プランがプランキャッシュから直接取得されたものかどうかを示すために使用されます。
last_sql_use_alloc v6.4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- この変数は読み取り専用です。前のステートメントがキャッシュされたチャンクオブジェクト(チャンク割り当て)を使用しているかどうかを示すために使用されます。
ライセンス
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値:
Apache License 2.0 - この変数は、TiDBサーバーのインストールにおけるライセンスを示します。
max_allowed_pa cket v6.1.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
67108864 - 範囲:
[1024, 1073741824] - 値は1024の整数倍である必要があります。値が1024で割り切れない場合は、警告が表示され、値は切り捨てられます。たとえば、値を1025に設定した場合、TiDBでの実際の値は1024になります。
- サーバーとクライアントが1回のパケット送信で許容する最大パケットサイズ。
- スコープ
SESSIONでは、この変数は読み取り専用です。 - この変数はMySQLと互換性があります。
password_history v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 4294967295] - この変数は、パスワード変更回数に基づいてパスワードの再利用を制限するTiDBのパスワード再利用ポリシーを設定するために使用されます。デフォルト値の
0、パスワード変更回数に基づくパスワード再利用ポリシーを無効にすることを意味します。この変数を正の整数Nに設定すると、過去Nパスワードの再利用は許可されません。
mpp_exchange_compression_mode v6.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
UNSPECIFIED UNSPECIFIEDFASTHIGH_COMPRESSIONNONE- この変数は、MPP Exchange オペレータのデータ圧縮モードを指定するために使用されます。この変数は、TiDB がバージョン番号
1の MPP 実行プランを選択した場合に有効になります。変数の値の意味は次のとおりです。UNSPECIFIED:未指定を意味します。TiDBは圧縮モードを自動的に選択します。現在、TiDBは自動的にモードFASTを選択します。NONE:データ圧縮は使用されません。FAST:高速モード。全体的なパフォーマンスは良好で、圧縮率はHIGH_COMPRESSION未満です。HIGH_COMPRESSION:高圧縮比モード。
mpp_version v6.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
UNSPECIFIED 201UNSPECIFIED- この変数は、MPP実行プランの異なるバージョンを指定するために使用されます。バージョンが指定されると、TiDBは指定されたバージョンのMPP実行プランを選択します。変数の値の意味は次のとおりです。
UNSPECIFIED: 未指定を意味します。TiDB は自動的に最新バージョン2を選択します。0:すべてのTiDBクラスタバージョンと互換性があります。MPPバージョンが0より大きい機能は、このモードでは有効になりません。1: v6.6.0 の新機能。 TiFlashでの圧縮によるデータ交換を有効にするために使用されます。詳細については、 MPPバージョンとデータ圧縮の交換を参照してください。2: v7.3.0 で新しく追加され、 TiFlash上で MPP タスクがエラーに遭遇したときに、より正確なエラー メッセージを提供するために使用されます。
password_reuse_interval はv6.5.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 4294967295] - この変数は、TiDBが経過時間に基づいてパスワードの再利用を制限できるようにするパスワード再利用ポリシーを設定するために使用されます。デフォルト値の
0経過時間に基づくパスワード再利用ポリシーを無効にすることを意味します。この変数を正の整数Nに設定すると、過去N日間に使用されたパスワードの再利用は許可されません。
最大接続数
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 100000] - 単一のTiDBインスタンスで許可される同時接続の最大数。この変数はリソース制御に使用できます。
- デフォルト値の
0は制限なしを意味します。この変数の値が0より大きく、接続数がその値に達すると、TiDBサーバーはクライアントからの新規接続を拒否します。
最大実行時間
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - 単位:ミリ秒
- ステートメントの最大実行時間。デフォルト値は無制限(ゼロ)です。
注記:
バージョン6.4.0より前は、システム変数
max_execution_timeすべての種類のステートメントに適用されていました。バージョン6.4.0以降では、この変数はSELECTステートメントの最大実行時間のみを制御します。タイムアウト値の精度は約100ミリ秒です。つまり、指定したミリ秒数でステートメントが正確に終了しない可能性があります。
MAX_EXECUTION_TIMEヒントを指定したSQL文の場合、この文の最大実行時間は、この変数ではなくヒントによって制限されます。ヒントはSQL FAQにて記載されているように、SQLバインディングでも使用できます。
max_prepared_stmt_count
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 1048576] - 現在のTiDBインスタンスにおける
PREPAREステートメントの最大数を指定します。 - 値が
-1の場合、現在のTiDBインスタンスにおける最大PREPAREのステートメント数に制限はありません。 - 変数に上限値
1048576を超える値を設定すると、代わりに1048576使用されます。
mysql> SET GLOBAL max_prepared_stmt_count = 1048577;
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------+
| Warning | 1292 | Truncated incorrect max_prepared_stmt_count value: '1048577' |
+---------+------+--------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| max_prepared_stmt_count | 1048576 |
+-------------------------+---------+
1 row in set (0.00 sec)
pd_enable_follower_handle_region v7.6.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、アクティブPDFollower機能を有効にするかどうかを制御します(現在はリージョン情報の要求にのみ適用されます)。値が
OFFの場合、TiDBはPDリーダーからのみリージョン情報を取得します。値がONの場合、TiDBはリージョン情報の要求をすべてのPDサーバーに均等に分散し、PDフォロワーもリージョン要求を処理できるため、PDリーダーのCPU負荷が軽減されます。 - アクティブPDFollowerを有効にするシナリオ:
- リージョン数が多いクラスタでは、ハートビートの処理やタスクのスケジューリングに伴うオーバーヘッドが増加するため、PDリーダーのCPU負荷が高くなります。
- TiDBインスタンスが多数存在するTiDBクラスタでは、リージョン情報に対する要求の同時発生率が高いため、PDリーダーに高いCPU負荷がかかります。
プラグインディレクトリ
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialではサポートされていません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- コマンドラインフラグで指定されたプラグインをロードするディレクトリを示します。
プラグインロード
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialではサポートされていません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- TiDB起動時にロードするプラグインを指定します。これらのプラグインはコマンドラインフラグで指定し、カンマで区切ります。
ポート
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4000 - 範囲:
[0, 65535] tidb-serverMySQL プロトコルで通信する際にリッスンしているポート。
rand_seed1
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - この変数は、
RAND()SQL関数で使用される乱数生成器のシード値として使用されます。 - この変数の動作はMySQLと互換性があります。
rand_seed2
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - この変数は、
RAND()SQL関数で使用される乱数生成器のシード値として使用されます。 - この変数の動作はMySQLと互換性があります。
require_secure_transport v6.1.0で追加
注記:
現在、この変数はTiDB Cloud Dedicatedではサポートされていません。TiDB TiDB Cloud Dedicatedクラスターでは、この変数を有効にしないでください。有効にすると、SQL クライアントの接続エラーが発生する可能性があります。この制限は一時的な対策であり、今後のリリースで解消される予定です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
OFF、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合はON
- この変数により、TiDB へのすべての接続がローカル ソケット上か TLS を使用するようになります。詳細については、 TiDBクライアントとサーバー間でTLSを有効にする参照してください。
- この変数を
ONに設定するには、TLSが有効になっているセッションからTiDBに接続する必要があります。これにより、TLSが正しく設定されていない場合に発生するロックアウトを防ぐことができます。 - この設定は以前はオプション
tidb.toml(security.require-secure-transport)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。 - バージョン6.5.6、7.1.2、7.5.1、および8.0.0以降では、Security強化モード(SEM)が有効になっている場合、ユーザーの接続に関する潜在的な問題を回避するため、この変数を
ONに設定することは禁止されています。
skip_name_resolve v5.2.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、インスタンス
tidb-serverが接続ハンドシェイクの一部としてホスト名を解決するかどうかを制御します。 - DNSが不安定な場合、このオプションを有効にすることでネットワークパフォーマンスを向上させることができます。
注記:
skip_name_resolve=ONの場合、ホスト名を ID に含むユーザーはサーバーにログインできなくなります。例:CREATE USER 'appuser'@'apphost' IDENTIFIED BY 'app-password';この例では、
apphostIP アドレスまたはワイルドカード (%) に置き換えることをお勧めします。
ソケット
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
tidb-serverMySQLプロトコルで通信する際にリッスンしているローカルUnixソケットファイル。
sql_mode
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION - この変数は、MySQLとの互換性に関する様々な動作を制御します。詳細については、 SQLモードを参照してください。
sql_require_primary_keyは v6.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、テーブルに主キーが必要であるという要件を強制するかどうかを制御します。この変数を有効にすると、主キーのないテーブルを作成または変更しようとするとエラーが発生します。
- この機能は、MySQL 8.0 の同名の
sql_require_primary_keyに基づいています。 - TiCDCを使用する際は、この変数を有効にすることを強くお勧めします。これは、MySQLシンクへの変更のレプリケートには、テーブルに主キーが必要となるためです。
- この変数を有効にし、TiDB Data Migration (DM) を使用してデータを移行している場合は、 DMタスクコンフィグレーションファイルの
session部分にsql_require_ primary_key追加してOFFに設定することをお勧めします。そうしないと、DM がタスクを作成できなくなります。
sql_select_limit はv4.0.2 で追加されました
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
18446744073709551615 - 範囲:
[0, 18446744073709551615] - 単位:行
SELECTステートメントによって返される行の最大数。
ssl_ca
SSL証明書
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- SSL/TLS接続に使用される証明書ファイルの場所(ファイルが存在する場合)。この変数の値は、TiDB構成項目
ssl-certによって定義されます。
SSLキー
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- SSL/TLS接続に使用される秘密鍵ファイル(存在する場合)の場所。この変数の値は、TiDB構成項目
ssl-keyによって定義されます。
システムタイムゾーン
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値:(システム依存)
- この変数は、TiDBが最初にブートストラップされた時点のシステムタイムゾーンを示します
time_zoneも参照してください。
tidb_adaptive_closest_read_threshold はv6.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4096 - 範囲:
[0, 9223372036854775807] - 単位:バイト
- この変数は、
tidb_replica_readがclosest-adaptiveに設定されている場合に、TiDBサーバーが読み取りリクエストを TiDBサーバーと同じ可用性ゾーンにあるレプリカに送信することを優先するしきい値を制御するために使用されます。推定結果がこのしきい値以上の場合、TiDB は同じ可用性ゾーンにあるレプリカに読み取りリクエストを送信することを優先します。それ以外の場合は、TiDB はリーダーレプリカに読み取りリクエストを送信します。
tidb_advancer_check_point_lag_limit はv8.5.5 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ:期間
- デフォルト値:
48h0m0s - 範囲:
[1s, 8760h0m0s] - この変数は、ログバックアップタスクで許容される最大チェックポイント遅延を制御します。タスクのチェックポイント遅延がこの制限を超えると、TiDB Advancer はタスクを一時停止します。
tidb_allow_tiflash_cop v7.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - TiDBが計算タスクをTiFlashにプッシュダウンする場合、Cop、BatchCop、MPPの3つの方法(プロトコル)から選択できます。CopおよびBatchCopと比較して、MPPプロトコルはより成熟しており、タスクおよびリソース管理において優れています。そのため、MPPプロトコルの使用をお勧めします。
0またはOFF:オプティマイザはTiFlash MPPプロトコルを使用したプランのみを生成します。1またはON:オプティマイザは、コスト見積もりに基づいて実行プランを生成するために、Cop、BatchCop、またはMPPプロトコルを使用するかどうかを決定します。
tidb_allow_batch_cop v4.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
型: 整数
デフォルト値:
1範囲:
[0, 2]この変数は、TiDBがTiFlashにコプロセッサ要求を送信する方法を制御するために使用されます。この変数には以下の値があります。
0:リクエストをバッチで送信しないでください1:集計および結合リクエストはバッチで送信されます2:すべてのコプロセッサ要求はバッチで送信されます
tidb_allow_fallback_to_tikv v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値: ""
- この変数は、TiKV にフォールバックする可能性のあるstorageエンジンのリストを指定するために使用されます。リストで指定されたstorageエンジンの障害により SQL ステートメントの実行が失敗した場合、TiDB は TiKV を使用してこの SQL ステートメントの実行を再試行します。この変数は "" または "tiflash" に設定できます。この変数が "tiflash" に設定されている場合、 TiFlash がタイムアウト エラー (エラー コード: ErrTiFlashServerTimeout) を返すと、TiDB は TiKV を使用してこの SQL ステートメントの実行を再試行します。
tidb_allow_function_for_expression_index v5.2.0で追加
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値:
json_array, json_array_append, json_array_insert, json_contains, json_contains_path, json_depth, json_extract, json_insert, json_keys, json_length, json_merge_patch, json_merge_preserve, json_object, json_pretty, json_quote, json_remove, json_replace, json_schema_valid, json_search, json_set, json_storage_size, json_type, json_unquote, json_valid, lower, md5, reverse, tidb_shard, upper, vitess_hash - この読み取り専用変数は、 発現指数を作成するために使用できる関数を表示するために使用されます。
tidb_allow_mpp v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - TiFlashのMPPモードを使用してクエリを実行するかどうかを制御します。値のオプションは以下のとおりです。
0またはOFF指定すると、MPPモードは使用されません。v7.3.0以降のバージョンでは、この変数の値を0またはOFFに設定する場合は、tidb_allow_tiflash_cop変数も有効にする必要があります。そうしないと、クエリでエラーが発生する可能性があります。1またはON場合、オプティマイザはコスト見積もりに基づいてMPPモードを使用するかどうかを決定します(デフォルト)。
MPP は、 TiFlashエンジンによって提供される分散コンピューティング フレームワークであり、ノード間のデータ交換を可能にし、高性能、高スループットの SQL アルゴリズムを提供します。 MPPモードの選択の詳細については、 MPPモードを選択するかどうかを制御する。
tidb_allow_remove_auto_inc はv2.1.18 および v3.0.4 で追加されました。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、列の
AUTO_INCREMENTのプロパティをALTER TABLE MODIFYまたはALTER TABLE CHANGEステートメントを実行することで削除できるかどうかを設定するために使用されます。デフォルトでは許可されていません。
tidb_analyze_column_options はv8.3.0 で追加されました。
注記:
- この変数は、
tidb_analyze_versionが2に設定されている場合にのみ機能します。- TiDBクラスタをv8.3.0より前のバージョンからv8.3.0以降にアップグレードする場合、元の動作を維持するために、この変数はデフォルトで
ALLに設定されます。- バージョン8.3.0から8.5.4までの新規デプロイされたTiDBクラスタの場合、この変数はデフォルトで
PREDICATEに設定されます。- バージョン8.5.5以降に新規にデプロイされたTiDBクラスタの場合、この変数はデフォルトで
ALLに設定されます。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
ALL PREDICATEオプション:ALL- この変数は、
ANALYZE TABLEステートメントの動作を制御しますPREDICATEに設定すると、 述語列の統計情報のみが収集されますALLに設定すると、すべての列の統計情報が収集されます。OLAP クエリを使用するシナリオでは、ALLに設定することをお勧めします。そうしないと、統計情報の収集によってクエリのパフォーマンスが著しく低下する可能性があります。
tidb_analyze_distsql_scan_concurrency v7.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4 - 範囲:
[0, 4294967295]より前のバージョンでは、最小値は1です0に設定すると、クラスタサイズに基づいて同時実行数が適応的に調整されます。 - この変数は、操作
ANALYZEを実行する際に、操作scanの同時実行数を設定するために使用されます。
tidb_analyze_partition_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
2以前のバージョンではデフォルト値は1です。 - 範囲:
[1, 128]より前は、値の範囲は[1, 18446744073709551615]です。 - この変数は、TiDB がパーティションテーブルを分析する際に、収集された統計情報を書き込む際の同時実行数を指定します。
tidb_analyze_version v5.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
2 - 範囲:
[1, 2] - TiDBが統計情報を収集する方法を制御します。
- TiDB Self-Managedの場合、この変数のデフォルト値はv5.3.0以降、
1から2に変更されます。 - TiDB Cloudの場合、この変数のデフォルト値はv6.5.0以降、
1から2に変更されます。 - クラスターを以前のバージョンからアップグレードした場合、デフォルト値の
tidb_analyze_versionはアップグレード後も変更されません。
- TiDB Self-Managedの場合、この変数のデフォルト値はv5.3.0以降、
- この変数の詳細については、統計入門参照してください。
tidb_analyze_skip_column_types はv7.2.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値: 「json、blob、mediumblob、longblob、mediumtext、longtext」。 v8.2.0 より前のデフォルト値は「json,blob,mediumblob,longblob」です。
- 指定可能な値: "json,blob,mediumblob,longblob,text,mediumtext,longtext"
- この変数は、統計情報を収集するコマンド
ANALYZEを実行する際に、統計情報の収集対象から除外する列の種類を制御します。この変数はtidb_analyze_version = 2にのみ適用されます。5ANALYZE TABLE t COLUMNS c1, ... , cn使用して列を指定した場合でも、その列の型がtidb_analyze_skip_column_typesに含まれる場合は、指定された列の統計情報は収集されません。
mysql> SHOW CREATE TABLE t;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t | CREATE TABLE `t` (
`a` int DEFAULT NULL,
`b` varchar(10) DEFAULT NULL,
`c` json DEFAULT NULL,
`d` blob DEFAULT NULL,
`e` longblob DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT @@tidb_analyze_skip_column_types;
+----------------------------------+
| @@tidb_analyze_skip_column_types |
+----------------------------------+
| json,blob,mediumblob,longblob |
+----------------------------------+
1 row in set (0.00 sec)
mysql> ANALYZE TABLE t;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
+---------------------------------------------------------------------+
| job_info |
+---------------------------------------------------------------------+
| analyze table columns a, b with 256 buckets, 500 topn, 1 samplerate |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ANALYZE TABLE t COLUMNS a, c;
Query OK, 0 rows affected, 1 warning (0.04 sec)
mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
+------------------------------------------------------------------+
| job_info |
+------------------------------------------------------------------+
| analyze table columns a with 256 buckets, 500 topn, 1 samplerate |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
tidb_auto_analyze_concurrency v8.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 2147483647] - この変数は、TiDBクラスタで同時に実行できる自動分析操作の数を制御します。v8.4.0より前のバージョンでは、この同時実行数は1に固定されていました。統計情報の収集タスクを高速化するには、クラスタで使用可能なリソースに基づいてこの同時実行数を増やすことができます。
tidb_auto_analyze_end_time
対象範囲:グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: 時間
デフォルト値:
23:59 +0000この変数は、統計情報の自動更新が許可される時間帯を制限するために使用されます。たとえば、UTC時間で午前1時から午前3時の間のみ統計情報の自動更新を許可するには、次のように時間を設定します。
tidb_auto_analyze_start_time='01:00 +0000'tidb_auto_analyze_end_time='03:00 +0000'
パラメータ内の時刻にタイムゾーン情報が含まれている場合、そのタイムゾーンが解析に使用されます。含まれていない場合は、現在のセッションで「
time_zoneによって指定されたタイムゾーンが使用されます。例えば、01:00 +0000はUTCの午前1時を表します。
tidb_auto_analyze_partition_batch_size はv6.4.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
8192より前のバージョンでは、デフォルト値は1です。v7.6.0 から v8.1.x までのバージョンでは、デフォルト値は128です。v8.2.0 以降では、デフォルト値は8192に変更されます。 - 範囲:
[1, 8192]より前は、値の範囲は[1, 1024]です。 - この変数は、パーティションテーブルを分析するときに TiDB が自動的に分析しますパーティションの数を指定します (つまり、パーティションテーブルに関する統計を自動的に収集します)。
- この変数の値がパーティション数より小さい場合、TiDB はパーティションテーブルのすべてのパーティションを複数回に分けて自動的に分析します。この変数の値がパーティション数以上の場合、TiDB はパーティションテーブルのすべてのパーティションを同時に分析します。
- パーティションテーブルのパーティション数がこの変数の値よりもはるかに多く、自動分析に時間がかかる場合は、この変数の値を増やすことで処理時間を短縮できます。
tidb_auto_analyze_ratio
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0.5 - 範囲:
(0, 1]以前のバージョンの範囲は[0, 18446744073709551615]です。 - この変数は、TiDB がバックグラウンド スレッドで
ANALYZE TABLE自動的に実行してテーブル統計を更新する際のしきい値を設定するために使用されます。たとえば、値が 0.5 の場合、テーブル内の行の 50% 以上が変更されたときに自動分析がトリガーされます。自動分析は、tidb_auto_analyze_start_timeとtidb_auto_analyze_end_time指定することで、特定の時間帯のみ実行するように制限できます。
注記:
この機能を使用するには、システム変数
tidb_enable_auto_analyzeONに設定する必要があります。
tidb_auto_analyze_start_time
対象範囲:グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: 時間
デフォルト値:
00:00 +0000この変数は、統計情報の自動更新が許可される時間帯を制限するために使用されます。たとえば、UTC時間で午前1時から午前3時の間のみ統計情報の自動更新を許可するには、次のように時間を設定します。
tidb_auto_analyze_start_time='01:00 +0000'tidb_auto_analyze_end_time='03:00 +0000'
パラメータ内の時刻にタイムゾーン情報が含まれている場合、そのタイムゾーンが解析に使用されます。含まれていない場合は、現在のセッションで「
time_zoneによって指定されたタイムゾーンが使用されます。例えば、01:00 +0000はUTCの午前1時を表します。
tidb_auto_build_stats_concurrency v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 256] - この変数は、統計情報の自動更新を実行する際の同時実行数を設定するために使用されます。
tidb_backoff_lock_fast
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
10 - 範囲:
[1, 2147483647] - この変数は、読み取り要求がロックに遭遇する
backoffタイミングを設定するために使用されます。
tidb_backoff_weight
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
型: 整数
デフォルト値:
2範囲:
[0, 2147483647]この変数は、TiDB
backoffの最大再試行待機時間の重みを増やすために使用されます。つまり、内部ネットワークまたはその他のコンポーネント(TiKV、PD) の障害が発生した場合に再試行要求を送信する際の最大再試行待機時間です。この変数を使用して最大再試行待機時間を調整でき、最小値は1です。例えば、TiDB が TiKV から KV を取得する際の基本再試行待機時間は 15 秒です。 が
tidb_backoff_weight = 2場合、KV を取得する際の最大再試行待機時間は、基本時間 2 = 30 秒*となります。ネットワーク環境が悪い場合、この変数の値を適切に増やすことで、タイムアウトによってアプリケーション側に発生するエラー報告を効果的に軽減できます。アプリケーション側でエラー情報をより迅速に受信したい場合は、この変数の値を最小化してください。
注記:
このシステム変数は、TSOリクエストを非同期で取得する場合に適用されません。TSO取得のタイムアウトを調整するには、
pd-server-timeout設定項目を設定してください。
tidb_batch_commit
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非推奨のバッチコミット機能を有効にするかどうかを制御するために使用されます。この変数を有効にすると、トランザクションが複数のトランザクションに分割され、いくつかのステートメントがグループ化されて非アトミックにコミットされる可能性がありますが、これは推奨されません。
tidb_batch_delete
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非推奨のバッチ DML 機能の一部であるバッチ削除機能を有効にするかどうかを制御するために使用されます。この変数を有効にすると、
DELETEステートメントが複数のトランザクションに分割され、非アトミックにコミットされる可能性があります。これを機能させるには、tidb_enable_batch_dml有効にし、tidb_dml_batch_sizeに正の値を設定する必要がありますが、これは推奨されません。
tidb_batch_insert
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非推奨のバッチ DML 機能の一部であるバッチ挿入機能を有効にするかどうかを制御するために使用されます。この変数を有効にすると、
INSERTステートメントが複数のトランザクションに分割され、非アトミックにコミットされる可能性があります。これを機能させるには、tidb_enable_batch_dml有効にし、tidb_dml_batch_sizeに正の値を設定する必要がありますが、これは推奨されません。
tidb_batch_pending_tiflash_count v6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4000 - 範囲:
[0, 4294967295] - TiFlashレプリカを追加する際に
ALTER DATABASE SET TIFLASH REPLICAを指定する場合、許可される使用不可テーブルの最大数を指定します。使用不可テーブルの数がこの制限を超えると、操作が停止するか、残りのテーブルのTiFlashレプリカの設定が非常に遅くなります。
tidb_broadcast_join_threshold_count v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
10240 - 範囲:
[0, 9223372036854775807] - 単位:行
- 結合操作の対象がサブクエリに属する場合、オプティマイザはサブクエリの結果セットのサイズを推定できません。この場合、サイズは結果セットの行数によって決定されます。サブクエリの推定行数がこの変数の値より少ない場合は、ブロードキャストハッシュ結合アルゴリズムが使用されます。そうでない場合は、シャッフルハッシュ結合アルゴリズムが使用されます。
- この変数は、
tidb_prefer_broadcast_join_by_exchange_data_sizeが有効になった後は効果を発揮しません。
tidb_broadcast_join_threshold_size v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
104857600(100 MiB) - 範囲:
[0, 9223372036854775807] - 単位:バイト
- テーブルサイズが変数の値より小さい場合は、ブロードキャストハッシュ結合アルゴリズムが使用されます。それ以外の場合は、シャッフルハッシュ結合アルゴリズムが使用されます。
- この変数は、
tidb_prefer_broadcast_join_by_exchange_data_sizeが有効になった後は効果を発揮しません。
tidb_build_stats_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
2以前のバージョンではデフォルト値は4です。 - 範囲:
[1, 256] - 単位:糸
- この変数は、
ANALYZEステートメントの実行の同時実行数を設定するために使用されます。 - 変数をより大きな値に設定すると、他のクエリの実行パフォーマンスに影響が出ます。
tidb_build_sampling_stats_concurrency はv7.5.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- 単位:糸
- デフォルト値:
2 - 範囲:
[1, 256] - この変数は、
ANALYZEプロセスにおけるサンプリングの同時実行数を設定するために使用されます。 - 変数をより大きな値に設定すると、他のクエリの実行パフォーマンスに影響が出ます。
tidb_capture_plan_baselines v4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、 ベースラインの取得機能を有効にするかどうかを制御するために使用されます。この機能はステートメントサマリーに依存するため、ベースラインキャプチャを使用する前にステートメントサマリーを有効にする必要があります。
- この機能を有効にすると、ステートメントサマリー内の過去のSQLステートメントが定期的に走査され、少なくとも2回出現するSQLステートメントに対してバインディングが自動的に作成されます。
tidb_cdc_write_source v6.5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション
- クラスターに保持される: いいえ
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 15] - この変数に0以外の値が設定されている場合、このセッションで書き込まれたデータはTiCDCによって書き込まれたものとみなされます。この変数はTiCDCのみが変更できます。いかなる場合でも、この変数を手動で変更しないでください。
tidb_check_mb4_value_in_utf8
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、
utf8文字セットが基本多言語平面(BMP)の値のみを格納するように強制するために使用されます。BMP以外の文字を格納するには、utf8mb4文字セットを使用することをお勧めします。 utf8チェックがより緩和されていた以前のバージョンの TiDB からクラスターをアップグレードする場合は、このオプションを無効にする必要がある場合があります。詳細については、 アップグレード後のよくある質問を参照してください。
tidb_checksum_table_concurrency
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4 - 範囲:
[1, 256] - 単位:糸
- この変数は、
ADMIN CHECKSUM TABLEステートメントを実行する際のスキャン インデックスの同時実行数を設定するために使用されます。 - 変数をより大きな値に設定すると、他のクエリの実行パフォーマンスに影響が出ます。
tidb_committer_concurrency v6.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
128 - 範囲:
[1, 10000] - 単一トランザクションのコミットフェーズにおけるコミット実行に関連するリクエストのためのゴルーチンの数。
- コミットするトランザクションが大きすぎる場合、トランザクションがコミットされる際のフロー制御キューの待機時間が長くなる可能性があります。このような場合は、設定値を増やすことでコミットを高速化できます。
- この設定は以前はオプション
tidb.toml(performance.committer-concurrency)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_config
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- この変数は読み取り専用です。現在のTiDBサーバーの構成情報を取得するために使用されます。
tidb_constraint_check_in_place
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: ブール値
デフォルト値:
OFFこの変数は楽観的トランザクションにのみ適用されます。悲観的トランザクションの場合は、代わりに
tidb_constraint_check_in_place_pessimisticを使用してください。この変数を
OFFに設定すると、一意インデックス内の重複値のチェックはトランザクションがコミットされるまで延期されます。これによりパフォーマンスが向上しますが、一部のアプリケーションでは予期しない動作となる可能性があります。詳細については、制約参照してください。tidb_constraint_check_in_place~OFFに設定し、楽観的トランザクションを使用する場合:tidb> create table t (i int key); tidb> insert into t values (1); tidb> begin optimistic; tidb> insert into t values (1); Query OK, 1 row affected tidb> commit; -- Check only when a transaction is committed. ERROR 1062 : Duplicate entry '1' for key 't.PRIMARY'tidb_constraint_check_in_place~ONに設定し、楽観的トランザクションを使用する場合:tidb> set @@tidb_constraint_check_in_place=ON; tidb> begin optimistic; tidb> insert into t values (1); ERROR 1062 : Duplicate entry '1' for key 't.PRIMARY'
tidb_constraint_check_in_place_pessimistic v6.3.0 で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値: デフォルトでは、
pessimistic-txn.constraint-check-in-place-pessimistic設定項目はtrueなので、この変数のデフォルト値はONです。pessimisticpessimistic-txn.constraint-check-in-place-pessimisticがfalseに設定されている場合、この変数のデフォルト値はOFFです。
この変数は悲観的トランザクションにのみ適用されます。楽観的トランザクションの場合は、代わりに
tidb_constraint_check_in_placeを使用してください。この変数を
OFFに設定すると、TiDB は一意インデックスの一意制約チェックを延期します (インデックスへのロックを必要とするステートメントを実行する次回のタイミング、またはトランザクションをコミットするタイミングまで)。これによりパフォーマンスが向上しますが、一部のアプリケーションでは予期しない動作となる可能性があります。 詳細は制約を参照してください。この変数を無効にすると、TiDB が悲観的トランザクションでエラー
LazyUniquenessCheckFailureを返す可能性があります。このエラーが発生すると、TiDB は現在のトランザクションをロールバックします。この変数が無効になっている場合、悲観的トランザクションで
SAVEPOINT使用することはできません。この変数が無効になっている場合、悲観的トランザクションをコミットすると、
Write conflictまたはDuplicate entryエラーが返される可能性があります。このようなエラーが発生した場合、TiDBは現在のトランザクションをロールバックします。tidb_constraint_check_in_place_pessimistic~OFFに設定し、悲観的取引を使用する場合:set @@tidb_constraint_check_in_place_pessimistic=OFF; create table t (i int key); insert into t values (1); begin pessimistic; insert into t values (1);Query OK, 1 row affectedtidb> commit; -- Check only when a transaction is committed.ERROR 1062 : Duplicate entry '1' for key 't.PRIMARY'tidb_constraint_check_in_place_pessimistic~ONに設定し、悲観的取引を使用する場合:set @@tidb_constraint_check_in_place_pessimistic=ON; begin pessimistic; insert into t values (1);ERROR 1062 : Duplicate entry '1' for key 't.PRIMARY'
tidb_cost_model_version v6.2.0で追加
注記:
- TiDB v6.5.0以降では、新しく作成されたクラスタはデフォルトでコストモデルバージョン2を使用します。TiDBバージョンをv6.5.0より前のバージョンからv6.5.0以降にアップグレードした場合、
tidb_cost_model_version値は変更されません。- コストモデルのバージョンを変更すると、クエリプランに変更が生じる可能性があります。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
2 - お得なオプション:
1:コストモデルバージョン1を有効にします。これはTiDB v6.4.0以前のバージョンでデフォルトで使用されます。2:コストモデル バージョン2を有効にします。これは TiDB v6.5.0 で一般提供されており、内部テストではバージョン 1 よりも正確です。
- コスト モデルのバージョンは、オプティマイザーの計画決定に影響します。詳細については、コストモデルを参照してください。
tidb_current_ts
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 9223372036854775807] - この変数は読み取り専用です。現在のトランザクションのタイムスタンプを取得するために使用されます。
tidb_ddl_disk_quota v6.3.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
107374182400(100 GiB) - 範囲:
[107374182400, 1125899906842624]([100 GiB、1 PiB]) - 単位:バイト
- この変数は、
tidb_ddl_enable_fast_reorgが有効になっている場合にのみ有効になります。インデックス作成時のバックフィル処理におけるローカルstorageの使用制限を設定します。
tidb_ddl_enable_fast_reorg はv6.3.0 で追加されました。
注記:
- TiDB Cloud Dedicatedクラスターを使用している場合、この変数を使用してインデックス作成の速度を向上させるには、TiDB クラスターが AWS 上でホストされていること、および TiDB ノードのサイズが少なくとも 8 vCPU であることを確認してください。
- 4 vCPUを搭載したTiDB Cloud Dedicatedクラスタの場合、インデックス作成中にリソース制限がクラスタの安定性に影響を与えないように、
tidb_ddl_enable_fast_reorg手動で無効にすることをお勧めします。この設定を無効にすることで、トランザクションを使用してインデックスを作成できるようになり、クラスタ全体への影響を軽減できます。- TiDB Cloud StarterおよびTiDB Cloud Essentialクラスタの場合、この変数は読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、インデックス作成時のバックフィル処理速度を向上させるために、
ADD INDEXとCREATE INDEXの高速化を有効にするかどうかを制御します。この変数の値をONに設定すると、大量のデータを含むテーブルのインデックス作成のパフォーマンスが向上します。 - バージョン7.1.0以降、インデックス高速化処理はチェックポイントをサポートしています。障害によりTiDBオーナーノードが再起動または変更された場合でも、TiDBは定期的に自動更新されるチェックポイントから処理の進行状況を回復できます。
- 完了した操作
ADD INDEXが高速化されたかどうかを確認するには、ADMIN SHOW DDL JOBSステートメントを実行して、JOB_TYPE列目にingest表示されているかどうかを確認します。
注記:
インデックスの高速化には、書き込み可能で十分な空き容量のある
temp-dirが必要です。一時ディレクトリtemp-dirが使用できない場合、TiDBは高速化されていないインデックス構築にフォールバックします。一時ディレクトリtemp-dirはSSDディスクに配置することをお勧めします。TiDBをv6.5.0以降にアップグレードする前に、TiDBの
temp-dirパスがSSDディスクに正しくマウントされているかどうかを確認することをお勧めします。TiDBを実行するオペレーティングシステムのユーザーが、このディレクトリへの読み取りおよび書き込み権限を持っていることを確認してください。そうでない場合、DDL操作で予期しない問題が発生する可能性があります。このパスはTiDBの設定項目であり、TiDBの再起動後に有効になります。したがって、アップグレード前にこの設定項目を設定しておくことで、再度再起動する必要がなくなります。
tidb_stats_update_during_ddl はv8.5.4 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
OFF - この変数は、DDL 埋め込み
ANALYZEを有効にするかどうかを制御します。有効にすると、新しいインデックスの作成 (ADD INDEX) または既存のインデックスの再編成 (MODIFY COLUMNおよびCHANGE COLUMN) を行う DDL ステートメントは、インデックスが表示される前に統計を自動的に収集します。詳細については、 DDLステートメントに埋め込まれたANALYZE参照してください。
tidb_enable_dist_task v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - この変数はTiDB分散実行フレームワーク(DXF)有効にするかどうかを制御するために使用されます。フレームワークが有効になると、DDLやインポートなどのDXFタスクは、クラスタ内の複数のTiDBノードによって分散的に実行および完了されます。
- TiDB v7.1.0以降、DXFはパーティションテーブルに対する
ADD INDEXステートメントの分散実行をサポートしています。 - TiDB v7.2.0以降、DXFはインポートジョブにおける
IMPORT INTOステートメントの分散実行をサポートしています。 - TiDB v8.1.0以降では、この変数はデフォルトで有効になっています。DXFが有効になっているクラスタをv8.1.0以降にアップグレードする場合は、アップグレード前にDXFを無効(
tidb_enable_dist_task~OFFに設定)にしてください。これにより、アップグレード中に発生するADD INDEX操作によるデータインデックスの不整合を回避できます。アップグレード後、DXFを手動で有効にすることができます。 - この変数は
tidb_ddl_distribute_reorgから名前が変更されました。
tidb_cloud_storage_uri v7.4.0で追加
注記:
現在、グローバルソートプロセスは、TiDBノードのコンピューティングリソースとメモリリソースを大量に消費します。ユーザー業務アプリケーションの実行中にオンラインでインデックスを追加するなどのシナリオでは、クラスタに新しいTiDBノードを追加し、これらのノードに対して
tidb_service_scope変数を設定し、これらのノードに接続してタスクを作成することをお勧めします。このようにして、分散フレームワークはタスクをこれらのノードにスケジュールし、ワークロードを他のTiDBノードから分離することで、ADD INDEXやIMPORT INTOなどのバックエンドタスクの実行がユーザー業務アプリケーションに与える影響を軽減します。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
"" - この変数は、グローバルソートを有効にするための Amazon S3 クラウドstorageURI を指定するために使用されます。 TiDB分散実行フレームワーク(DXF)を有効にすると、URI を構成し、storageへのアクセスに必要な権限を持つ適切なクラウドstorageパスを指すようにすることで、グローバル ソート機能を使用できるようになります。詳細については、 Amazon S3 URI形式を参照してください。
- 以下のステートメントでは、グローバルソート機能を使用できます。
ADD INDEX文。- インポートジョブ用の
IMPORT INTOステートメント。
tidb_ddl_error_count_limit
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
512 - 範囲:
[0, 9223372036854775807] - この変数は、DDL操作が失敗した場合の再試行回数を設定するために使用されます。再試行回数がパラメータ値を超えると、誤ったDDL操作はキャンセルされます。
tidb_ddl_flashback_concurrency v6.3.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
64 - 範囲:
[1, 256] - この変数は
FLASHBACK CLUSTERの同時実行を制御します。
tidb_ddl_reorg_batch_size
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
256 - 範囲:
[32, 10240] - 単位:行
- この変数は、DDL操作の第
re-organizeフェーズにおけるバッチサイズを設定するために使用されます。例えば、TiDBが第ADD INDEXフェーズを実行する際、インデックスデータはtidb_ddl_reorg_worker_cnt(数値)の同時実行ワーカーによってバックフィルされる必要があります。各ワーカーは、インデックスデータをバッチ単位でバックフィルします。tidb_ddl_enable_fast_reorgOFFに設定されている場合、ADD INDEXトランザクションとして実行されます。11ADD INDEX実行中に、対象列でUPDATEやREPLACEなどの更新操作が多数発生する場合、バッチサイズが大きいほどトランザクション競合が発生する可能性が高くなります。この場合、バッチサイズを小さい値に設定することをお勧めします。最小値は32です。- トランザクションの競合が存在しない場合、または
tidb_ddl_enable_fast_reorgONに設定されている場合は、バッチ サイズを大きな値に設定できます。これにより、データのバックフィルが高速になりますが、TiKV への書き込み圧力も増加します。適切なバッチ サイズについては、tidb_ddl_reorg_worker_cntの値も参照する必要があります。参考としてオンラインワークロードとADD INDEX操作に関する相互作用テスト参照してください。 - バージョン8.3.0以降、このパラメータはセッションレベルでサポートされています。グローバルレベルでパラメータを変更しても、現在実行中のDDLステートメントには影響しません。変更は、新規セッションで送信されるDDLにのみ適用されます。
- バージョン 8.5.0 以降では、
ADMIN ALTER DDL JOBS <job_id> BATCH_SIZE = <new_batch_size>;実行することで、実行中の DDL ジョブのこのパラメータを変更できます。TiDB バージョン 8.5.5 より前のバージョンでは、tidb_enable_dist_taskが有効になっている場合、ADD INDEXDDL に対してこの操作はサポートされていないことに注意してください。詳細については、ADMIN ALTER DDL JOBSを参照してください。
tidb_ddl_reorg_priority
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
PRIORITY_LOW PRIORITY_HIGHPRIORITY_NORMAL:PRIORITY_LOW- この変数は、第
re-organizeフェーズで第ADD INDEX操作を実行する際の優先順位を設定するために使用されます。 - この変数の値は、
PRIORITY_LOWPRIORITY_NORMALまたはPRIORITY_HIGHに設定できます。
tidb_ddl_reorg_max_write_speed は、v6.5.12、v7.5.5、v8.5.0 で新たに追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値:
0 - 範囲:
[0, 1PiB] - この変数は、インデックスのバックフィル中に、単一の TiDB ノードから単一の TiKV ノードへの書き込み帯域幅を制限します。これは、インデックス作成の高速化が有効になっている場合 (
tidb_ddl_enable_fast_reorg変数で制御) にのみ有効になります。グローバルソートが有効になっている場合、複数の TiDB ノードが TiKV に同時に書き込むことができます。クラスタ内のデータサイズが非常に大きい場合 (数十億行など)、インデックス作成の書き込み帯域幅を制限することで、アプリケーションのワークロードへの影響を効果的に軽減できます。 - デフォルト値の
0、書き込み帯域幅制限がないことを意味します。 - この変数の値は、単位を指定しても指定しなくても構いません。
- 単位を指定せずに値を指定した場合、デフォルトの単位はバイト/秒となります。例えば、
671088641秒あたり64MiBを表します。 - 値を単位付きで指定する場合、サポートされている単位は KiB、MiB、GiB、TiB です。たとえば、
'1GiB」は 1 GiB/秒を表し、'256MiB'は 256 MiB/秒を表します。
- 単位を指定せずに値を指定した場合、デフォルトの単位はバイト/秒となります。例えば、
例:
4つのTiDBノードと複数のTiKVノードを持つクラスタがあると仮定します。このクラスタでは、各TiDBノードがインデックスのバックフィルを実行でき、リージョンはすべてのTiKVノードに均等に分散されています。1からtidb_ddl_reorg_max_write_speed 100MiB設定すると、次のようになります。
- グローバルソートが無効になっている場合、一度に TiDB ノードが TiKV に書き込むのは 1 つだけです。この場合、TiKV ノードあたりの最大書き込み帯域幅は
100MiBです。 - グローバルソートが有効になっている場合、4 つの TiDB ノードすべてが同時に TiKV に書き込むことができます。この場合、TiKV ノードあたりの最大書き込み帯域幅は
4 * 100MiB = 400MiBです。
tidb_ddl_reorg_worker_cnt
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4 - 範囲:
[1, 256] - 単位:糸
- この変数は、第
re-organizeフェーズにおけるDDL操作の並行性を設定するために使用されます。 - バージョン8.3.0以降、このパラメータはセッションレベルでサポートされています。グローバルレベルでパラメータを変更しても、現在実行中のDDLステートメントには影響しません。変更は、新規セッションで送信されるDDLにのみ適用されます。
- バージョン 8.5.0 以降では、
ADMIN ALTER DDL JOBS <job_id> THREAD = <new_thread_count>;実行することで、実行中の DDL ジョブのこのパラメータを変更できます。TiDB バージョン 8.5.5 より前のバージョンでは、tidb_enable_dist_taskが有効になっている場合、ADD INDEXDDL に対してこの操作はサポートされていないことに注意してください。詳細については、ADMIN ALTER DDL JOBSを参照してください。
tidb_enable_fast_create_table v8.0.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ONより前のバージョンでは、デフォルト値はOFFでした。 - この変数はTiDB高速テーブル作成を有効にするかどうかを制御するために使用されます。
tidb_enable_fast_create_table8.0.0以降、TiDBはCREATE TABLEステートメントを使用してテーブル作成を高速化することをサポートしています。- この変数は、v7.6.0で導入された変数
tidb_ddl_versionから名前が変更されました。v8.0.0以降、tidb_ddl_version無効になります。 - TiDB v8.5.0以降、新しく作成されるクラスタでは、高速テーブル作成機能がデフォルトで有効になり、
tidb_enable_fast_create_tableからONに設定されます。v8.4.0以前のバージョンからアップグレードされたクラスタの場合、デフォルト値のtidb_enable_fast_create_tableは変更されません。
tidb_default_string_match_selectivity v6.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- デフォルト値:
0.8 - 範囲:
[0, 1] - この変数は、行数を推定する際のフィルタ条件における
likeregexpのデフォルトの選択性を設定するために使用されます。また、この変数はrlikeこれらの関数の推定を支援するためにTopNを有効にするかどうかも制御します。 - TiDBは統計情報を使用してフィルタ条件の
like推定しようとします。しかし、like複雑な文字列に一致する場合、またはrlikeやregexp使用する場合、TiDBは統計情報を十分に活用できず、代わりにデフォルト値の0.8が選択率として設定され、結果として不正確な推定結果となることがあります。 - この変数は、前述の動作を変更するために使用されます。この変数が
0以外の値に設定されている場合、選択率は0.8ではなく、指定された変数の値になります。 - 変数が
0に設定されている場合、TiDB は統計情報で TopN を使用して評価を行い、精度を向上させ、前述の 3 つの関数を推定する際に統計情報で NULL 値を考慮します。前提条件として、tidb_analyze_versionが2に設定されているときに統計情報が収集されている必要があります。このような評価は、パフォーマンスに若干影響を与える可能性があります。 - 変数が
0.8以外の値に設定されている場合、TiDBはnot likenot rlike推定値not regexpそれに応じて調整します。
tidb_disable_txn_auto_retry
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: ブール値
デフォルト値:
ONこの変数は、明示的な楽観的トランザクションの自動再試行を無効にするかどうかを設定するために使用されます。デフォルト値の
ONは、TiDB でトランザクションが自動的に再試行されないことを意味し、COMMITステートメントはアプリケーションレイヤーで処理する必要のあるエラーを返す可能性があります。値を
OFFに設定すると、TiDBはトランザクションを自動的に再試行し、COMMITステートメントからのエラーが減少します。この変更を行う際は、更新が失われる可能性があるため注意してください。この変数は、TiDB で自動的にコミットされる暗黙的トランザクションおよび内部的に実行されるトランザクションには影響しません。これらのトランザクションの最大再試行回数は、値
tidb_retry_limitによって決定されます。詳細については、 再試行の制限を参照してください。
この変数は楽観的トランザクションにのみ適用され、悲観的トランザクションには適用されません。悲観的トランザクションの再試行回数は、
max_retry_countによって制御されます。
tidb_distsql_scan_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
15 - 範囲:
[1, 256] - 単位:糸
- この変数は、
scan操作の同時実行数を設定するために使用されます。 - OLAPシナリオではより大きな値を使用し、OLTPシナリオではより小さな値を使用してください。
- OLAPシナリオの場合、最大値はすべてのTiKVノードのCPUコア数を超えてはなりません。
- テーブルにパーティションが多数ある場合、変数値を適切に減らすことで(スキャンするデータのサイズとスキャンの頻度によって決まります)、TiKVがメモリ不足(OOM)になるのを防ぐことができます。
LIMIT句のみを含む単純なクエリの場合、LIMIT値が 100000 未満であれば、TiKV にプッシュダウンされるスキャン操作では、実行効率を高めるためにこの変数の値を1として扱います。SELECT MAX/MIN(col) FROM ...クエリの場合、col列にMAX(col)またはMIN(col)関数で要求されるのと同じ順序でソートされたインデックスがある場合、TiDB はクエリをSELECT col FROM ... LIMIT 1に書き換えて処理し、この変数の値も1として処理されます。たとえば、SELECT MIN(col) FROM ...の場合、col列に昇順のインデックスがある場合、TiDB はクエリをSELECT col FROM ... LIMIT 1に書き換えてインデックスの最初の行を直接読み取ることで、MIN(col)値をすばやく取得できます。SLOW_QUERYテーブルに対するクエリの場合、この変数はスローログファイルの解析における同時実行数を制御します。
tidb_dml_batch_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - 単位:行
- この値が
0より大きい場合、TiDB はINSERTようなコミット ステートメントをより小さなトランザクションにまとめて実行します。これによりメモリ使用量が削減され、一括変更によってメモリ使用量がtxn-total-size-limitに達するのを防ぐことができます。 - 値
0のみがACID準拠を保証します。この値を他の値に設定すると、TiDBのアトミック性と分離性の保証が損なわれます。 - この変数を機能させるには、1 と
tidb_batch_insertおよびtidb_batch_deleteの少なくともtidb_enable_batch_dmlつを有効にする必要があります。
注記:
v7.0.0 以降、
tidb_dml_batch_sizeLOAD DATAステートメントに影響しなくなりました。
tidb_dml_type v8.0.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:はい
- 型: 文字列
- デフォルト値:
"standard" "bulk"オプション:"standard"- この変数は、DMLステートメントの実行モードを制御します。
"standard"標準のDML実行モードを示し、TiDBトランザクションはコミットされる前にメモリにキャッシュされます。このモードは、競合が発生する可能性のある高並行トランザクションシナリオに適しており、推奨されるデフォルトの実行モードです。"bulk"パイプライン DML 実行モードを示し、大量のデータが書き込まれ、TiDB で過剰なメモリ使用量が発生するシナリオに適しています。詳細については、パイプラインDML参照してください。
tidb_enable_1pc v5.0の新機能
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、1つのリージョンのみに影響を与えるトランザクションに対して、1フェーズコミット機能を有効にするかどうかを指定するために使用されます。よく使用される2フェーズコミットと比較して、1フェーズコミットはトランザクションコミットのレイテンシーを大幅に削減し、スループットを向上させることができます。
注記:
- デフォルト値の
ONは、新規クラスターにのみ適用されます。クラスターが以前のバージョンのTiDBからアップグレードされた場合は、代わりに値OFFが使用されます。- このパラメータを有効にしても、ワンフェーズコミットがトランザクションコミットのオプションモードになるだけです。実際には、最適なトランザクションコミットモードはTiDBによって決定されます。
tidb_enable_analyze_snapshot v6.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、
ANALYZE実行する際に履歴データを読み取るか最新データを読み取るかを制御します。この変数がONに設定されている場合、ANALYZEANALYZEの時点で利用可能な履歴データを読み取ります。この変数がOFFに設定されている場合、ANALYZE最新データを読み取ります。 - v5.2より前は、
ANALYZE最新のデータを読み取ります。v5.2からv6.1までは、ANALYZEANALYZEの時点で利用可能な履歴データを読み取ります。
tidb_enable_async_commit v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、2段階トランザクションコミットの第2フェーズで非同期コミット機能を有効にして、バックグラウンドで非同期に実行するかどうかを制御します。この機能を有効にすると、トランザクションコミットのレイテンシーを短縮できます。
注記:
- デフォルト値の
ONは、新規クラスターにのみ適用されます。クラスターが以前のバージョンのTiDBからアップグレードされた場合は、代わりに値OFFが使用されます。- このパラメータを有効にしても、非同期コミットがトランザクションコミットのオプションモードになるだけです。実際には、最適なトランザクションコミットモードはTiDBによって決定されます。
tidb_enable_auto_analyze v6.1.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - TiDBがテーブル統計情報をバックグラウンド操作として自動的に更新するかどうかを決定します。
- この設定は以前はオプション
tidb.toml(performance.run-auto-analyze)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_enable_auto_analyze_priority_queue v8.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、統計情報の自動収集タスクをスケジュールするための優先度キューを有効にするかどうかを制御するために使用されます。この変数を有効にすると、TiDB は、新しく作成されたインデックスやパーティションが変更されたパーティションテーブルなど、収集する価値の高いテーブルの統計情報の収集を優先します。さらに、TiDB は健全性スコアの低いテーブルを優先し、キューの先頭に配置します。
tidb_enable_auto_increment_in_generated
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、生成列または式インデックスを作成する際に、
AUTO_INCREMENT列を含めるかどうかを決定するために使用されます。
tidb_enable_batch_dml
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非推奨の batch-dml 機能を有効にするかどうかを制御します。有効にすると、特定のステートメントが複数のトランザクションに分割される可能性があり、これは非アトミックであるため、慎重に使用する必要があります。batch-dml を使用する場合は、操作対象のデータに対して同時実行操作がないことを確認する必要があります。この機能を動作させるには、
tidb_batch_dml_sizeに正の値を指定し、tidb_batch_insertとtidb_batch_deleteの少なくとも 1 つを有効にする必要があります。
tidb_enable_cascades_planner
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、カスケードプランナーを有効にするかどうかを制御するために使用されます。
tidb_enable_check_constraint v7.2.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、
CHECK制約機能を有効にするかどうかを制御するために使用されます。
tidb_enable_chunk_rpc v4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、コプロセッサーで
Chunkデータエンコード形式を有効にするかどうかを制御するために使用されます。
tidb_enable_clustered_index v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
ON ONINT_ONLY値:OFF- この変数は、デフォルトで主キーをクラスター化インデックスとして作成するかどうかを制御するために使用されます。ここでの「デフォルト」とは、ステートメントでキーワード
CLUSTERED/NONCLUSTEREDが明示的に指定されていないことを意味します。サポートされている値はOFF、ON、およびINT_ONLYです。OFF、プライマリキーがデフォルトで非クラスター化インデックスとして作成されることを示します。ON、プライマリキーがデフォルトでクラスタ化インデックスとして作成されることを示します。INT_ONLY、動作が構成項目alter-primary-keyによって制御されることを示します。4alter-primary-keytrueに設定されている場合、すべての主キーはデフォルトで非クラスタ化インデックスとして作成されます。8false設定されている場合、整数列で構成される主キーのみがクラスタ化インデックスとして作成されます。
tidb_enable_ddl はv6.3.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - 可能な
ON:OFF - この変数は、対応する TiDB インスタンスが DDL の所有者になれるかどうかを制御します。現在の TiDB クラスタに TiDB インスタンスが 1 つしかない場合、そのインスタンスが DDL の所有者になることを防ぐことはできません。つまり、この変数を
OFFに設定することはできません。
tidb_enable_collect_execution_info
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、スロー クエリ ログに各オペレーターの実行情報を記録するかどうか、およびインデックスの使用統計を記録するかどうかを制御します。
tidb_enable_column_tracking v5.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ONより前のバージョンでは、デフォルト値はOFFでした。 - この変数は、TiDB が
PREDICATE COLUMNSを収集できるようにするかどうかを制御します。収集を有効にした後、無効にすると、以前に収集したPREDICATE COLUMNSの情報はクリアされます。詳細はいくつかの列の統計情報を収集するご覧ください。
tidb_enable_enhanced_security
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、接続先のTiDBサーバーでSecurity拡張モード(SEM)が有効になっているかどうかを示します。値を変更するには、TiDBサーバーの設定ファイルで値「
enable-semを変更し、TiDBサーバーを再起動する必要があります。
- SEMは、 セキュリティ強化Linuxなどのシステムの設計に触発されています。MySQL
SUPER権限を持つユーザーの能力を制限し、代わりにRESTRICTED権限を付与する必要があります。これらのきめ細かい権限には以下が含まれます。RESTRICTED_TABLES_ADMIN:mysqlスキーマのシステム テーブルにデータを書き込む機能と、information_schemaテーブルの機密列を表示する機能。RESTRICTED_STATUS_ADMIN: コマンドSHOW STATUS内の機密変数を表示する機能。RESTRICTED_VARIABLES_ADMIN:SHOW [GLOBAL] VARIABLESとSETの機密変数を表示および設定する機能。RESTRICTED_USER_ADMIN:他のユーザーが変更を加えたり、ユーザーアカウントを削除したりすることを阻止する機能。
tidb_enable_exchange_partition
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は
exchange partitions with tables機能を有効にするかどうかを制御します。デフォルト値はONです。つまり、デフォルトではexchange partitions with tables有効になっています。 - この変数はバージョン6.3.0以降非推奨となりました。値はデフォルト値の
ONに固定され、つまりexchange partitions with tablesデフォルトで有効になります。
tidb_enable_extended_stats
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、TiDB がオプティマイザーをガイドする拡張統計を収集できるかどうかを示します。詳細については、拡張統計入門参照してください。
tidb_enable_external_ts_read はv6.4.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数が
ONに設定されている場合、TiDB はtidb_external_tsで指定されたタイムスタンプを持つデータを読み取ります。
tidb_external_ts v6.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 tidb_enable_external_ts_readがONに設定されている場合、TiDB はこの変数で指定されたタイムスタンプを持つデータを読み取ります。
tidb_enable_fast_analyze
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、統計情報
Fast Analyze機能を有効にするかどうかを設定するために使用されます。 - 統計情報
Fast Analyze機能が有効になっている場合、TiDBは約10,000行のデータをランダムにサンプリングして統計情報とします。データの分布が不均一であったり、データサイズが小さい場合、統計情報の精度は低くなります。そのため、例えば誤ったインデックスを選択するなど、最適な実行プランが立てられない可能性があります。通常のAnalyzeステートメントの実行時間が許容範囲内であれば、Fast Analyze機能を無効にすることをお勧めします。
tidb_enable_fast_table_check はv7.2.0 で追加されました。
注記:
この変数は多値インデックスおよびプレフィックス インデックスに対しては機能しません。
- 範囲: セッション | グローバル
- クラスターに永続化:はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、テーブル内のデータとインデックスの整合性を迅速にチェックするために、チェックサムベースの手法を使用するかどうかを制御するために使用されます。デフォルト値の
ONは、この機能がデフォルトで有効になっていることを意味します。 - この変数が有効になっている場合、TiDB は
ADMIN CHECK [TABLE|INDEX]ステートメントをより高速に実行できます。
tidb_enable_foreign_key はv6.3.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:v6.6.0より前のバージョンではデフォルト値は
OFFです。v6.6.0以降ではデフォルト値はONです。 - この変数は、
FOREIGN KEY機能を有効にするかどうかを制御します。
tidb_enable_gc_aware_memory_track
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、GC対応メモリトラックを有効にするかどうかを制御します。
tidb_enable_global_index v7.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、パーティション化されたテーブルに対してグローバルインデックスなインデックスの作成をサポートするかどうかを制御します。この変数を有効にすると、TiDB は、インデックス定義で
GLOBAL指定することで、パーティション式で使用されているすべての列を含まない一意のインデックスを作成できるようになります。 - この変数は v8.4.0 以降非推奨になりました。その値はデフォルト値
ONに固定されています。つまり、グローバルインデックスがデフォルトで有効になります。
tidb_enable_lazy_cursor_fetch v8.3.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - 可能な
ON:OFF - この変数はカーソルフェッチ機能の動作を制御します。
- カーソルフェッチが有効で、この変数が
OFFに設定されている場合、TiDB はステートメント実行の開始時にすべてのデータを読み込み、そのデータを TiDB のメモリに格納し、クライアントが指定したFetchSizeに基づいて、後続のクライアント読み取りのためにクライアントに返します。結果セットが大きすぎる場合、TiDB は一時的に結果をハードディスクに書き込むことがあります。 - カーソルフェッチが有効で、この変数が
ONに設定されている場合、TiDB はすべてのデータを一度に TiDB ノードに読み込むのではなく、クライアントがフェッチするにつれてデータを TiDB ノードに段階的に読み込みます。
- カーソルフェッチが有効で、この変数が
- この変数によって制御される機能には、以下の制限があります。
- サポートされていないシナリオでは、この変数を
OFFに設定した場合と同じ動作になります。
tidb_enable_non_prepared_plan_cache
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は準備されていないプランキャッシュ機能を有効にするかどうかを制御します。
- この機能を有効にすると、メモリとCPUのオーバーヘッドが増加する可能性があり、すべての状況に適しているとは限りません。実際の使用状況に応じて、この機能を有効にするかどうかを判断してください。
tidb_enable_non_prepared_plan_cache_for_dml v7.1.0 で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF。 - この変数は、DML ステートメントの準備されていないプランキャッシュキャッシュ機能を有効にするかどうかを制御します。
tidb_enable_gogc_tuner v6.4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、GOGC Tunerを有効にするかどうかを制御します。
tidb_enable_historical_stats
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFFより前のバージョンでは、デフォルト値はONでした。 - この変数は、履歴統計を有効にするかどうかを制御します。デフォルト値は
OFFで、これは履歴統計がデフォルトで無効になっていることを意味します。
tidb_enable_historical_stats_for_capture
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、
PLAN REPLAYER CAPTUREで取得される情報にデフォルトで過去の統計情報が含まれるかどうかを制御します。デフォルト値のOFF、デフォルトでは過去の統計情報が含まれないことを意味します。
tidb_enable_index_merge v4.0で追加
注記:
TiDBクラスタをv4.0.0より前のバージョンからv5.4.0以降にアップグレードした後、実行プランの変更によるパフォーマンス低下を防ぐため、この変数はデフォルトで無効になります。
TiDBクラスタをv4.0.0以降からv5.4.0以降にアップグレードした後も、この変数はアップグレード前の設定のままです。
バージョン5.4.0以降、新規にデプロイされたTiDBクラスタでは、この変数はデフォルトで有効になっています。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、インデックスのマージ機能を有効にするかどうかを制御するために使用されます。
tidb_enable_index_merge_join
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF IndexMergeJoin演算子を有効にするかどうかを指定します。- この変数はTiDBの内部動作のみに使用されます。変更することは推奨されません。変更すると、データの正確性に影響が出る可能性があります。
tidb_enable_legacy_instance_scope v6.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数を使用すると、スコープが
INSTANCE変数を、SET SESSIONおよびSET GLOBAL構文を使用して設定できます。 - このオプションは、以前のバージョンのTiDBとの互換性を保つため、デフォルトで有効になっています。
tidb_enable_list_partition v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、
LIST (COLUMNS) TABLE PARTITION機能を有効にするかどうかを設定するために使用されます。 - この変数はv8.4.0以降非推奨です。その値はデフォルト値
ONに固定されます。つまり、 List パーティショニングはデフォルトで有効になります。
tidb_enable_local_txn
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は未公開機能に使用されます。変数の値を変更しないでください。
tidb_enable_metadata_lock はv6.3.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、メタデータロック機能を有効にするかどうかを設定するために使用されます。この変数を設定する際は、クラスター内で実行中の DDL ステートメントがないことを確認してください。そうでない場合、データが正しくない、または矛盾が生じる可能性があります。
tidb_enable_mutation_checker v6.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、DML ステートメントの実行中にデータとインデックス間の一貫性をチェックするために使用されるツールである TiDB ミューテーション チェッカーを有効にするかどうかを制御するために使用されます。チェッカーがステートメントに対してエラーを返した場合、TiDB はステートメントの実行をロールバックします。この変数を有効にすると、CPU 使用率がわずかに増加します。詳細については、 データとインデックス間の不整合のトラブルシューティング参照してください。
- v6.0.0以降のバージョンの新規クラスターの場合、デフォルト値は
ONです。v6.0.0より前のバージョンからアップグレードする既存のクラスターの場合、デフォルト値はOFFです。
tidb_enable_new_cost_interface v6.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - TiDB v6.2.0では、以前のコストモデルの実装がリファクタリングされています。この変数は、リファクタリングされたコストモデルの実装を有効にするかどうかを制御します。
- この変数はデフォルトで有効になっています。なぜなら、リファクタリングされたコストモデルは以前と同じコスト計算式を使用しており、計画決定に影響を与えないからです。
- クラスターがv6.1からv6.2にアップグレードされた場合、この変数は
OFFままとなり、手動で有効にすることをお勧めします。クラスターがv6.1より前のバージョンからアップグレードされた場合、この変数はデフォルトでONに設定されます。
tidb_enable_new_only_full_group_by_check v6.1.0の新機能
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、TiDB が
ONLY_FULL_GROUP_BYチェックを実行する際の動作を制御します。3ONLY_FULL_GROUP_BY詳細については、 MySQLドキュメントを参照してください。v6.1.0 では、TiDB はこのチェックをより厳密かつ正確に処理します。 - バージョンアップグレードによって発生する可能性のある互換性の問題を回避するため、v6.1.0 ではこの変数のデフォルト値は
OFFに設定されています。
tidb_enable_noop_functions v4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
OFF ONWARN値:OFF- TiDBはデフォルトでは、まだ実装されていない機能の構文を使用しようとするとエラーを返します。変数の値を
ONに設定すると、TiDBは利用できない機能のケースを黙って無視します。これは、SQLコードを変更できない場合に役立ちます。 noop関数を有効にすると、以下の動作が制御されます。LOCK IN SHARE MODE構文SQL_CALC_FOUND_ROWS構文START TRANSACTION READ ONLYとSET TRANSACTION READ ONLY構文tx_read_onlysuper_read_onlysql_auto_is_nullread_onlytransaction_read_onlyoffline_modeGROUP BY <expr> ASC|DESC構文
tidb_enable_noop_variables はv6.2.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - 変数の値を
OFFに設定すると、TiDBは次のように動作します。SET使用してnoop変数を設定すると、TiDB は"setting *variable_name* has no effect in TiDB"警告を返します。- 結果
SHOW [SESSION | GLOBAL] VARIABLESにはnoop変数は含まれていません。 SELECT使用してnoop変数を読み取ると、TiDB は"variable *variable_name* has no effect in TiDB"警告を返します。
- TiDBインスタンスが変数
noopを設定および読み取ったかどうかを確認するには、SELECT * FROM INFORMATION_SCHEMA.CLIENT_ERRORS_SUMMARY_GLOBAL;ステートメントを使用できます。
tidb_enable_null_aware_anti_join v6.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:v7.0.0より前のバージョンではデフォルト値は
OFFです。v7.0.0以降ではデフォルト値はONです。 - タイプ: ブール値
- この変数は、特別な集合演算子
NOT INおよび!= ALLによって開始されるサブクエリによって ANTI JOIN が生成された場合に TiDB が Null Aware Hash Join を適用するかどうかを制御します。 - 以前のバージョンからv7.0.0以降のクラスターにアップグレードすると、この機能は自動的に有効になり、この変数は
ONに設定されます。
tidb_enable_outer_join_reorder v6.1.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
タイプ: ブール値
デフォルト値:
ONv6.1.0 以降、TiDB の結合したテーブルの再配置アルゴリズムは、Outer Join をサポートしています。この変数は、TiDB が Outer Join に対する Join Reorder のサポートを有効にするかどうかを制御します。
TiDBの以前のバージョンからクラスターをアップグレードする場合は、以下の点に注意してください。
- アップグレード前の TiDB バージョンが v6.1.0 より前の場合、アップグレード後のこの変数のデフォルト値は
ONなります。 - アップグレード前のTiDBのバージョンがv6.1.0以降の場合、アップグレード後の変数のデフォルト値はアップグレード前の値に従います。
- アップグレード前の TiDB バージョンが v6.1.0 より前の場合、アップグレード後のこの変数のデフォルト値は
tidb_enable_inl_join_inner_multi_pattern v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON以前のバージョンではデフォルト値はOFFです。 - この変数は、内部テーブルに演算子が
Selection、Aggregation、またはProjectionある場合に、インデックス結合がサポートされるかどうかを制御します。デフォルト値のOFFこのシナリオではインデックス結合がサポートされないことを意味します。 - TiDBクラスタをv7.0.0より前のバージョンからv8.4.0以降にアップグレードすると、この変数はデフォルトで
OFFに設定され、このシナリオではインデックス結合がサポートされていないことを示します。
tidb_enable_instance_plan_cache v8.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、インスタンス プラン キャッシュ機能を有効にするかどうかを制御します。この機能はインスタンス レベルの実行プラン キャッシュを実装しており、同じ TiDB インスタンス内のすべてのセッションが実行プラン キャッシュを共有できるため、メモリ使用率が向上します。インスタンス プラン キャッシュを有効にする前に、セッション レベル準備された実行プランキャッシュキャッシュ準備されていない実行プランのキャッシュを無効にすることをお勧めします。
tidb_enable_ordered_result_mode
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - 最終出力結果を自動的にソートするかどうかを指定します。
- 例えば、この変数を有効にすると、TiDB は
SELECT a, MAX(b) FROM t GROUP BY aSELECT a, MAX(b) FROM t GROUP BY a ORDER BY a, MAX(b)として処理します。
tidb_enable_paging はv5.4.0 で追加されました。
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
タイプ: ブール値
デフォルト値:
ONこの変数は、ページング方式を使用してコプロセッサ要求を送信するかどうかを制御します。TiDB バージョン (v5.4.0、v6.2.0) では、この変数は
IndexLookup演算子にのみ有効です。v6.2.0 以降では、この変数はグローバルに有効です。v6.4.0 以降、この変数のデフォルト値はOFFからONに変更されました。ユーザーシナリオ:
- すべてのOLTPシナリオにおいて、ページング方式を使用することが推奨されます。
IndexLookupとLimit使用する読み取りクエリで、LimitIndexScanにプッシュダウンできない場合、読み取りクエリのレイテンシーが高くなり、TiKVUnified read pool CPUの使用率が高くなる可能性があります。このような場合、Limit演算子は少量のデータしか必要としないため、tidb_enable_pagingONに設定すると、TiDBが処理するデータ量が少なくなり、クエリのレイテンシーとリソース消費が削減されます。- Dumplingを使用したデータエクスポートやフルテーブルスキャンなどのシナリオでは、ページングを有効にすることで、TiDBプロセスのメモリ消費量を効果的に削減できます。
注記:
TiFlashの代わりにTiKVをstorageエンジンとして使用するOLAPシナリオでは、ページングを有効にすると、場合によってはパフォーマンスが低下する可能性があります。パフォーマンスが低下した場合は、この変数を使用してページングを無効にするか、
tidb_min_paging_sizeおよびtidb_max_paging_size変数を使用してページングサイズの行範囲を調整することを検討してください。
tidb_enable_parallel_apply v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、演算子
Apply同時実行を有効にするかどうかを制御します。同時実行の数は、変数tidb_executor_concurrencyで制御されます。演算子Applyは相関サブクエリを処理し、デフォルトでは同時実行が有効になっていないため、実行速度が遅くなります。この変数の値を1に設定すると、同時実行数を増やして実行速度を向上させることができます。現在、演算子Applyの同時実行はデフォルトで無効になっています。
tidb_enable_parallel_hashagg_spill v8.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、TiDB が並列 HashAgg アルゴリズムでディスク スピルをサポートするかどうかを制御します。この変数が
ON場合、HashAgg オペレータは、あらゆる並列条件下でメモリ使用量に基づいてデータ スピルを自動的にトリガーし、パフォーマンスとデータ スループットのバランスを取ることができます。この変数をOFFに設定することは推奨されません。v8.2.0 以降では、OFFに設定するとエラーが報告されます。この変数は将来のリリースで非推奨になります。
tidb_enable_pipelined_window_function
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数はウィンドウ関数のパイプライン実行アルゴリズムを使用するかどうかを指定します。
tidb_enable_plan_cache_for_param_limit v6.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、プリペアドプランキャッシュ が
LIMITパラメータとして変数 (LIMIT ?) を持つ実行プランをキャッシュするかどうかを制御します。デフォルト値はONで、これはプリペアドプランキャッシュ がそのような実行プランのキャッシュをサポートすることを意味します。Prepared プリペアドプランキャッシュ は、 10000 を超える変数を持つ実行プランのキャッシュをサポートしないことに注意してください。
tidb_enable_plan_cache_for_subquery v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、プリペアドプランキャッシュがサブクエリを含むクエリをキャッシュするかどうかを制御します。
tidb_enable_plan_replayer_capture
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は
PLAN REPLAYER CAPTURE機能を有効にするかどうかを制御します。デフォルト値のONPLAN REPLAYER CAPTURE機能を有効にすることを意味します。
tidb_enable_plan_replayer_continuous_capture v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は
PLAN REPLAYER CONTINUOUS CAPTURE機能)を有効にするかどうかを制御します。デフォルト値のOFFは、この機能を無効にすることを意味します。
tidb_enable_point_get_cache
- 範囲: セッション
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - テーブルロックタイプを
LOCK TABLESでREADに設定した場合、この変数をONに設定すると、ポイントクエリ結果のキャッシュが有効になり、繰り返しクエリのオーバーヘッドが削減され、ポイントクエリのパフォーマンスが向上します。
tidb_enable_prepared_plan_cache v6.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - プリペアドプランキャッシュを有効にするかどうかを決定します。有効にすると、
PrepareとExecuteの実行計画がキャッシュされるため、後続の実行では実行計画の最適化がスキップされ、パフォーマンスが向上します。 - この設定は以前はオプション
tidb.toml(prepared-plan-cache.enabled)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_enable_prepared_plan_cache_memory_monitor v6.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - この変数は、プリペアドプランキャッシュにキャッシュされた実行プランによって消費されるメモリをカウントするかどうかを制御します。詳細については、 プリペアドプランキャッシュのメモリ管理ご覧ください。
tidb_enable_pseudo_for_outdated_stats はv5.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、統計情報が古い場合に、オプティマイザがテーブルの統計情報を使用するかどうかの動作を制御します。
- オプティマイザは、テーブルの統計情報が古いかどうかを次のように判断します。テーブルに対して最後に統計情報を取得する処理
ANALYZEが実行されてから、テーブルの行の80%が変更された場合(変更された行数を総行数で割った値)、オプティマイザはこのテーブルの統計情報が古いと判断します。この比率はpseudo-estimate-ratio設定を使用して変更できます。
- デフォルトでは(変数の値が
OFF場合)、テーブルの統計情報が古くなっている場合でも、オプティマイザは引き続きテーブルの統計情報を使用します。変数の値をONに設定すると、オプティマイザは、行の総数を除いてテーブルの統計情報が信頼できないと判断します。そして、オプティマイザは擬似統計情報を使用します。 - テーブル上のデータが頻繁に変更されるにもかかわらず、そのテーブルに対してタイムリーに
ANALYZE実行されない場合、実行プランを安定させるために、変数の値をOFFに設定することをお勧めします。
tidb_enable_rate_limit_action
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、データを読み取るオペレータに対して動的メモリ制御機能を有効にするかどうかを制御します。デフォルトでは、このオペレータは、
tidb_distsql_scan_concurrencyデータ読み取りに許可する最大スレッド数を有効にします。単一の SQL ステートメントのメモリ使用量が毎回tidb_mem_quota_query超えると、データを読み取るオペレータは 1 つのスレッドを停止します。
- データを読み取るオペレーターにスレッドが 1 つだけ残っており、単一の SQL ステートメントのメモリ使用量が常に
tidb_mem_quota_query超える場合、この SQL ステートメントはデータをディスクに書き出すなどの他のメモリ制御動作をトリガーします。 - この変数は、SQL文がデータの読み取りのみを行う場合にメモリ使用量を効果的に制御します。結合や集計などの計算操作が必要な場合、メモリ使用量は
tidb_mem_quota_queryの制御下にない可能性があり、メモリ不足(OOM)のリスクが高まります。
tidb_enable_resource_control v6.6.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - タイプ: ブール値
- この変数はリソース制御機能のスイッチです。この変数が
ONに設定されている場合、TiDB クラスターはリソース グループに基づいてアプリケーション リソースを分離できます。
tidb_enable_reuse_chunk v6.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON ONオプション:OFF- この変数は、TiDBがチャンクオブジェクトのキャッシュを有効にするかどうかを制御します。値が
ONの場合、TiDBはキャッシュされたチャンクオブジェクトの使用を優先し、要求されたオブジェクトがキャッシュに存在しない場合にのみシステムに要求します。値がOFF場合、TiDBはシステムから直接チャンクオブジェクトを要求します。
tidb_enable_shared_lock_promotion v8.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、共有ロックを排他ロックにアップグレードする機能を有効にするかどうかを制御します。TiDB はデフォルトでは
SELECT LOCK IN SHARE MODEサポートしていません。変数の値がONの場合、TiDB はSELECT LOCK IN SHARE MODEステートメントをSELECT FOR UPDATEにアップグレードし、悲観的ロックを追加しようとします。この変数のデフォルト値はOFFであり、これは共有ロックを排他ロックにアップグレードする機能が無効になっていることを意味します。 - この変数を有効にすると、
tidb_enable_noop_functionsが有効になっているかどうかに関わらず、SELECT LOCK IN SHARE MODEステートメントに効果が適用されます。
tidb_enable_slow_log
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、スローログ機能を有効にするかどうかを制御するために使用されます。
tidb_enable_tmp_storage_on_oom
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON ONオプション:OFF- 単一の SQL ステートメントがシステム変数
tidb_mem_quota_queryで指定されたメモリクォータを超えた場合に、一部のオペレーターに対して一時storageを有効にするかどうかを制御します。 - バージョン6.3.0より前のバージョンでは、TiDB構成項目
oom-use-tmp-storageを使用してこの機能を有効または無効にできます。クラスターをバージョン6.3.0以降にアップグレードすると、TiDBクラスターはこの変数を自動的に値oom-use-tmp-storageで初期化します。その後、値oom-use-tmp-storageを変更しても効果はありません。
tidb_enable_stats_owner はv8.4.0 で追加されました。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - 可能な
ON:OFF - この変数は、対応する TiDB インスタンスが統計情報の自動更新タスクを実行できるかどうかを制御します。現在の TiDB クラスタに TiDB インスタンスが 1 つしかない場合、このインスタンスで統計の自動更新を無効にすることはできません。つまり、この変数を
OFFに設定することはできません。
tidb_enable_stmt_summary v3.0.4で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、ステートメントサマリー機能を有効にするかどうかを制御するために使用されます。有効にすると、SQL実行時間などのSQL実行情報がシステムテーブル
information_schema.STATEMENTS_SUMMARYに記録され、SQLパフォーマンスの問題を特定してトラブルシューティングするために役立ちます。
tidb_enable_strict_double_type_check v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、タイプ
DOUBLEの無効な定義を持つテーブルを作成できるかどうかを制御するために使用されます。この設定は、タイプの検証がそれほど厳格ではなかった以前のバージョンのTiDBからのアップグレードパスを提供することを目的としています。 - デフォルト値の
ONはMySQLと互換性があります。
例えば、浮動小数点型の精度は保証されないため、型DOUBLE(10)は無効とみなされます。3 tidb_enable_strict_double_type_check OFFに変更すると、次の表が作成されます。
mysql> CREATE TABLE t1 (id int, c double(10));
ERROR 1149 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
mysql> SET tidb_enable_strict_double_type_check = 'OFF';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t1 (id int, c double(10));
Query OK, 0 rows affected (0.09 sec)
注記:
この設定はタイプ
DOUBLEにのみ適用されます。MySQLではFLOATタイプに対して精度指定が可能なためです。この動作はMySQL 8.0.17以降非推奨となり、FLOATまたはDOUBLEのタイプに対して精度を指定することは推奨されません。
tidb_enable_table_partition
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
ON - この変数は v8.4.0 以降非推奨になりました。その値はデフォルト値
ONに固定されます。つまり、テーブルパーティショニングはデフォルトで有効になります。
tidb_enable_telemetry v4.0.2で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON以降、デフォルト値はOFFからONに変更されました。
- この変数は、TiDB でテレメトリ機能を有効にするかどうかを制御します。v8.5.3 以降、この変数は TiDB インスタンスの
enable-telemetry設定項目がtrueに設定されている場合にのみ有効になります。
tidb_enable_tiflash_read_for_write_stmt v6.3.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: ブール値
デフォルト値:
ONこの変数は
UPDATEINSERTDELETE含むSQL文の読み取り操作をTiFlashにプッシュダウンできるかどうかを制御します。例:INSERT INTO SELECTステートメントでクエリがSELECT(典型的な使用シナリオ:TiFlashクエリ結果の具体化)UPDATEとDELETEステートメントで条件フィルタリングをWHERE
バージョン 7.1.0 以降、この変数は非推奨です。tidb_allow_mpp
tidb_allow_mpp = ONの場合、オプティマイザは、 SQLモードとTiFlashレプリカのコスト見積もりに基づいて、クエリをTiFlashにプッシュダウンするかどうかをインテリジェントに決定します。TiDB では、現在のセッションの SQL SQLモードが厳密でない場合(つまり、INSERT INTO SELECTsql_modeDELETESTRICT_TRANS_TABLESINSERTSTRICT_ALL_TABLESUPDATETiFlashにプッシュダウンできることに注意してください。
tidb_enable_top_sql v5.4.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF
- この変数は、 Top SQL機能を有効にするかどうかを制御するために使用されます。
tidb_enable_tso_follower_proxy v5.3.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、TSOFollowerプロキシ機能を有効にするかどうかを制御します。値が
OFFの場合、TiDBはPDリーダーからのみTSOを取得します。値がONの場合、TiDBはTSO要求をすべてのPDサーバーに均等に分散し、PDフォロワーもTSO要求を処理できるため、PDリーダーのCPU負荷が軽減されます。 - TSOFollowerプロキシを有効にするシナリオ:
- TSOリクエストの負荷が高いため、PDリーダーのCPUがボトルネックとなり、TSO RPCリクエストのレイテンシーが増大する。
- TiDBクラスタには多数のTiDBインスタンスが存在するため、
tidb_tso_client_batch_max_wait_timeの値を増やしても、TSO RPCリクエストの高レイテンシーの問題は解消されません。
注記:
- PDリーダーのCPU使用率のボトルネック以外の理由(ネットワークの問題など)でTSO RPCのレイテンシーが増加したとします。この場合、TSOFollowerプロキシを有効にすると、TiDBの実行レイテンシーが増加し、クラスタのQPSパフォーマンスに影響を与える可能性があります。
- この機能は
tidb_tso_client_rpc_modeと互換性がありません。この機能を有効にすると、tidb_tso_client_rpc_modeは有効になりません。
tidb_enable_unsafe_substitute v6.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、式を生成された列に安全でない方法で置き換えるかどうかを制御します。デフォルト値は
OFFで、これはデフォルトで安全でない置換が無効になっていることを意味します。詳細については、生成された列参照してください。
tidb_enable_vectorized_expression v4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、ベクトル化実行を有効にするかどうかを制御するために使用されます。
tidb_enable_window_function
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、 ウィンドウ関数のサポートを有効にするかどうかを制御するために使用されます。 ウィンドウ関数は予約語を使用する可能性があることに注意してください。これにより、TiDB のアップグレード後に、通常実行できる SQL ステートメントが解析に失敗する可能性があります。この場合、
tidb_enable_window_function~OFFに設定できます。
tidb_enable_row_level_checksum v7.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF
- この変数はTiCDCによる単一行データのデータ整合性検証機能を有効にするかどうかを制御するために使用されます。
TIDB_ROW_CHECKSUM()関数を使用すると、行のチェックサム値を取得できます。
tidb_enforce_mpp v5.1の新機能
- 範囲: セッション
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF
- このデフォルト値を変更するには、
performance.enforce-mpp設定値を変更してください。
- オプティマイザのコスト見積もりを無視し、クエリ実行にTiFlashのMPPモードを強制的に使用するかどうかを制御します。値オプションは以下のとおりです。
0またはOFF場合、MPPモードは強制的に使用されません(デフォルトでは)。1またはON場合、コスト見積もりは無視され、MPP モードが強制的に使用されます。この設定はtidb_allow_mpp=true場合にのみ有効になることに注意してください。
MPP は、 TiFlashエンジンによって提供される分散コンピューティング フレームワークであり、ノード間のデータ交換を可能にし、高性能、高スループットの SQL アルゴリズムを提供します。 MPPモードの選択の詳細については、 MPPモードを選択するかどうかを制御する。
tidb_evolve_plan_baselines v4.0 の新機能
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、ベースライン進化機能を有効にするかどうかを制御するために使用されます。詳しい導入方法や使い方については、 ベースライン進化ご覧ください。
- ベースラインの進化がクラスターに与える影響を軽減するには、以下の設定を使用してください。
- 各実行プランの最大実行時間を制限するには、値を
tidb_evolve_plan_task_max_time設定します。デフォルト値は600秒です。 - 時間範囲を制限するには、
tidb_evolve_plan_task_start_timeとtidb_evolve_plan_task_end_timeを設定してください。デフォルト値はそれぞれ00:00 +0000と23:59 +0000です。
- 各実行プランの最大実行時間を制限するには、値を
tidb_evolve_plan_task_end_time v4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 時間
- デフォルト値:
23:59 +0000 - この変数は、1日におけるベースライン進化の終了時刻を設定するために使用されます。
tidb_evolve_plan_task_max_time v4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
600 - 範囲:
[-1, 9223372036854775807] - 単位:秒
- この変数は、ベースライン進化機能における各実行プランの最大実行時間を制限するために使用されます。
tidb_evolve_plan_task_start_time v4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 時間
- デフォルト値:
00:00 +0000 - この変数は、1日におけるベースライン変化の開始時刻を設定するために使用されます。
tidb_executor_concurrency v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
5 - 範囲:
[1, 256] - 単位:糸
この変数は、以下のSQL演算子の同時実行数を(単一の値に)設定するために使用されます。
index lookupindex lookup joinhash joinhash aggregation(partial相とfinal相)windowprojectionsort
tidb_executor_concurrency管理を容易にするために、以下の既存のシステム変数を全体として統合します。
tidb_index_lookup_concurrencytidb_index_lookup_join_concurrencytidb_hash_join_concurrencytidb_hashagg_partial_concurrencytidb_hashagg_final_concurrencytidb_projection_concurrencytidb_window_concurrency
バージョン5.0以降では、上記にリストされているシステム変数を個別に変更することも可能です(ただし、非推奨の警告が表示されます)。変更は対応する単一の演算子にのみ影響します。その後、 tidb_executor_concurrency使用して演算子の同時実行数を変更した場合、個別に変更された演算子には影響しません。3 tidb_executor_concurrency使用してすべての演算子の同時実行数を変更する場合は、上記にリストされているすべての変数の値を-1に設定してください。
以前のバージョンからv5.0にアップグレードしたシステムの場合、上記の変数の値を変更していない場合(つまり、 tidb_hash_join_concurrency値が5で、残りの値が4の場合)、これらの変数によって以前管理されていた演算子の同時実行性は、自動的にtidb_executor_concurrencyによって管理されます。これらの変数のいずれかを変更した場合は、対応する演算子の同時実行性は、変更後の変数によって引き続き制御されます。
tidb_expensive_query_time_threshold
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
60 - 範囲:
[10, 2147483647] - 単位:秒
- この変数は、高負荷なクエリログを出力するかどうかを決定するしきい値を設定するために使用されます。高負荷なクエリログと低負荷なクエリログの違いは次のとおりです。
- スローログは、ステートメントの実行後に出力されます。
- コストの高いクエリログには、実行時間がしきい値を超えた実行中のステートメントと、それに関連する情報が出力されます。
tidb_expensive_txn_time_threshold v7.2.0で追加
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
600 - 範囲:
[60, 2147483647] - 単位:秒
- この変数は、高負荷トランザクションをログに記録するしきい値を制御します。デフォルト値は600秒です。トランザクションの所要時間がこのしきい値を超え、かつトランザクションがコミットもロールバックもされない場合、そのトランザクションは高負荷トランザクションとみなされ、ログに記録されます。
tidb_force_priority
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
NO_PRIORITY LOW_PRIORITYDELAYED値HIGH_PRIORITYNO_PRIORITY- この変数は、TiDBサーバー上で実行されるステートメントのデフォルトの優先度を変更するために使用されます。使用例としては、OLAPクエリを実行する特定のユーザーが、OLTPクエリを実行するユーザーよりも低い優先度を受け取るようにすることが挙げられます。
- デフォルト値の
NO_PRIORITY、ステートメントの優先順位が強制的に変更されないことを意味します。
注記:
バージョン6.6.0以降、TiDBはリソース制御サポートしています。この機能を使用すると、異なるリソースグループで異なる優先度のSQLステートメントを実行できます。これらのリソースグループに適切なクォータと優先度を設定することで、異なる優先度のSQLステートメントのスケジューリングをより適切に制御できます。リソース制御が有効になっている場合、ステートメントの優先度は適用されなくなります。 を使用してリソース制御異なるSQLステートメントのリソース使用量を管理することをお勧めします。
tidb_gc_concurrency v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
-1または[1, 256] - 単位:糸
- この変数はごみ収集(GC)プロセスのロックを解除するステップ中の同時スレッドの数を制御します。
- v8.3.0 以降、この変数は、GC プロセスの範囲の削除ステップ中の同時スレッドの数も制御します。
- デフォルトでは、この変数は
-1設定されており、TiDB がワークロードに基づいて適切なスレッド数を自動的に決定できるようになっています。 - この変数が
[1, 256]から始まる数値に設定されている場合:- ロック解決機能は、この変数に設定された値をスレッド数として直接使用します。
- Delete Rangeは、この変数に設定された値の4分の1をスレッド数として使用します。
tidb_gc_enable v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - TiKVのガベージコレクションを有効にします。ガベージコレクションを無効にすると、行の古いバージョンが削除されなくなるため、システムパフォーマンスが低下します。
tidb_gc_life_time v5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ:期間
- デフォルト値:
10m0s - 範囲:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
[10m0s, 8760h0m0s]、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合は[10m0s, 168h0m0s] - 各GCにおいてデータが保持される時間制限(Go Duration形式)。GCが発生すると、現在の時刻からこの値を引いた時点が安全ポイントとなります。
注記:
- 頻繁に更新が行われるシナリオでは、
tidb_gc_life_time値が大きい場合 (日数または月数)、次のような潜在的な問題が発生する可能性があります。
- storage使用量の増加
- 大量の履歴データは、特に範囲クエリ(例:
select count(*) from tの場合、パフォーマンスに一定の影響を与える可能性があります。- GC の実行中に、実行時間が
tidb_gc_life_time超えるトランザクションがある場合、そのトランザクションの実行を継続するために、start_ts以降のデータが保持されます。たとえば、tidb_gc_life_time10 分に設定されている場合、実行中のすべてのトランザクションの中で、最も早く開始されたトランザクションが 15 分間実行されている場合、GC は直近 15 分間のデータを保持します。
tidb_gc_max_wait_time はv6.1.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
86400 - 範囲:
[600, 31536000] - 単位:秒
- この変数は、アクティブなトランザクションがGCセーフポイントをブロックする最大時間を設定するために使用されます。デフォルトでは、GCの各実行時間において、セーフポイントは進行中のトランザクションの開始時間を超えません。アクティブなトランザクションの実行時間がこの変数の値を超えない場合、実行時間がこの値を超えるまでGCセーフポイントはブロックされます。
tidb_gc_run_interval v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ:期間
- デフォルト値:
10m0s - 範囲:
[10m0s, 8760h0m0s] - GC間隔をGo Durationの形式で指定します。例えば、
"1h30m"などです"15m"
tidb_gc_scan_lock_mode v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
LEGACY - 可能な
LEGACY:PHYSICALLEGACY:従来のスキャン方法を使用します。つまり、Green GCを無効にします。PHYSICAL:物理スキャン方式を使用する、つまりグリーンGCを有効にする。
- この変数は、GC のロック解決ステップにおけるロックのスキャン方法を指定します。変数の値が
LEGACYに設定されている場合、TiDB はリージョンごとにロックをスキャンします。値PHYSICALを使用すると、各 TiKV ノードがRaftレイヤーをバイパスしてデータを直接スキャンできるようになり、 冬眠リージョン領域機能が有効になっている場合に GC がすべてのリージョンを起動することによる影響を効果的に軽減できるため、ロック解決ステップの実行速度が向上します。
tidb_general_log
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF
この変数は、すべてのSQLステートメントをログに記録するかどうかを設定するために使用されます。この機能はデフォルトでは無効になっています。保守担当者が問題箇所を特定する際にすべてのSQLステートメントを追跡する必要がある場合は、この機能を有効にできます。
log.general-log-file設定項目が指定されている場合、一般ログは指定されたファイルに個別に書き込まれます。log.format設定項目を使用すると、ログメッセージのフォーマット、一般的なログを別のファイルに保存するか、他のログと結合するかを設定できます。tidb_redact_log変数を使用すると、一般ログに記録されたSQLステートメントを編集できます。一般ログには、正常に実行されたステートメントのみが記録されます。失敗したステートメントは一般ログには記録されず、代わりにTiDBログに
command dispatched failedというメッセージとともに記録されます。この機能に関するすべての記録をログで確認するには、TiDB構成項目の
log.level"info"または"debug"に設定し、"GENERAL_LOG"番目の文字列をクエリする必要があります。以下の情報が記録されます。time:イベント発生時刻。conn:現在のセッションのID。user:現在のセッションユーザー。schemaVersion:現在のスキーマバージョン。txnStartTS:現在のトランザクションが開始されたタイムスタンプ。forUpdateTS:悲観的トランザクションモードでは、forUpdateTSSQL ステートメントの現在のタイムスタンプです。悲観的トランザクションで書き込み競合が発生すると、TiDB は現在実行中の SQL ステートメントを再試行し、このタイムスタンプを更新します。再試行回数はmax-retry-countで設定できます。楽観的トランザクションモデルでは、forUpdateTStxnStartTSと同等です。isReadConsistency:現在のトランザクション分離レベルが読み取りコミット(RC)であるかどうかを示します。current_db:現在のデータベースの名前。txn_mode:トランザクションモード。値の選択肢はOPTIMISTICとPESSIMISTICです。sql:現在のクエリに対応するSQLステートメント。
tidb_non_prepared_plan_cache_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
100 - 範囲:
[1, 100000] - この変数は準備されていないプランキャッシュによってキャッシュできる実行プランの最大数を制御します。
tidb_pre_split_regions v8.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 15] - この変数は、新しく作成されたテーブルのデフォルトの行分割シャード数を設定するために使用されます。この変数にゼロ以外の値を設定すると、TiDB は
CREATE TABLEステートメントを実行する際にPRE_SPLIT_REGIONSの使用を許可するテーブル (たとえば、NONCLUSTEREDテーブル) にこの属性を自動的に適用します。詳細については、PRE_SPLIT_REGIONSを参照してください。この変数は通常、tidb_shard_row_id_bitsと組み合わせて、新しいテーブルのシャーディングと新しいテーブルのリージョンの事前分割に使用されます。
tidb_generate_binary_plan v6.2.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、スローログとステートメントサマリーにバイナリエンコードされた実行プランを生成するかどうかを制御します。
- この変数を
ONに設定すると、TiDBダッシュボードで実行プランを視覚的に表示できます。ただし、TiDBダッシュボードでは、この変数が有効になった後に生成された実行プランのみを視覚的に表示できることに注意してください。 SELECT tidb_decode_binary_plan('xxx...')ステートメントを実行すると、バイナリ プランから特定のプランを解析できます。
tidb_gogc_tuner_max_value v7.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
500 - 範囲:
[10, 2147483647] - この変数は、GOGCチューナーが調整できるGOGCの最大値を制御するために使用されます。
tidb_gogc_tuner_min_value v7.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
100 - 範囲:
[10, 2147483647] - この変数は、GOGCチューナーが調整できるGOGCの最小値を制御するために使用されます。
tidb_gogc_tuner_threshold v6.4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
0.6 - 範囲:
[0, 0.9) - この変数は、GOGC のチューニングにおける最大メモリ使用量を指定します。メモリがこのしきい値を超えると、GOGC Tuner は動作を停止します。
tidb_guarantee_linearizability v5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、非同期コミットにおけるコミットTSの計算方法を制御します。デフォルト(値
ON)では、2フェーズコミットはPDサーバーから新しいTSを要求し、そのTSを使用して最終的なコミットTSを計算します。この場合、すべての同時実行トランザクションに対して線形化可能性が保証されます。 - この変数を
OFFに設定すると、PDサーバーから TS を取得するプロセスがスキップされますが、その代償として、因果関係の一貫性のみが保証されますが、線形化可能性は保証されません。詳細については、ブログ投稿TiDB 5.0 のトランザクションコミットを加速する非同期コミットを参照してください。 - 因果関係の一貫性のみを必要とするシナリオでは、この変数を
OFFに設定することでパフォーマンスを向上させることができます。
tidb_hash_exchange_with_new_collation
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、新しい照合順序が有効になっているクラスタで MPP ハッシュパーティション交換演算子を生成するかどうかを制御します。1
true演算子を生成することを意味し、false生成しないことを意味します。 - この変数はTiDBの内部動作に使用されます。この変数を設定することは推奨されません。
tidb_hash_join_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、
hash joinアルゴリズムの並行性を設定するために使用されます。 - 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_hash_join_version v8.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
legacy - 可能な
optimized:legacy - この変数は、TiDBがハッシュ結合の最適化バージョンを使用するかどうかを制御するために使用されます。デフォルト値は
legacyで、これは最適化バージョンが使用されないことを意味します。3optimized設定すると、TiDBはパフォーマンス向上のために最適化バージョンを使用してハッシュ結合を実行します。
注記:
現在、最適化されたハッシュ結合は内部結合と外部結合のみをサポートしているため、他の結合については、
tidb_hash_join_versionoptimizedに設定しても、TiDB は従来のハッシュ結合を使用します。
tidb_hashagg_final_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、第
finalフェーズで並行アルゴリズムhash aggregationを実行する際の並行度を設定するために使用されます。 - 集計関数のパラメータが区別できない場合、
HashAgg並行して実行され、それぞれ2つのフェーズ(フェーズpartialとフェーズfinal)で実行されます。 - 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_hashagg_partial_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、第
partialフェーズで並行アルゴリズムhash aggregationを実行する際の並行度を設定するために使用されます。 - 集計関数のパラメータが区別できない場合、
HashAgg並行して実行され、それぞれ2つのフェーズ(フェーズpartialとフェーズfinal)で実行されます。 - 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_historical_stats_duration v6.6.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ:期間
- デフォルト値:
168h(7日間) - この変数は、履歴統計がstorageに保持される期間を制御します。
tidb_idle_transaction_timeout はv7.6.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 31536000] - 単位:秒
- この変数は、ユーザーセッションにおけるトランザクションのアイドルタイムアウトを制御します。ユーザーセッションがトランザクション状態にあり、この変数の値を超える時間アイドル状態が続くと、TiDB はセッションを終了します。アイドル状態のユーザーセッションとは、アクティブなリクエストがなく、新しいリクエストを待機している状態を指します。
- デフォルト値の
0は無制限を意味します。
tidb_ignore_prepared_cache_close_stmt v6.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、プリペアドステートメントキャッシュを閉じるコマンドを無視するかどうかを設定するために使用されます。
- この変数が
ONに設定されている場合、バイナリ プロトコルのCOM_STMT_CLOSEコマンドとテキスト プロトコルのDEALLOCATE PREPAREステートメントは無視されます。詳細については、COM_STMT_CLOSEコマンドとDEALLOCATE PREPAREステートメントは無視してください。参照してください。
tidb_ignore_inlist_plan_digest v7.6.0 の新機能
対象範囲:グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: ブール値
デフォルト値:
OFFこの変数は、TiDB がプランダイジェストを生成する際に、異なるクエリ間で
INリスト内の要素の差異を無視するかどうかを制御します。- デフォルト値が
OFF場合、TiDBはプランダイジェストを生成する際に、IN番目のリスト内の要素の差異(要素数の違いを含む)を無視しません。5INのリスト内の要素の差異により、異なるプランダイジェストが生成されます。 - この値を
ONに設定すると、TiDB はINリスト内の要素の差異 (要素数の違いを含む) を無視し、...を使用してINリスト内の要素を Plan Digests 内で置き換えます。この場合、TiDB は同じタイプのINのクエリに対して同じ Plan Digests を生成します。
- デフォルト値が
tidb_index_join_batch_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
25000 - 範囲:
[1, 2147483647] - 単位:行
- この変数は、
index lookup join操作のバッチサイズを設定するために使用されます。 - OLAPシナリオではより大きな値を使用し、OLTPシナリオではより小さな値を使用してください。
tidb_index_join_double_read_penalty_cost_rateは v6.6.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- デフォルト値:
0 - 範囲:
[0, 18446744073709551615] - この変数は、インデックス結合の選択にペナルティコストを適用するかどうかを決定します。ペナルティコストを適用することで、オプティマイザがインデックス結合を選択する可能性が低くなり、ハッシュ結合やTIFlash結合などの代替結合方法を選択する可能性が高くなります。
- インデックス結合を選択すると、多数のテーブル検索要求が発生し、リソースを過剰に消費します。この変数を使用することで、オプティマイザがインデックス結合を選択する可能性を低減できます。
- この変数は、
tidb_cost_model_version変数が2に設定されている場合にのみ有効になります。
tidb_index_lookup_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、
index lookup操作の同時実行数を設定するために使用されます。 - OLAPシナリオではより大きな値を使用し、OLTPシナリオではより小さな値を使用してください。
- 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_index_lookup_join_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、
index lookup joinアルゴリズムの並行性を設定するために使用されます。 - 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_index_lookup_pushdown_policy v8.5.5で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
hint-only forceaffinity-force:hint-only- この変数は、TiDBが
IndexLookUp演算子をTiKVにプッシュダウンするかどうか、またプッシュダウンするタイミングを制御します。値のオプションは以下のとおりです。hint-only(デフォルト): TiDB は、SQL ステートメントでINDEX_LOOKUP_PUSHDOWNヒントが明示的に指定されている場合にのみ、IndexLookUp演算子を TiKV にプッシュダウンします。affinity-force: TiDB は、AFFINITYオプションで構成されたテーブルに対してのみプッシュダウンを自動的に有効にします。force: TiDB はすべてのテーブルに対してIndexLookUpプッシュダウンを有効にします。
tidb_index_merge_intersection_concurrency v6.5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
-1 - 範囲:
[1, 256] - この変数は、インデックスマージが実行する交差操作の最大同時実行数を設定します。これは、TiDB が動的プルーニングモードでパーティションテーブルにアクセスする場合にのみ有効です。実際の同時実行数は、
tidb_index_merge_intersection_concurrencyとパーティションテーブルのパーティション数のうち小さい方の値になります。 - デフォルト値
-1、値tidb_executor_concurrencyが使用されることを意味します。
tidb_index_lookup_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
20000 - 範囲:
[1, 2147483647] - 単位:行
- この変数は、
index lookup操作のバッチサイズを設定するために使用されます。 - OLAPシナリオではより大きな値を使用し、OLTPシナリオではより小さな値を使用してください。
tidb_index_serial_scan_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 256] - 単位:糸
- この変数は、
serial scan操作の同時実行数を設定するために使用されます。 - OLAPシナリオではより大きな値を使用し、OLTPシナリオではより小さな値を使用してください。
tidb_init_chunk_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
32 - 範囲:
[1, 32] - 単位:行
- この変数は、実行プロセス中に最初のチャンクの行数を設定するために使用されます。チャンクの行数は、単一のクエリに必要なメモリ量に直接影響します。クエリ内のすべての列の合計幅とチャンクの行数を考慮することで、単一のチャンクに必要なメモリを概算できます。これにエグゼキュータの同時実行性を組み合わせることで、単一のクエリに必要な合計メモリを概算できます。単一のチャンクの合計メモリは16 MiBを超えないことを推奨します。
tidb_instance_plan_cache_reserved_percentage v8.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0.1 - 範囲:
[0, 1] - この変数は、メモリ削除後にインスタンスプランキャッシュプラン キャッシュ用に予約されるアイドルメモリの割合を制御します。インスタンス プラン キャッシュで使用されるメモリが
tidb_instance_plan_cache_max_sizeで設定された制限に達すると、TiDB はアイドル メモリの割合がtidb_instance_plan_cache_reserved_percentageで設定された値を超えるまで、Least Recently Used (LRU) アルゴリズムを使用してメモリからメモリプランを削除し始めます。
tidb_instance_plan_cache_max_size はv8.4.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
125829120(120MiB) - 単位:バイト
- この変数はインスタンスプランキャッシュの最大メモリ使用量を設定します。
tidb_isolation_read_engines v4.0の新機能
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:はい
- デフォルト値:
tikv,tiflash,tidb - この変数は、TiDBがデータを読み取る際に使用できるstorageエンジンのリストを設定するために使用されます。
tidb_last_ddl_info v6.0.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- 型: 文字列
- これは読み取り専用変数です。TiDB内部で、現在のセッションにおける最後のDDL操作の情報を取得するために使用されます。
- 「query」:最後のDDLクエリ文字列。
- 「seq_num」:各DDL操作のシーケンス番号。DDL操作の順序を識別するために使用されます。
tidb_last_query_info v4.0.14で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- これは読み取り専用変数です。TiDB内部で、最後のDMLステートメントのトランザクション情報を照会するために使用されます。情報には以下が含まれます。
txn_scope: トランザクションの範囲。2 またはgloballocalなります。start_ts:トランザクションの開始タイムスタンプ。for_update_ts:直前に実行されたDMLステートメントのfor_update_tsの値。これはTiDBの内部用語で、テストに使用されます。通常、この情報は無視して構いません。error:エラーメッセージ(存在する場合)。ru_consumption:ステートメントの実行に消費されたRU 。
tidb_last_txn_info v4.0.9で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- この変数は、現在のセッション内の最後のトランザクション情報を取得するために使用されます。これは読み取り専用変数です。トランザクション情報には以下が含まれます。
- トランザクションの範囲。
- 開始およびコミットTS。
- トランザクションのコミットモードは、2フェーズコミット、1フェーズコミット、または非同期コミットのいずれかになります。
- 非同期コミットまたは1フェーズコミットから2フェーズコミットへのトランザクションフォールバックに関する情報。
- 発生したエラー。
tidb_last_plan_replayer_token v6.3.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- この変数は読み取り専用であり、現在のセッションにおける最後の
PLAN REPLAYER DUMPの実行結果を取得するために使用されます。
tidb_load_based_replica_read_threshold v7.0.0 で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
"1s" - 範囲:
[0s, 1h] - 型: 文字列
- この変数は、負荷ベースのレプリカ読み取りをトリガーするためのしきい値を設定するために使用されます。リーダー ノードの推定キュー時間がしきい値を超えると、TiDB はフォロワー ノードからのデータの読み取りを優先します。形式は、
"100ms"や"1s"などの期間です。詳細については、 ホットスポットの問題をトラブルシューティングする参照してください。
tidb_load_binding_timeout v8.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
200 - 範囲:
(0, 2147483647] - 単位:ミリ秒
- この変数は、バインディングの読み込みタイムアウトを制御するために使用されます。バインディングの読み込み実行時間がこの値を超えると、読み込みが停止します。
tidb_lock_unchanged_keys v7.1.1 および v7.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、以下のシナリオで特定のキーをロックするかどうかを制御するために使用されます。値が
ONに設定されている場合、これらのキーはロックされます。値がOFFに設定されている場合、これらのキーはロックされません。 - トランザクションの一貫性と合理性を維持するため、この値を変更することは推奨されません。TiDB のアップグレードによって、これら 2 つの修正が原因で深刻なパフォーマンスの問題が発生する場合、かつロックなしの動作が許容範囲内である場合 (前述の問題を参照)、この変数を
OFFに設定できます。
tidb_log_file_max_days はv5.3.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647]
- この変数は、現在の TiDB インスタンスでログを保持する最大日数を設定するために使用されます。デフォルト値は、設定ファイル内の
max-days設定の値です。変数の値を変更しても、現在の TiDB インスタンスにのみ影響します。TiDB を再起動すると、変数の値はリセットされ、設定値には影響しません。
tidb_low_resolution_tso
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、低精度TSO機能を有効にするかどうかを設定するために使用されます。この機能が有効になると、TiDBはキャッシュされたタイムスタンプを使用してデータを読み取ります。キャッシュされたタイムスタンプは、デフォルトでは2秒ごとに更新されます。v8.0.0以降では、
tidb_low_resolution_tso_update_intervalを使用して更新間隔を設定できます。 - 主な適用シナリオは、古いデータの読み取りが許容される場合に、小規模な読み取り専用トランザクションのTSO取得にかかるオーバーヘッドを削減することです。
- バージョン8.3.0以降、この変数はグローバルスコープをサポートします。
tidb_low_resolution_tso_update_interval v8.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
2000 - 範囲:
[10, 60000] - 単位:ミリ秒
- この変数は、低精度TSO機能で使用されるキャッシュされたタイムスタンプの更新間隔をミリ秒単位で設定するために使用されます。
- この変数は、
tidb_low_resolution_tsoが有効になっている場合にのみ利用可能です。
tidb_max_auto_analyze_time はv6.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
43200(12時間) - 範囲:
[0, 2147483647] - 単位:秒
- この変数は、自動タスク
ANALYZEの最大実行時間を指定するために使用されます。自動タスクANALYZEの実行時間が指定された時間を超えると、タスクは終了します。この変数の値が0の場合、自動タスクANALYZEの最大実行時間に制限はありません。
tidb_max_bytes_before_tiflash_external_group_by v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 9223372036854775807] - この変数は、 TiFlashのハッシュ集計演算子の最大メモリ使用量をバイト
GROUP BYで指定するために使用します。メモリ使用量が指定された値を超えると、 TiFlash はハッシュ集計演算子をトリガーしてディスクに書き出します。この変数の値が-1の場合、TiDB はこの変数をTiFlashに渡しません。この変数の値が0以上の場合のみ、TiDB はこの変数をTiFlashに渡します。この変数の値が0の場合、メモリ使用量は無制限、つまりTiFlashハッシュ集計演算子は書き出しをトリガーしません。詳細は、 TiFlashディスクへのスピル参照してください。
注記:
- TiDBクラスタに複数のTiFlashノードがある場合、集計処理は通常、複数のTiFlashノードに分散して実行されます。この変数は、単一のTiFlashノードにおける集計演算子の最大メモリ使用量を制御します。
- この変数が
-1に設定されている場合、 TiFlash は、自身の構成項目max_bytes_before_external_group_byの値に基づいて、集約演算子の最大メモリ使用量を決定します。
tidb_max_bytes_before_tiflash_external_join v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 9223372036854775807] - この変数は、 TiFlashのハッシュ結合演算子の最大メモリ使用量を
JOIN単位で指定するために使用されます。メモリ使用量が指定された値を超えると、 TiFlash はハッシュ結合演算子をトリガーしてディスクに書き出します。この変数の値が-1の場合、TiDB はこの変数をTiFlashに渡しません。この変数の値が0以上の場合のみ、TiDB はこの変数をTiFlashに渡します。この変数の値が0の場合、メモリ使用量は無制限、つまりTiFlashハッシュ結合演算子は書き出しをトリガーしません。詳細は、 TiFlashディスクへのスピルを参照してください。
注記:
- TiDBクラスタに複数のTiFlashノードがある場合、結合処理は通常、複数のTiFlashノード上で分散して実行されます。この変数は、単一のTiFlashノード上での結合演算子の最大メモリ使用量を制御します。
- この変数が
-1に設定されている場合、 TiFlash は、自身の構成項目max_bytes_before_external_joinの値に基づいて、結合演算子の最大メモリ使用量を決定します。
tidb_max_bytes_before_tiflash_external_sort v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 9223372036854775807] - この変数は、 TiFlashの TopN および Sort 演算子の最大メモリ使用量をバイト単位で指定するために使用されます。メモリ使用量が指定された値を超えると、 TiFlash はTopN および Sort 演算子をトリガーしてディスクに書き出します。この変数の値が
-1の場合、TiDB はこの変数をTiFlashに渡しません。この変数の値が0以上の場合のみ、TiDB はこの変数をTiFlashに渡します。この変数の値が0の場合、メモリ使用量は無制限、つまりTiFlash のTopN および Sort 演算子は書き出しをトリガーしません。詳細については、 TiFlashディスクへのスピル参照してください。
注記:
- TiDBクラスタに複数のTiFlashノードがある場合、TopNとSortは通常、複数のTiFlashノードで分散実行されます。この変数は、単一のTiFlashノードにおけるTopNおよびSort演算子の最大メモリ使用量を制御します。
- この変数が
-1に設定されている場合、 TiFlash は、独自の構成項目max_bytes_before_external_sortの値に基づいて、TopN および Sort オペレーターの最大メモリ使用量を決定します。
tidb_max_chunk_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1024 - 範囲:
[32, 2147483647] - 単位:行
- この変数は、実行プロセス中にチャンク内の最大行数を設定するために使用されます。大きすぎる値を設定すると、キャッシュの局所性の問題が発生する可能性があります。この変数の推奨値は 65536 以下です。チャンクの行数は、単一のクエリに必要なメモリ量に直接影響します。クエリ内のすべての列の合計幅とチャンクの行数を考慮することで、単一のチャンクに必要なメモリを概算できます。これをエグゼキュータの同時実行性と組み合わせることで、単一のクエリに必要な合計メモリを概算できます。単一のチャンクの合計メモリは16 MiB を超えないことを推奨します。クエリに大量のデータが含まれており、単一のチャンクではすべてのデータを処理するのに不十分な場合、TiDB はそれを複数回処理し、チャンクサイズが
tidb_max_chunk_sizeに達するまで、各処理反復でチャンクサイズを 2tidb_init_chunk_sizeにします。
tidb_max_delta_schema_count はv2.1.18 および v3.0.5 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1024 - 範囲:
[100, 16384] - この変数は、キャッシュ可能なスキーマバージョンの最大数(対応するバージョンに合わせて変更されたテーブルID)を設定するために使用されます。値の範囲は100~16384です。
tidb_max_paging_size v6.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
50000 - 範囲:
[1, 9223372036854775807] - 単位:行
- この変数は、コプロセッサのページング要求処理中に処理する最大行数を設定するために使用されます。値を小さく設定しすぎると、TiDBとTiKV間のRPC回数が増加します。一方、値を大きく設定しすぎると、データのロードやフルテーブルスキャンなど、場合によってはメモリ使用量が過剰になります。この変数のデフォルト値は、OLAPシナリオよりもOLTPシナリオで優れたパフォーマンスを発揮します。アプリケーションがstorageエンジンとしてTiKVのみを使用している場合は、OLAPワークロードクエリを実行する際にこの変数の値を増やすことを検討してください。これにより、パフォーマンスが向上する可能性があります。
tidb_max_tiflash_threads はv6.1.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 256] - 単位:糸
- この変数は、 TiFlashがリクエストを実行する際の最大同時実行数を設定するために使用されます。デフォルト値は
-1で、このシステム変数が無効であり、最大同時実行数はTiFlash構成profiles.default.max_threadsの設定に依存することを示しています。値が0の場合、最大スレッド数はTiFlashによって自動的に構成されます。
tidb_mem_oom_action v6.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
CANCEL - 可能な
LOG:CANCEL
- 単一の SQL ステートメントが
tidb_mem_quota_queryで指定されたメモリクォータを超え、ディスクに書き出すことができない場合に TiDB が実行する操作を指定します。詳細はTiDBメモリ制御参照してください。
- デフォルト値は
CANCELですが、TiDB v4.0.2 以前のバージョンではデフォルト値はLOGです。 - この設定は以前はオプション
tidb.toml(oom-action)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_mem_quota_analyze v6.1.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 9223372036854775807] - 単位:バイト
- この変数は、TiDB の統計情報更新における最大メモリ使用量を制御します。このようなメモリ使用量は、手動で
ANALYZE TABLE実行した場合と、TiDB がバックグラウンドでタスクを自動的に分析した場合に発生します。合計メモリ使用量がこのしきい値を超えると、ユーザーが実行したANALYZE終了し、より低いサンプリング レートを試すか、後で再試行するように促すエラー メッセージが表示されます。TiDB のバックグラウンドで自動タスクがメモリしきい値を超えたために終了し、使用されているサンプリング レートがデフォルト値よりも高い場合、TiDB はデフォルトのサンプリング レートを使用して更新を再試行します。この変数の値が負またはゼロの場合、TiDB は手動および自動更新タスクの両方のメモリ使用量を制限しません。
注記:
TiDBクラスタでは、TiDB起動設定ファイルで
run-auto-analyze有効になっている場合にのみ、auto_analyzeトリガーされます。
tidb_mem_quota_apply_cache v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
33554432(32 MiB) - 範囲:
[0, 9223372036854775807] - 単位:バイト
- この変数は、
Apply演算子内のローカルキャッシュのメモリ使用量しきい値を設定するために使用されます。 Apply演算子内のローカルキャッシュは、Apply演算子の計算を高速化するために使用されます。変数を0に設定すると、Applyキャッシュ機能を無効にできます。
tidb_mem_quota_binding_cache v6.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
67108864 - 範囲:
[0, 2147483647] - 単位:バイト
- この変数は、バインディングのキャッシュに使用されるメモリのしきい値を設定するために使用されます。
- システムが過剰なバインディングを作成またはキャプチャし、メモリ領域を過剰に使用すると、TiDB はログに警告を返します。この場合、キャッシュは利用可能なすべてのバインディングを保持できず、どのバインディングを保存するかを判断できません。そのため、一部のクエリでバインディングが見つからない場合があります。この問題を解決するには、この変数の値を増やして、バインディングのキャッシュに使用されるメモリを増やします。このパラメータを変更した後は、コマンド
admin reload bindingsを実行してバインディングを再読み込みし、変更を検証する必要があります。
tidb_mem_quota_query
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1073741824(1 GiB) - 範囲:
[-1, 9223372036854775807] - 単位:バイト
- TiDB v6.1.0より前のバージョンでは、これはセッションスコープ変数であり、初期値として
tidb.tomlからmem-quota-queryの値を使用します。v6.1.0以降では、tidb_mem_quota_queryはSESSION | GLOBALスコープ変数です。 - TiDB v6.5.0 より前のバージョンでは、この変数はクエリのメモリ割り当てのしきい値を設定するために使用されます。実行中にクエリのメモリ割り当てがしきい値を超えると、TiDB は
tidb_mem_oom_actionで定義された操作を実行します。 - TiDB v6.5.0 以降のバージョンでは、この変数はセッションのメモリクォータのしきい値を設定するために使用されます。実行中にセッションのメモリクォータがしきい値を超えると、TiDB は
tidb_mem_oom_actionで定義された操作を実行します。TiDB v6.5.0 以降では、セッションのメモリ使用量には、セッション内のトランザクションによって消費されたメモリが含まれることに注意してください。TiDB v6.5.0 以降のバージョンにおけるトランザクションのメモリ使用量の制御動作については、txn-total-size-limit参照してください。 - 変数の値を
0または-1に設定すると、メモリのしきい値は正の無限大になります。128より小さい値を設定すると、デフォルト値として128が使用されます。
tidb_memory_debug_mode_alarm_ratio
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0 - この変数は、TiDBのメモリデバッグモードで許容されるメモリ統計エラー値を表します。
- この変数はTiDBの内部テストに使用されます。この変数を設定することは推奨されません。
tidb_memory_debug_mode_min_heap_inuse
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - この変数はTiDBの内部テストに使用されます。この変数を設定することは推奨されません。この変数を有効にすると、TiDBのパフォーマンスに影響が出ます。
- このパラメータを設定すると、TiDB はメモリデバッグモードに入り、メモリ追跡の精度を分析します。TiDB は、後続の SQL ステートメントの実行中に頻繁に GC をトリガーし、実際のメモリ使用量とメモリ統計を比較します。現在のメモリ使用量が
tidb_memory_debug_mode_min_heap_inuseより大きく、メモリ統計の誤差がtidb_memory_debug_mode_alarm_ratio超える場合、TiDB は関連するメモリ情報をログとファイルに出力します。
tidb_memory_usage_alarm_ratio
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0.7 - 範囲:
[0.0, 1.0]
この変数は、tidb-server のメモリアラームをトリガーするメモリ使用率を設定します。デフォルトでは、TiDB のメモリ使用率が総メモリの 70% を超え、かついずれかの警報状態が満たされた場合、TiDB はアラームログを出力。
この変数が
0または1に設定されている場合、メモリしきい値アラーム機能が無効になります。この変数が
0より大きく1より小さい値に設定されている場合、メモリしきい値アラーム機能が有効になっていることを意味します。- システム変数
tidb_server_memory_limitの値が0の場合、メモリアラームのしきい値はtidb_memory-usage-alarm-ratio * system memory sizeになります。 - システム変数
tidb_server_memory_limitの値が0より大きい値に設定されている場合、メモリアラームのしきい値はtidb_memory-usage-alarm-ratio * tidb_server_memory_limitになります。
- システム変数
tidb_memory_usage_alarm_keep_record_num v6.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
5 - 範囲:
[1, 10000] - tidb-serverのメモリ使用量がメモリアラームのしきい値を超えてアラームが発生した場合、TiDBはデフォルトでは直近5件のアラーム発生時に生成されたステータスファイルのみを保持します。この件数は、この変数で調整できます。
tidb_merge_join_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- 範囲:
[1, 256] - デフォルト値:
1 - この変数は、クエリ実行時の
MergeJoin演算子の同時実行数を設定します。 - この変数を設定することは推奨されません。この変数の値を変更すると、データの正確性に問題が生じる可能性があります。
tidb_merge_partition_stats_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
1 - この変数は、TiDB がパーティション テーブルを分析する際に、パーティションテーブルパーティションテーブルに対する統計情報をマージする同時実行回数を指定します。
tidb_enable_async_merge_global_stats はv7.5.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ONを v7.5.0 より前のバージョンから v7.5.0 以降のバージョンにアップグレードする場合、デフォルト値はOFFになります。 - この変数は、TiDBがグローバル統計情報を非同期的にマージしてメモリ不足の問題を回避するために使用されます。
tidb_metric_query_range_duration v4.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
60 - 範囲:
[10, 216000] - 単位:秒
- この変数は、
METRICS_SCHEMAをクエリしたときに生成される Prometheus ステートメントの範囲期間を設定するために使用されます。
tidb_metric_query_step v4.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
60 - 範囲:
[10, 216000] - 単位:秒
- この変数は、クエリ
METRICS_SCHEMAを実行する際に生成されるPrometheusステートメントのステップを設定するために使用されます。
tidb_min_paging_size v6.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
128 - 範囲:
[1, 9223372036854775807] - 単位:行
- この変数は、コプロセッサのページング要求処理中に最小行数を設定するために使用されます。値を小さく設定しすぎると、TiDBとTiKV間のRPC要求数が増加します。一方、値を大きく設定しすぎると、Limitを使用したIndexLookupクエリの実行時にパフォーマンスが低下する可能性があります。この変数のデフォルト値は、OLAPシナリオよりもOLTPシナリオで優れたパフォーマンスを発揮します。アプリケーションがstorageエンジンとしてTiKVのみを使用している場合は、OLAPワークロードクエリを実行する際にこの変数の値を増やすことを検討してください。これにより、パフォーマンスが向上する可能性があります。
この図に示すように、 tidb_enable_paging有効になっている場合、TPCH のパフォーマンスはtidb_min_paging_sizeとtidb_max_paging_sizeの設定によって影響を受けます。縦軸は実行時間で、値が小さいほど良いことを示します。
tidb_mpp_store_fail_ttl
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ:期間
- デフォルト値:
0s以前のバージョンでは、デフォルト値は60sです。 - 新しく起動したTiFlashノードはサービスを提供しません。クエリの失敗を防ぐため、TiDBはtidb-serverが新しく起動したTiFlashノードにクエリを送信することを制限します。この変数は、新しく起動したTiFlashノードにリクエストが送信されない時間範囲を示します。
tidb_multi_statement_mode v4.0.11で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
OFF ONWARN値:OFF- この変数は、同じ
COM_QUERY呼び出しで複数のクエリを実行することを許可するかどうかを制御します。 - SQLインジェクション攻撃の影響を軽減するため、TiDBはデフォルトで、同じ
COM_QUERYの呼び出しで複数のクエリが実行されないようにするようになりました。この変数は、以前のバージョンのTiDBからのアップグレードパスの一部として使用されることを想定しています。以下の動作が適用されます。
注記:
デフォルト値の
OFFのみが安全とみなされます。アプリケーションがTiDBの以前のバージョン向けに設計されている場合は、設定tidb_multi_statement_mode=ON必要になる場合があります。アプリケーションで複数のステートメントのサポートが必要な場合は、オプションtidb_multi_statement_modeではなく、クライアントライブラリが提供する設定を使用することをお勧めします。例:
- go-sql-driver (
multiStatements)- コネクタ/J (
allowMultiQueries)- PHP mysqli (
mysqli_multi_query)
tidb_nontransactional_ignore_error v6.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非トランザクションDMLステートメントでエラーが発生した場合に、直ちにエラーを返すかどうかを指定します。
- 値が
OFFに設定されている場合、非トランザクション DML ステートメントは最初のエラーが発生した時点で直ちに停止し、エラーを返します。以降のすべてのバッチはキャンセルされます。 - 値が
ONに設定されている場合、バッチ処理中にエラーが発生すると、すべてのバッチが実行されるまで、後続のバッチ処理が継続して実行されます。実行プロセス中に発生したすべてのエラーは、結果としてまとめて返されます。
tidb_opt_agg_push_down
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、オプティマイザが集計関数をJoin、Projection、およびUnionAllの前の位置にプッシュダウンする最適化操作を実行するかどうかを設定するために使用されます。
- クエリにおける集計処理が遅い場合は、変数の値をONに設定できます。
tidb_opt_broadcast_cartesian_join
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
1 - 範囲:
[0, 2] - ブロードキャストによる直交座標結合を許可するかどうかを示します。
0、ブロードキャスト カルテシアン結合が許可されていないことを意味します。21、tidb_broadcast_join_threshold_countに基づいて許可されることを意味します。62、テーブル サイズがしきい値を超えても常に許可されることを意味します。- この変数はTiDB内部で使用されているため、その値を変更することは推奨されません。
tidb_opt_concurrency_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 18446744073709551615] - デフォルト値:
3.0 - TiDBでGolangゴルーチンを起動する際のCPUコストを示します。この変数は内部的にコストモデルで使用されるため、値を変更することは推奨されません。
tidb_opt_copcpu_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 18446744073709551615] - デフォルト値:
3.0 - TiKVコプロセッサーが1行を処理する際のCPUコストを示します。この変数はコストモデル内部で使用されるため、値を変更することは推奨されません。
tidb_opt_correlation_exp_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
1 - 範囲:
[0, 2147483647] - 列順序の相関に基づいて行数を推定する方法が利用できない場合、ヒューリスティック推定法が使用されます。この変数は、ヒューリスティック推定法の動作を制御するために使用されます。
- 値が0の場合、ヒューリスティック法は使用されません。
- 値が0より大きい場合:
- 値が大きいほど、ヒューリスティック手法においてインデックススキャンが使用される可能性が高いことを示します。
- 値が小さいほど、ヒューリスティック手法ではテーブルスキャンが使用される可能性が高いことを示します。
tidb_opt_correlation_threshold
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- デフォルト値:
0.9 - 範囲:
[0, 1] - この変数は、列順序相関を使用して行数を推定するかどうかを決定するしきい値を設定するために使用されます。現在の列と
handle番目の列の順序相関がしきい値を超えると、この方法が有効になります。
tidb_opt_cpu_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
3.0 - TiDBが1行を処理する際のCPUコストを示します。この変数は内部的にコストモデルで使用されるため、値を変更することは推奨されません。
tidb_opt_derive_topn v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - ウィンドウ関数からTopNまたはLimitを導出する最適化ルールを有効にするかどうかを制御します。
tidb_opt_desc_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 18446744073709551615] - デフォルト値:
3.0 - TiKVがディスクから1行を降順でスキャンする際のコストを示します。この変数はコストモデルの内部で使用されるため、値を変更することは推奨されません。
tidb_opt_disk_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 18446744073709551615] - デフォルト値:
1.5 - TiDBが一時ディスクから1バイトのデータを読み書きする際のI/Oコストを示します。この変数は内部的にコストモデルで使用されるため、値を変更することは推奨されません。
tidb_opt_distinct_agg_push_down
- 範囲: セッション
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、オプティマイザが集約関数を
distinct(select count(distinct a) from tなど) でコプロセッサーにプッシュダウンする最適化操作を実行するかどうかを設定するために使用されます。 - クエリで
distinct操作を含む集計関数が遅い場合は、変数の値を1に設定できます。
次の例では、 tidb_opt_distinct_agg_push_down有効になる前に、TiDB は TiKV からすべてのデータを読み込み、TiDB 側でdistinct実行する必要があります。5 tidb_opt_distinct_agg_push_down有効になった後、 distinct aコプロセッサーにプッシュダウンされ、 group by番目の列test.t.aがHashAgg_5に追加されます。
mysql> desc select count(distinct a) from test.t;
+-------------------------+----------+-----------+---------------+------------------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------+----------+-----------+---------------+------------------------------------------+
| StreamAgg_6 | 1.00 | root | | funcs:count(distinct test.t.a)->Column#4 |
| └─TableReader_10 | 10000.00 | root | | data:TableFullScan_9 |
| └─TableFullScan_9 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+-------------------------+----------+-----------+---------------+------------------------------------------+
3 rows in set (0.01 sec)
mysql> set session tidb_opt_distinct_agg_push_down = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> desc select count(distinct a) from test.t;
+---------------------------+----------+-----------+---------------+------------------------------------------+
| id | estRows | task | access object | operator info |
+---------------------------+----------+-----------+---------------+------------------------------------------+
| HashAgg_8 | 1.00 | root | | funcs:count(distinct test.t.a)->Column#3 |
| └─TableReader_9 | 1.00 | root | | data:HashAgg_5 |
| └─HashAgg_5 | 1.00 | cop[tikv] | | group by:test.t.a, |
| └─TableFullScan_7 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+---------------------------+----------+-----------+---------------+------------------------------------------+
4 rows in set (0.00 sec)
tidb_opt_enable_correlation_adjustment
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、オプティマイザが列順序の相関に基づいて行数を推定するかどうかを制御するために使用されます。
tidb_opt_enable_hash_join は、v6.5.6、v7.1.2、v7.4.0 で新しく追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、オプティマイザがテーブルのハッシュ結合を選択するかどうかを制御するために使用されます。デフォルト値は
ONですOFFに設定すると、他の結合アルゴリズムが利用できない場合を除き、オプティマイザは実行プラン生成時にハッシュ結合を選択しません。 - システム変数
tidb_opt_enable_hash_joinとヒントHASH_JOIN両方が設定されている場合、ヒントHASH_JOINが優先されます。7tidb_opt_enable_hash_joinOFF設定されている場合でも、クエリでヒントHASH_JOINを指定すると、TiDBオプティマイザはハッシュ結合プランを適用します。
tidb_opt_enable_non_eval_scalar_subquery v7.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、最適化段階で展開可能な定数サブクエリの実行を
EXPLAINステートメントで無効にするかどうかを制御するために使用されます。この変数がOFFに設定されている場合、EXPLAINステートメントは最適化段階でサブクエリを事前に展開します。この変数がONに設定されている場合、EXPLAINステートメントは最適化段階でサブクエリを展開しません。詳細については、以下を参照してください。 サブクエリ展開を無効にするサブクエリ
tidb_opt_enable_late_materialization v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、 TiFlashの遅延実現機能を有効にするかどうかを制御するために使用されます。 TiFlash の遅延実体化は高速スキャンモードでは有効にならないことに注意してください。
- この変数を
OFFに設定してTiFlash の遅延マテリアライゼーション機能を無効にした場合、フィルタ条件 (WHERE句) を含むSELECTステートメントを処理するために、 TiFlash はフィルタリング前に必要な列のすべてのデータをスキャンします。この変数をONに設定してTiFlash の遅延マテリアライゼーション機能を有効にすると、 TiFlash は、TableScan オペレータにプッシュダウンされたフィルタ条件に関連する列データを最初にスキャンし、条件を満たす行をフィルタリングしてから、これらの行の他の列のデータをスキャンしてさらに計算を行うことができ、データ処理の IO スキャンと計算を削減できます。
tidb_opt_enable_mpp_shared_cte_execution v7.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、非再帰的な共通テーブル式(CTE) TiFlash MPP上で実行できるかどうかを制御します。デフォルトでは、この変数が無効になっている場合、CTEはTiDB上で実行されますが、この機能を有効にした場合と比較してパフォーマンスに大きな差が生じます。
tidb_opt_enable_fuzzy_binding v7.6.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数はクロスデータベースバインディング機能を有効にするかどうかを制御します。
tidb_opt_enable_no_decorrelate_in_select v8.5.4で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、
SELECTリスト内のサブクエリを含むすべてのクエリに対してオプティマイザがNO_DECORRELATE()ヒントを適用するかどうかを制御します。
tidb_opt_enable_semi_join_rewrite はv8.5.4 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、サブクエリを含むすべてのクエリに対してオプティマイザが
SEMI_JOIN_REWRITE()ヒントを適用するかどうかを制御します。
tidb_opt_fix_control はv6.5.3 および v7.1.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 文字列
- デフォルト値:
"" - この変数は、オプティマイザの内部動作の一部を制御するために使用されます。
- オプティマイザの動作は、ユーザーシナリオやSQLステートメントによって異なる場合があります。この変数を使用することで、オプティマイザをより細かく制御でき、オプティマイザの動作変更によってアップグレード後に発生するパフォーマンス低下を防ぐことができます。
- より詳細な概要については、オプティマイザー修正コントロール参照してください。
tidb_opt_force_inline_cte v6.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、セッション全体の共通テーブル式(CTE)をインライン化するかどうかを制御するために使用されます。デフォルト値は
OFFで、デフォルトでは CTE のインライン化は強制されません。ただし、ヒントMERGE()を指定することで CTE をインライン化できます。この変数をONに設定すると、このセッション内のすべての CTE(再帰 CTE を除く)が強制的にインライン化されます。
tidb_opt_advanced_join_hint v7.0.0 の新機能
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、
HASH_JOIN()ヒントやMERGE_JOIN()ヒントなどの結合方法ヒントが、LEADING()ヒントの使用を含む結合したテーブルの再配置最適化プロセスに影響を与えるかどうかを制御するために使用されます。デフォルト値はONで、これは影響を与えないことを意味します。9に設定すると、結合方法ヒントとLEADING()ヒントOFF同時に使用されるシナリオで競合が発生する可能性があります。
注記:
v7.0.0より前のバージョンでは、この変数を
OFFに設定した場合と同様の動作となります。前方互換性を確保するため、以前のバージョンからv7.0.0以降のクラスタにアップグレードする場合、この変数はOFFに設定されます。より柔軟なヒント動作を実現するには、パフォーマンスの低下がないことを条件に、この変数をONに切り替えることを強くお勧めします。
tidb_opt_insubq_to_join_and_agg
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
タイプ: ブール値
デフォルト値:
ONこの変数は、サブクエリを結合と集計に変換する最適化ルールを有効にするかどうかを設定するために使用されます。
例えば、この最適化ルールを有効にすると、サブクエリは次のように変換されます。
select * from t where t.a in (select aa from t1);サブクエリは次のように結合に変換されます。
select t.* from t, (select aa from t1 group by aa) tmp_t where t.a = tmp_t.aa;aa列目のt1uniqueとnot nullに制限されている場合、集計なしで以下のステートメントを使用できます。select t.* from t, t1 where t.a=t1.aa;
tidb_opt_join_reorder_threshold
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - この変数は、TiDBの結合したテーブルの再配置アルゴリズムの選択を制御するために使用されます。Join 結合したテーブルの再配置に参加するノード数がこのしきい値を超えると、TiDBは貪欲アルゴリズムを選択し、このしきい値を下回ると、TiDBは動的計画法アルゴリズムを選択します。
- 現在、OLTPクエリの場合はデフォルト値を維持することを推奨します。OLAPクエリの場合は、OLAPシナリオでの接続順序を改善するために、変数の値を10~15に設定することをお勧めします。
tidb_opt_limit_push_down_threshold
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
100 - 範囲:
[0, 2147483647] - この変数は、Limit または TopN 演算子を TiKV まで下げるかどうかを決定するしきい値を設定するために使用されます。
- Limit演算子またはTopN演算子の値がこのしきい値以下の場合、これらの演算子は強制的にTiKVにプッシュダウンされます。この変数により、推定値の誤りなどが原因でLimit演算子またはTopN演算子をTiKVにプッシュダウンできないという問題が解決されます。
tidb_opt_memory_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
0.001 - TiDBが1行を保存するために必要メモリ量を示します。この変数は内部的にコストモデルで使用されるため、値を変更することは推奨されません。
tidb_opt_mpp_outer_join_fixed_build_side v5.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - 変数の値が
ON場合、左結合演算子は常に内部テーブルを構築側として使用し、右結合演算子は常に外部テーブルを構築側として使用します。値をOFFに設定すると、外部結合演算子はテーブルのどちら側でも構築側として使用できます。
tidb_opt_network_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1.0 - ネットワーク経由で1バイトのデータを転送する際の正味コストを示します。この変数はコストモデルの内部で使用されるため、値を変更することは推奨されません。
tidb_opt_objective v7.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
moderate - 可能な
determinate:moderate - この変数はオプティマイザの目的を制御します。1
moderateTiDB v7.4.0 より前のバージョンにおけるデフォルトの動作を維持し、オプティマイザはより多くの情報を使用してより良い実行プランを生成しようとします。3determinateはより保守的になり、実行プランをより安定させます。 - リアルタイム統計とは、DMLステートメントに基づいて自動的に更新される行の総数と変更された行の数です。この変数が
moderate(デフォルト)に設定されている場合、TiDBはリアルタイム統計に基づいて実行プランを生成します。この変数がdeterminateに設定されている場合、TiDBは実行プランの生成にリアルタイム統計を使用しないため、実行プランがより安定します。 - 長期的に安定したOLTPワークロードを維持する場合、またはユーザーが既存の実行プランに満足している場合は、予期せぬ実行プランの変更の可能性を減らすために、モード
determinateを使用することをお勧めします。さらに、LOCK STATSを使用することで、統計情報の変更を防ぎ、実行プランをより安定させることができます。
tidb_opt_ordering_index_selectivity_ratio v8.0.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
タイプ: フロート
デフォルト値:
-1範囲:
[-1, 1]この変数は、SQL文に
ORDER BYまたはLIMITの句がある場合に、SQL文ORDER BYに一致するインデックスの推定行数を制御しますが、一部のフィルタ条件はカバーしません。これは、システム変数tidb_opt_ordering_index_selectivity_thresholdと同じクエリパターンに対応します。
実装方法が異なるのは、条件を満たす行が見つかる可能性のある範囲の比率またはパーセンテージを適用する点です。
値が
-1(デフォルト値)または0未満の場合、この比率は無効になります。5から1の間0値を指定すると、0%から100%までの比率が適用されます(例えば、0.550%に相当します)。以下の例では、テーブル
tは合計 1,000,000 行があります。同じクエリが使用されますが、tidb_opt_ordering_index_selectivity_ratioの値は異なります。例のクエリには、行のごく一部 (1,000,000 行のうち 9,000 行) を条件とするWHERE句述語が含まれています。7ORDER BY aサポートするインデックス (インデックスia) はありますが、bのフィルタはこのインデックスには含まれていません。実際のデータ分布によっては、WHERE句とLIMIT 1に一致する行は、フィルタなしインデックスをスキャンしたときに最初にアクセスされる行として見つかる場合もあれば、最悪の場合、ほぼすべての行が処理された後に見つかる場合もあります。各例では、インデックスヒントを使用してestRowsへの影響を示しています。最終的なプランの選択は、他のプランの利用可能性とコストによって決まります。
最初の例では、デフォルト値の
-1を使用しています。これは、既存の推定式を使用するものです。デフォルトでは、対象となる行が見つかる前に、推定のために少数の行がスキャンされます。> SET SESSION tidb_opt_ordering_index_selectivity_ratio = -1; > EXPLAIN SELECT * FROM t USE INDEX (ia) WHERE b <= 9000 ORDER BY a LIMIT 1; +-----------------------------------+---------+-----------+-----------------------+---------------------------------+ | id | estRows | task | access object | operator info | +-----------------------------------+---------+-----------+-----------------------+---------------------------------+ | Limit_12 | 1.00 | root | | offset:0, count:1 | | └─Projection_22 | 1.00 | root | | test.t.a, test.t.b, test.t.c | | └─IndexLookUp_21 | 1.00 | root | | | | ├─IndexFullScan_18(Build) | 109.20 | cop[tikv] | table:t, index:ia(a) | keep order:true | | └─Selection_20(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) | | └─TableRowIDScan_19 | 109.20 | cop[tikv] | table:t | keep order:false | +-----------------------------------+---------+-----------+-----------------------+---------------------------------+2番目の例では
0使用していますが、これは条件を満たす行が見つかるまでにスキャンされる行の割合が0%であることを前提としています。> SET SESSION tidb_opt_ordering_index_selectivity_ratio = 0; > EXPLAIN SELECT * FROM t USE INDEX (ia) WHERE b <= 9000 ORDER BY a LIMIT 1; +-----------------------------------+---------+-----------+-----------------------+---------------------------------+ | id | estRows | task | access object | operator info | +-----------------------------------+---------+-----------+-----------------------+---------------------------------+ | Limit_12 | 1.00 | root | | offset:0, count:1 | | └─Projection_22 | 1.00 | root | | test.t.a, test.t.b, test.t.c | | └─IndexLookUp_21 | 1.00 | root | | | | ├─IndexFullScan_18(Build) | 1.00 | cop[tikv] | table:t, index:ia(a) | keep order:true | | └─Selection_20(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) | | └─TableRowIDScan_19 | 1.00 | cop[tikv] | table:t | keep order:false | +-----------------------------------+---------+-----------+-----------------------+---------------------------------+3番目の例では、条件を満たす行が見つかるまでに行の10%がスキャンされると想定した
0.1使用しています。この条件は非常に選択的で、条件を満たす行はわずか1%です。したがって、最悪の場合、条件を満たす1%の行を見つけるまでに、行の99%をスキャンする必要があるかもしれません。その99%の10%は約9.9%であり、これはestRowsに反映されます。> SET SESSION tidb_opt_ordering_index_selectivity_ratio = 0.1; > EXPLAIN SELECT * FROM t USE INDEX (ia) WHERE b <= 9000 ORDER BY a LIMIT 1; +-----------------------------------+----------+-----------+-----------------------+---------------------------------+ | id | estRows | task | access object | operator info | +-----------------------------------+----------+-----------+-----------------------+---------------------------------+ | Limit_12 | 1.00 | root | | offset:0, count:1 | | └─Projection_22 | 1.00 | root | | test.t.a, test.t.b, test.t.c | | └─IndexLookUp_21 | 1.00 | root | | | | ├─IndexFullScan_18(Build) | 99085.21 | cop[tikv] | table:t, index:ia(a) | keep order:true | | └─Selection_20(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) | | └─TableRowIDScan_19 | 99085.21 | cop[tikv] | table:t | keep order:false | +-----------------------------------+----------+-----------+-----------------------+---------------------------------+4番目の例では
1.0使用していますが、これは条件を満たす行が見つかる前にすべての行がスキャンされることを前提としています。> SET SESSION tidb_opt_ordering_index_selectivity_ratio = 1; > EXPLAIN SELECT * FROM t USE INDEX (ia) WHERE b <= 9000 ORDER BY a LIMIT 1; +-----------------------------------+-----------+-----------+-----------------------+---------------------------------+ | id | estRows | task | access object | operator info | +-----------------------------------+-----------+-----------+-----------------------+---------------------------------+ | Limit_12 | 1.00 | root | | offset:0, count:1 | | └─Projection_22 | 1.00 | root | | test.t.a, test.t.b, test.t.c | | └─IndexLookUp_21 | 1.00 | root | | | | ├─IndexFullScan_18(Build) | 990843.14 | cop[tikv] | table:t, index:ia(a) | keep order:true | | └─Selection_20(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) | | └─TableRowIDScan_19 | 990843.14 | cop[tikv] | table:t | keep order:false | +-----------------------------------+-----------+-----------+-----------------------+---------------------------------+5番目の例も
1.0使用していますが、aに述語を追加することで、最悪の場合のスキャン範囲を制限しています。これは、WHERE a <= 9000インデックスに一致し、約9,000行が該当するためです。7bフィルタ述語はインデックスに含まれていないため、b <= 9000に一致する行が見つかる前に、約9,000行すべてがスキャンされたとみなされます。> SET SESSION tidb_opt_ordering_index_selectivity_ratio = 1; > EXPLAIN SELECT * FROM t USE INDEX (ia) WHERE a <= 9000 AND b <= 9000 ORDER BY a LIMIT 1; +------------------------------------+---------+-----------+-----------------------+------------------------------------+ | id | estRows | task | access object | operator info | +------------------------------------+---------+-----------+-----------------------+------------------------------------+ | Limit_12 | 1.00 | root | | offset:0, count:1 | | └─Projection_22 | 1.00 | root | | test.t.a, test.t.b, test.t.c | | └─IndexLookUp_21 | 1.00 | root | | | | ├─IndexRangeScan_18(Build) | 9074.99 | cop[tikv] | table:t, index:ia(a) | range:[-inf,9000], keep order:true | | └─Selection_20(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) | | └─TableRowIDScan_19 | 9074.99 | cop[tikv] | table:t | keep order:false | +------------------------------------+---------+-----------+-----------------------+------------------------------------+
tidb_opt_ordering_index_selectivity_threshold v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- デフォルト値:
0 - 範囲:
[0, 1] - この変数は、SQL文にフィルタ条件を含む句が
ORDER BYまたはLIMITある場合に、オプティマイザがインデックスを選択する方法を制御するために使用されます。 - このようなクエリの場合、オプティマイザは、対応するインデックスを選択して、
ORDER BYとLIMIT項を満たすことを検討します(たとえそのインデックスがフィルタ条件を満たしていなくても)。ただし、データ分布の複雑さから、このシナリオではオプティマイザが最適ではないインデックスを選択する可能性があります。 - この変数はしきい値を表します。フィルタリング条件を満たすインデックスが存在し、その選択性推定値がこのしきい値よりも低い場合、オプティマイザは
ORDER BYとLIMITを満たすために使用されるインデックスの選択を避けます。代わりに、フィルタリング条件を満たすインデックスを優先します。 - 例えば、変数が
0に設定されている場合、オプティマイザはデフォルトの動作を維持します。変数が1に設定されている場合、オプティマイザは常にフィルタ条件を満たすインデックスの選択を優先し、ORDER BYとLIMIT項の両方を満たすインデックスの選択を回避します。 - 次の例では、テーブル
tには合計 1,000,000 行があります。列bにインデックスを使用すると、推定行数は約 8,748 なので、選択性の推定値は約 0.0087 になります。デフォルトでは、オプティマイザは列aにインデックスを選択します。しかし、この変数を 0.01 に設定すると、列bのインデックスの選択性 (0.0087) が 0.01 未満になるため、オプティマイザは列bにインデックスを選択します。
> EXPLAIN SELECT * FROM t WHERE b <= 9000 ORDER BY a LIMIT 1;
+-----------------------------------+---------+-----------+----------------------+--------------------+
| id | estRows | task | access object | operator info |
+-----------------------------------+---------+-----------+----------------------+--------------------+
| Limit_12 | 1.00 | root | | offset:0, count:1 |
| └─Projection_25 | 1.00 | root | | test.t.a, test.t.b |
| └─IndexLookUp_24 | 1.00 | root | | |
| ├─IndexFullScan_21(Build) | 114.30 | cop[tikv] | table:t, index:ia(a) | keep order:true |
| └─Selection_23(Probe) | 1.00 | cop[tikv] | | le(test.t.b, 9000) |
| └─TableRowIDScan_22 | 114.30 | cop[tikv] | table:t | keep order:false |
+-----------------------------------+---------+-----------+----------------------+--------------------+
> SET SESSION tidb_opt_ordering_index_selectivity_threshold = 0.01;
> EXPLAIN SELECT * FROM t WHERE b <= 9000 ORDER BY a LIMIT 1;
+----------------------------------+---------+-----------+----------------------+-------------------------------------+
| id | estRows | task | access object | operator info |
+----------------------------------+---------+-----------+----------------------+-------------------------------------+
| TopN_9 | 1.00 | root | | test.t.a, offset:0, count:1 |
| └─IndexLookUp_20 | 1.00 | root | | |
| ├─IndexRangeScan_17(Build) | 8748.62 | cop[tikv] | table:t, index:ib(b) | range:[-inf,9000], keep order:false |
| └─TopN_19(Probe) | 1.00 | cop[tikv] | | test.t.a, offset:0, count:1 |
| └─TableRowIDScan_18 | 8748.62 | cop[tikv] | table:t | keep order:false |
+----------------------------------+---------+-----------+----------------------+-------------------------------------+
tidb_opt_prefer_range_scan v5.0で追加
注記:
バージョン8.4.0以降、この変数のデフォルト値は
OFFからONに変更されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数の値が
ON場合、オプティマイザは、統計情報のないテーブル (擬似統計情報) または空のテーブル (統計情報がゼロ) に対して、フルテーブルスキャンよりも範囲スキャンを優先します。 - 次の例では、
tidb_opt_prefer_range_scan有効にする前は、TiDB オプティマイザはフルテーブルスキャンを実行します。3tidb_opt_prefer_range_scan有効にすると、オプティマイザはインデックス範囲スキャンを選択します。
explain select * from t where age=5;
+-------------------------+------------+-----------+---------------+-------------------+
| id | estRows | task | access object | operator info |
+-------------------------+------------+-----------+---------------+-------------------+
| TableReader_7 | 1048576.00 | root | | data:Selection_6 |
| └─Selection_6 | 1048576.00 | cop[tikv] | | eq(test.t.age, 5) |
| └─TableFullScan_5 | 1048576.00 | cop[tikv] | table:t | keep order:false |
+-------------------------+------------+-----------+---------------+-------------------+
3 rows in set (0.00 sec)
set session tidb_opt_prefer_range_scan = 1;
explain select * from t where age=5;
+-------------------------------+------------+-----------+-----------------------------+-------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------------+------------+-----------+-----------------------------+-------------------------------+
| IndexLookUp_7 | 1048576.00 | root | | |
| ├─IndexRangeScan_5(Build) | 1048576.00 | cop[tikv] | table:t, index:idx_age(age) | range:[5,5], keep order:false |
| └─TableRowIDScan_6(Probe) | 1048576.00 | cop[tikv] | table:t | keep order:false |
+-------------------------------+------------+-----------+-----------------------------+-------------------------------+
3 rows in set (0.00 sec)
tidb_opt_prefix_index_single_scan v6.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
ON - この変数は、TiDBオプティマイザが不要なテーブル検索を回避し、クエリパフォーマンスを向上させるために、一部のフィルタ条件をプレフィックスインデックスにプッシュダウンするかどうかを制御します。
- この変数の値が
ONに設定されている場合、一部のフィルタ条件がプレフィックス インデックスにプッシュダウンされます。たとえば、テーブルのcol列がインデックスのプレフィックス 列であるとします。クエリ内のcol is nullまたはcol is not null条件は、テーブル検索のフィルタ条件ではなく、インデックスのフィルタ条件として処理されるため、不要なテーブル検索が回避されます。
tidb_opt_prefix_index_single_scanの使用例
プレフィックスインデックス付きのテーブルを作成します。
CREATE TABLE t (a INT, b VARCHAR(10), c INT, INDEX idx_a_b(a, b(5)));
無効化tidb_opt_prefix_index_single_scan :
SET tidb_opt_prefix_index_single_scan = 'OFF';
次のクエリの場合、実行プランではプレフィックスインデックスidx_a_bを使用しますが、テーブルルックアップが必要です( IndexLookUp演算子が表示されます)。
EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL;
+-------------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
| HashAgg | 1.00 | root | | funcs:count(Column#8)->Column#5 |
| └─IndexLookUp | 1.00 | root | | |
| ├─IndexRangeScan(Build) | 99.90 | cop[tikv] | table:t, index:idx_a_b(a, b) | range:[1 -inf,1 +inf], keep order:false, stats:pseudo |
| └─HashAgg(Probe) | 1.00 | cop[tikv] | | funcs:count(1)->Column#8 |
| └─Selection | 99.90 | cop[tikv] | | not(isnull(test.t.b)) |
| └─TableRowIDScan | 99.90 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+-------------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
6 rows in set (0.00 sec)
有効化tidb_opt_prefix_index_single_scan :
SET tidb_opt_prefix_index_single_scan = 'ON';
この変数を有効にすると、次のクエリの実行プランではプレフィックスインデックスidx_a_bが使用されますが、テーブルルックアップは不要になります。
EXPLAIN FORMAT='brief' SELECT COUNT(1) FROM t WHERE a = 1 AND b IS NOT NULL;
+--------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
| id | estRows | task | access object | operator info |
+--------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
| StreamAgg | 1.00 | root | | funcs:count(Column#7)->Column#5 |
| └─IndexReader | 1.00 | root | | index:StreamAgg |
| └─StreamAgg | 1.00 | cop[tikv] | | funcs:count(1)->Column#7 |
| └─IndexRangeScan | 99.90 | cop[tikv] | table:t, index:idx_a_b(a, b) | range:[1 -inf,1 +inf], keep order:false, stats:pseudo |
+--------------------------+---------+-----------+------------------------------+-------------------------------------------------------+
4 rows in set (0.00 sec)
tidb_opt_projection_push_down v6.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ONより前のバージョンでは、デフォルト値はOFFでした。 - オプティマイザが
Projection演算子を TiKV コプロセッサにプッシュダウンすることを許可するかどうかを指定します。有効にすると、オプティマイザは次の 3 種類のProjection演算子を TiKV にプッシュダウンする可能性があります。 Projection演算子を押し下げる最終決定は、オプティマイザによるクエリコストの総合的な評価にも依存します。- TiDB クラスターが v8.3.0 より前のバージョンから v8.3.0 以降にアップグレードされた場合、この変数のデフォルト値は
OFFです。
tidb_opt_range_max_size v6.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
67108864(64 MiB) - 範囲:
[0, 9223372036854775807] - 単位:バイト
- この変数は、オプティマイザがスキャン範囲を構築するためのメモリ使用量の上限を設定するために使用されます。変数の値が
0の場合、スキャン範囲の構築にメモリ制限はありません。正確なスキャン範囲の構築によって消費されるメモリが制限を超える場合、オプティマイザはより緩やかなスキャン範囲 (例えば[[NULL,+inf]]) を使用します。実行プランで正確なスキャン範囲を使用しない場合は、この変数の値を増やすことで、オプティマイザが正確なスキャン範囲を構築できるようになります。
この変数の使用例は以下のとおりです。
tidb_opt_range_max_size使用例
この変数のデフォルト値をビュー。結果から、オプティマイザがスキャン範囲の構築に最大64MiBのメモリを使用していることがわかります。
SELECT @@tidb_opt_range_max_size;
+----------------------------+
| @@tidb_opt_range_max_size |
+----------------------------+
| 67108864 |
+----------------------------+
1 row in set (0.01 sec)
EXPLAIN SELECT * FROM t use index (idx) WHERE a IN (10,20,30) AND b IN (40,50,60);
64 MiB のメモリ上限では、オプティマイザは次の実行プランの結果に示すように、次の正確なスキャン範囲[10 40,10 40], [10 50,10 50], [10 60,10 60], [20 40,20 40], [20 50,20 50], [20 60,20 60], [30 40,30 40], [30 50,30 50], [30 60,30 60]構築します。
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| IndexLookUp_7 | 0.90 | root | | |
| ├─IndexRangeScan_5(Build) | 0.90 | cop[tikv] | table:t, index:idx(a, b) | range:[10 40,10 40], [10 50,10 50], [10 60,10 60], [20 40,20 40], [20 50,20 50], [20 60,20 60], [30 40,30 40], [30 50,30 50], [30 60,30 60], keep order:false, stats:pseudo |
| └─TableRowIDScan_6(Probe) | 0.90 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
次に、オプティマイザがスキャン範囲を構築するためのメモリ使用量の上限を1500バイトに設定します。
SET @@tidb_opt_range_max_size = 1500;
Query OK, 0 rows affected (0.00 sec)
EXPLAIN SELECT * FROM t USE INDEX (idx) WHERE a IN (10,20,30) AND b IN (40,50,60);
1500バイトのメモリ制限では、オプティマイザはより緩やかなスキャン範囲[10,10], [20,20], [30,30]構築し、正確なスキャン範囲を構築するために必要なメモリ使用量が制限tidb_opt_range_max_sizeを超えていることをユーザーに警告します。
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------+
| IndexLookUp_8 | 0.09 | root | | |
| ├─Selection_7(Build) | 0.09 | cop[tikv] | | in(test.t.b, 40, 50, 60) |
| │ └─IndexRangeScan_5 | 30.00 | cop[tikv] | table:t, index:idx(a, b) | range:[10,10], [20,20], [30,30], keep order:false, stats:pseudo |
| └─TableRowIDScan_6(Probe) | 0.09 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+-------------------------------+---------+-----------+--------------------------+-----------------------------------------------------------------+
4 rows in set, 1 warning (0.00 sec)
SHOW WARNINGS;
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1105 | Memory capacity of 1500 bytes for 'tidb_opt_range_max_size' exceeded when building ranges. Less accurate ranges such as full range are chosen |
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
次に、メモリ使用量の上限を100バイトに設定します。
set @@tidb_opt_range_max_size = 100;
Query OK, 0 rows affected (0.00 sec)
EXPLAIN SELECT * FROM t USE INDEX (idx) WHERE a IN (10,20,30) AND b IN (40,50,60);
100バイトのメモリ制限では、オプティマイザはIndexFullScan選択し、正確なスキャン範囲を構築するために必要なメモリがtidb_opt_range_max_sizeの制限を超えていることをユーザーに警告します。
+-------------------------------+----------+-----------+--------------------------+----------------------------------------------------+
| id | estRows | task | access object | operator info |
+-------------------------------+----------+-----------+--------------------------+----------------------------------------------------+
| IndexLookUp_8 | 8000.00 | root | | |
| ├─Selection_7(Build) | 8000.00 | cop[tikv] | | in(test.t.a, 10, 20, 30), in(test.t.b, 40, 50, 60) |
| │ └─IndexFullScan_5 | 10000.00 | cop[tikv] | table:t, index:idx(a, b) | keep order:false, stats:pseudo |
| └─TableRowIDScan_6(Probe) | 8000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo |
+-------------------------------+----------+-----------+--------------------------+----------------------------------------------------+
4 rows in set, 1 warning (0.00 sec)
SHOW WARNINGS;
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1105 | Memory capacity of 100 bytes for 'tidb_opt_range_max_size' exceeded when building ranges. Less accurate ranges such as full range are chosen |
+---------+------+---------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
tidb_opt_scan_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1.5 - TiKVがディスクから1行のデータを昇順でスキャンする際のコストを示します。この変数はコストモデル内部で使用されるため、値を変更することは推奨されません。
tidb_opt_seek_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
20 - TiDBがTiKVからデータを要求する際の起動コストを示します。この変数はコストモデルによって内部的に使用されるため、値を変更することは推奨されません。
tidb_opt_skew_distinct_agg v6.2.0で追加
注記:
この変数を有効にすることでクエリのパフォーマンスを最適化する効果は、 TiFlashに対してのみ有効です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、オプティマイザが
DISTINCT集計関数を2段階の集計関数に書き換えるかどうかを設定します(例えば、SELECT b, COUNT(DISTINCT a) FROM t GROUP BY bをSELECT b, COUNT(a) FROM (SELECT b, a FROM t GROUP BY b, a) t GROUP BY bに書き換えるなど)。集計列に深刻な偏りがあり、DISTINCT列目に多くの異なる値がある場合、この書き換えによってクエリ実行時のデータ偏りを回避し、クエリのパフォーマンスを向上させることができます。
tidb_opt_three_stage_distinct_agg v6.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
ON - この変数は、MPPモードで
COUNT(DISTINCT)集計を3段階集計に書き換えるかどうかを指定します。 - この変数は現在、
COUNT(DISTINCT)のみを含む集計に適用されます。
tidb_opt_tiflash_concurrency_factor
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
24.0 - TiFlash計算の同時実行数を示します。この変数はコストモデル内部で使用されるため、値を変更することは推奨されません。
tidb_opt_use_invisible_indexes v8.0.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、オプティマイザが現在のセッションでクエリ最適化のために目に見えないインデックスを選択できるかどうかを制御します。非表示のインデックスは DML ステートメントによって維持されますが、クエリ最適化では使用されません。これは、インデックスを完全に削除する前に二重チェックしたい場合に役立ちます。この変数が
ONに設定されている場合、オプティマイザはセッションでクエリ最適化のために非表示のインデックスを選択できます。
tidb_opt_write_row_id
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション
- ヒントSET_VARに適用:はい
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、
INSERTUPDATEステートメントが_tidb_rowid番目の列に対して操作を実行することを許可するかどうかを制御するために使用されます。この変数はREPLACETiDBツールを使用してデータをインポートする場合にのみ使用できます。
tidb_opt_hash_agg_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_hash_join_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_index_join_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_index_lookup_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_index_merge_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_index_reader_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_index_scan_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_limit_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_merge_join_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_sort_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_stream_agg_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_table_full_scan_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_table_range_scan_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_table_reader_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_table_rowid_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_table_tiflash_scan_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_opt_topn_cost_factor v8.5.3で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- タイプ: フロート
- 範囲:
[0, 2147483647] - デフォルト値:
1
tidb_optimizer_selectivity_level
- 範囲: セッション
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - この変数は、最適化アルゴリズムの推定ロジックの反復回数を制御します。この変数の値を変更すると、最適化アルゴリズムの推定ロジックが大きく変化します。現在、有効な値は
0のみです。他の値を設定することは推奨されません。
tidb_partition_prune_mode v5.1で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
dynamic dynamicdynamic-only値static-onlystatic- パーティションテーブルに
dynamicモードを使用するかstaticモードを使用するかを指定します。動的パーティショニングは、完全なテーブルレベル統計、またはグローバル統計が収集された後にのみ有効であることに注意してください。グローバル統計収集が完了する前にdynamicプルーニング モードを有効にした場合、TiDB はグローバル統計が完全に収集されるまでstaticモードのままになります。グローバル統計の詳細については、 動的プルーニングモードでパーティションテーブルの統計情報を収集する。動的プルーニング モードの詳細については、パーティションテーブルの動的プルーニングモード参照してください。
tidb_persist_analyze_options はv5.4.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は構成の永続性を分析する機能を有効にするかどうかを制御します。
tidb_pessimistic_txn_fair_locking v7.0.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - 悲観的トランザクションに対して拡張悲観的ロックウェイクアップモデルを使用するかどうかを決定します。このモデルは、悲観的ロックの単一点競合シナリオにおける悲観的トランザクションのウェイクアップ順序を厳密に制御し、不要なウェイクアップを回避します。既存のウェイクアップメカニズムのランダム性によって生じる不確実性を大幅に低減します。ビジネスシナリオで頻繁に単一点悲観的ロックの競合が発生し(同じデータ行への頻繁な更新など)、その結果、ステートメントの再試行が頻繁に発生したり、テールレイテンシーが高くなったり、場合によってはエラー
pessimistic lock retry limit reachedが発生する場合は、この変数を有効にして問題を解決してみてください。 - この変数は、TiDBクラスタをv7.0.0より前のバージョンからv7.0.0以降のバージョンにアップグレードする場合、デフォルトで無効になっています。
注記:
- 具体的なビジネスシナリオによっては、このオプションを有効にすると、ロックの競合が頻繁に発生するトランザクションにおいて、スループットが一定程度低下する(平均レイテンシーが増加する)可能性があります。
- このオプションは、単一のキーをロックする必要があるステートメントにのみ有効です。ステートメントが複数の行を同時にロックする必要がある場合、このオプションは有効になりません。
- この機能は、デフォルトでは無効になっている
tidb_pessimistic_txn_aggressive_locking変数によってv6.6.0で導入されました。
tidb_placement_mode v6.0.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
STRICT - 可能な
IGNORE:STRICT - この変数は、DDL ステートメントがSQLで指定された配置ルールを無視するかどうかを制御します。変数値が
IGNOREの場合、すべての配置ルール オプションは無視されます。 - これは、論理ダンプ/リストアツールが、無効な配置ルールが割り当てられた場合でもテーブルが必ず作成されるようにするために使用されます。これは、mysqldumpがすべてのダンプファイルの先頭に
SET FOREIGN_KEY_CHECKS=0;書き込むのと同様の仕組みです。
tidb_plan_cache_invalidation_on_fresh_stats v7.1.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、関連テーブルの統計情報が更新されたときに、プランキャッシュを自動的に無効化するかどうかを制御します。
- この変数を有効にすると、プランキャッシュは統計情報をより効果的に活用して実行プランを生成できるようになります。例えば、次のようになります。
- 統計情報が利用可能になる前に実行計画が生成された場合、統計情報が利用可能になった時点で、計画キャッシュは実行計画を再生成します。
- テーブルのデータ分布が変化し、以前は最適だった実行プランが最適ではなくなった場合、プランキャッシュは統計情報を再収集した後、実行プランを再生成します。
- この変数は、TiDBクラスタをv7.1.0より前のバージョンからv7.1.0以降にアップグレードする場合、デフォルトで無効になります。
tidb_plan_cache_max_plan_size v7.1.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
2097152(2MiBに相当) - 範囲:
[0, 9223372036854775807](バイト単位)。「KiB|MiB|GiB|TiB」単位のメモリ形式もサポートされています。30制限なしを意味します。 - この変数は、準備済みプラン キャッシュまたは準備されていないプラン キャッシュにキャッシュできるプランの最大サイズを制御します。プランのサイズがこの値を超える場合、プランはキャッシュされません。詳細については、 準備済みプランキャッシュのメモリ管理準備されていないプランキャッシュを参照してください。
tidb_pprof_sql_cpu v4.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 1] - この変数は、プロファイル出力において対応するSQL文をマークして、パフォーマンスの問題を特定およびトラブルシューティングするかどうかを制御するために使用されます。
tidb_prefer_broadcast_join_by_exchange_data_sizeは v7.1.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- デフォルト値:
OFF - この変数は、TiDBがMPPハッシュ結合アルゴリズムこの変数が有効になっている場合、TiDBはネットワークで交換されるデータのサイズをそれぞれ
Broadcast Hash JoinとShuffled Hash Joinを使用して推定し、より小さいサイズを選択します。 - この変数が有効になった後は、
tidb_broadcast_join_threshold_countとtidb_broadcast_join_threshold_size有効になりません。
tidb_prepared_plan_cache_memory_guard_ratio はv6.1.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0.1 - 範囲:
[0, 1] - 準備されたプラン キャッシュがメモリ保護メカニズムをトリガーするしきい値。詳細については、プリペアドプランキャッシュのメモリ管理ご覧ください。
- この設定は以前はオプション
tidb.toml(prepared-plan-cache.memory-guard-ratio)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_prepared_plan_cache_size v6.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
100 - 範囲:
[1, 100000] - セッション内にキャッシュできるプランの最大数。詳細については、プリペアドプランキャッシュのメモリ管理ご覧ください。
- この設定は以前はオプション
tidb.toml(prepared-plan-cache.capacity)でしたが、TiDB v6.1.0以降はシステム変数に変更されました。
tidb_projection_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[-1, 256] - 単位:糸
- この変数は、
Projection演算子の同時実行数を設定するために使用されます。 - 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tidb_query_log_max_len
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4096(4 KiB) - 範囲:
[0, 1073741824] - 単位:バイト
- SQL ステートメントの出力の最大長。ステートメントの出力長が
tidb_query_log_max_len値より大きい場合、ステートメントは切り詰められて出力されます。 - この設定は以前はオプション
tidb.toml(log.query-log-max-len)としても利用可能でしたが、TiDB v6.1.0以降はシステム変数としてのみ利用可能です。
tidb_rc_read_check_ts はv6.0.0 で追加されました。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数はタイムスタンプの取得を最適化するために使用され、読み取りコミット分離レベルが採用され、読み書きの競合がまれなシナリオに適しています。この変数を有効にすることで、グローバルタイムスタンプの取得に伴うレイテンシーとコストを回避し、トランザクションレベルの読み取りレイテンシーを最適化できます。
- 読み取り/書き込み競合が深刻な場合、この機能を有効にすると、グローバル タイムスタンプを取得するコストとレイテンシーが増加し、パフォーマンスの低下を引き起こす可能性があります。詳細については、 隔離レベルを遵守するご覧ください。
tidb_rc_write_check_ts はv6.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数はタイムスタンプの取得を最適化するために使用され、悲観的トランザクションの分離レベル
READ-COMMITTEDでポイント書き込み競合が少ないシナリオに適しています。この変数を有効にすると、ポイント書き込みステートメントの実行中にグローバルタイムスタンプを取得することによって発生するレイテンシーとオーバーヘッドを回避できます。現在、この変数はUPDATE、DELETE、およびSELECT ...... FOR UPDATEの 3 種類のポイント書き込みステートメントに適用できます。ポイント書き込みステートメントとは、フィルタ条件として主キーまたは一意キーを使用し、最終実行演算子にPOINT-GET含まれる書き込みステートメントを指します。 - ポイントと書き込みの競合が深刻な場合、この変数を有効にすると、余分なオーバーヘッドとレイテンシーが増加し、パフォーマンスの低下につながります。詳細については、 隔離レベルを遵守するご覧ください。
tidb_read_consistency v5.4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用: はい (非トランザクションDMLステートメントが存在する場合、ヒントを使用してこの変数の値を変更しても有効にならない可能性があることに注意してください。)
- 型: 文字列
- デフォルト値:
strict - この変数は、自動コミット読み取りステートメントの読み取り一貫性を制御するために使用されます。
- 変数の値が
weakに設定されている場合、read ステートメントで発生するロックは直接スキップされ、read の実行が高速化される可能性があります。これは弱一貫性読み取りモードです。ただし、トランザクションのセマンティクス(原子性など)や分散一貫性(線形化可能性など)は保証されません。 - 自動コミット読み取りが高速で、かつ弱い整合性の読み取り結果でも許容されるユーザーシナリオでは、弱い整合性の読み取りモードを使用できます。
tidb_read_staleness v5.4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[-2147483648, 0] - この変数は、TiDBが現在のセッションで読み取ることができる履歴データの時間範囲を設定するために使用されます。値を設定すると、TiDBはこの変数で許可された範囲から可能な限り新しいタイムスタンプを選択し、以降のすべての読み取り操作はこのタイムスタンプに対して実行されます。たとえば、この変数の値が
-5に設定されている場合、TiKVが対応する履歴バージョンのデータを持っているという条件の下で、TiDBは5秒以内の時間範囲内で可能な限り新しいタイムスタンプを選択します。
tidb_record_plan_in_slow_log
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、遅いクエリの実行プランをスローログに含めるかどうかを制御するために使用されます。
tidb_redact_log
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
OFF ONMARKER値:OFF- この変数は、TiDBログおよびスローログに記録されるSQLステートメント内のユーザー情報を非表示にするかどうかを制御します。
- デフォルト値は
OFFで、これはユーザー情報が一切処理されないことを意味します。 - 変数を
ONに設定すると、ユーザー情報は非表示になります。例えば、実行されたSQL文がINSERT INTO t VALUES (1,2)の場合、ログにはINSERT INTO t VALUES (?,?)として記録されます。 - 変数を
MARKERに設定すると、ユーザー情報は‹ ›で囲まれます。たとえば、実行された SQL ステートメントがINSERT INTO t VALUES (1,2)の場合、ログにはINSERT INTO t VALUES (‹1›,‹2›)として記録されます。ユーザーデータに‹または›含まれている場合、‹は‹‹に、›は››にエスケープされます。マークされたログに基づいて、ログを表示する際にマークされた情報を非機密化するかどうかを決定できます。
tidb_regard_null_as_point v5.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、オプティマイザがNULL等価性を含むクエリ条件をインデックスアクセスのプレフィックス条件として使用できるかどうかを制御します。
- この変数はデフォルトで有効になっています。有効になっている場合、オプティマイザはアクセスするインデックスデータの量を削減できるため、クエリの実行が高速化されます。たとえば、クエリに複数列インデックス
index(a, b)が含まれ、クエリ条件にa<=>null and b=1含まれている場合、オプティマイザはクエリ条件内のa<=>nullとb=1両方を使用してインデックスにアクセスします。変数が無効になっている場合、a<=>null and b=1は null 等価条件が含まれているため、オプティマイザはインデックスアクセスにb=1使用しません。
tidb_remove_orderby_in_subquery v6.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:v7.2.0より前のバージョンではデフォルト値は
OFFです。v7.2.0以降ではデフォルト値はONです。 - サブクエリ内の
ORDER BY句を削除するかどうかを指定します。 - ISO/IEC SQL 規格では、
ORDER BY主にトップレベルクエリの結果をソートするために使用されます。サブクエリの場合、規格では結果をORDER BYでソートすることを要求していません。 - サブクエリの結果をソートするには、通常、外側のクエリで処理できます。例えば、ウィンドウ関数を使用したり、外側のクエリで再度
ORDER BY指定したりする方法があります。こうすることで、最終的な結果セットの順序が保証されます。
tidb_replica_read v4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
leader - 指定可能な値
prefer-leader、leaderfollowerlearnerleader-and-follower値closest-replicasclosest-adaptive6.6.0で追加learnerれました。 - この変数は、TiDBがデータを読み込む場所を制御するために使用されます。バージョン8.5.4以降、この変数は読み取り専用のSQL文にのみ有効です。
- 使用方法と実装の詳細については、 Follower Read参照してください。
tidb_restricted_read_only v5.2.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF tidb_restricted_read_onlyとtidb_super_read_only同様の動作をします。ほとんどの場合、tidb_super_read_onlyのみを使用してください。- 権限レベル
SUPERまたはSYSTEM_VARIABLES_ADMINユーザーは、この変数を変更できます。ただし、 Security強化モード有効になっている場合は、この変数を読み取りまたは変更するために、追加の権限レベルRESTRICTED_VARIABLES_ADMINが必要になります。 tidb_restricted_read_only、以下のケースでtidb_super_read_only影響を与えます。tidb_restricted_read_onlyからONに設定すると、tidb_super_read_onlyONに更新されます。- 設定を
tidb_restricted_read_onlyからOFFにしても、tidb_super_read_only変更されません。 tidb_restricted_read_onlyがONの場合、tidb_super_read_onlyOFFに設定することはできません。
- TiDB の DBaaS プロバイダーの場合、TiDB クラスタが別のデータベースのダウンストリーム データベースである場合、TiDB クラスタを読み取り専用にするには、 Security強化モードを有効にした状態で
tidb_restricted_read_only使用する必要がある場合があります。これにより、顧客がtidb_super_read_only使用してクラスタを書き込み可能にすることができなくなります。これを実現するには、 Security強化モードを有効にし、SYSTEM_VARIABLES_ADMINおよびRESTRICTED_VARIABLES_ADMIN権限を持つ管理者ユーザーを使用してtidb_restricted_read_only制御し、データベース ユーザーがSUPER権限を持つルート ユーザーを使用してtidb_super_read_onlyのみを制御できるようにする必要があります。 - この変数は、クラスタ全体の読み取り専用状態を制御します。変数が
ONの場合、クラスタ内のすべての TiDB サーバーが読み取り専用モードになります。この場合、TiDB はSHOWSELECTのようにデータを変更しないステートメントのみを実行します。9 やUSEINSERTの他のステートメントについては、TiDB は読み取り専用モードでUPDATE実行を拒否します。 - この変数を使用して読み取り専用モードを有効にしても、最終的にクラスタ全体が読み取り専用状態になることが保証されるだけです。TiDBクラスタでこの変数の値を変更しても、その変更が他のTiDBサーバーにまだ反映されていない場合、更新されていないTiDBサーバーは読み取り専用モードになりません。
- TiDB は、SQL ステートメントの実行前に読み取り専用フラグを確認します。v6.2.0 以降では、SQL ステートメントのコミット前にもフラグがチェックされます。これにより、サーバーが読み取り専用モードになった後に、長時間実行される自動コミットステートメントがデータを変更するケースを防ぐことができます。
- この変数が有効になっている場合、TiDB はコミットされていないトランザクションを次のように処理します。
- コミットされていない読み取り専用トランザクションについては、通常どおりトランザクションをコミットできます。
- 読み取り専用ではない未コミットのトランザクションの場合、これらのトランザクション内で書き込み操作を実行するSQL文は拒否されます。
- データが変更された未コミットの読み取り専用トランザクションについては、これらのトランザクションのコミットは拒否されます。
- 読み取り専用モードが有効になると、明示的に権限
RESTRICTED_REPLICA_WRITER_ADMINが付与されない限り、すべてのユーザー(権限SUPERを持つユーザーを含む)はデータを書き込む可能性のあるSQLステートメントを実行できなくなります。
tidb_request_source_type v7.4.0で追加
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値:
"" "stats""lightning""background""br""ddl"- この変数はリソース制御現在のセッションのタスクタイプを明示的に指定するために使用され、それは によって識別および制御されます。例:
SET @@tidb_request_source_type = "background"。
tidb_resource_control_strict_mode はv8.2.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は
SET RESOURCE GROUPステートメントおよびRESOURCE_GROUP()オプティマイザヒントに権限制御を適用するかどうかを制御します。このシステム変数がONに設定されている場合、現在のセッションまたは現在のステートメントのバインドされたリソース グループをこれらの 2 つの方法で変更するには、権限SUPER、またはRESOURCE_GROUP_ADMINRESOURCE_GROUP_USER必要ですOFFに設定されている場合、これらの権限は不要となり、この変数がない以前の TiDB バージョンと同じ動作になります。 - TiDBクラスタを以前のバージョンからv8.2.0以降にアップグレードすると、この変数のデフォルト値は
OFFに設定され、この機能はデフォルトで無効になります。
tidb_retry_limit
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
10 - 範囲:
[-1, 9223372036854775807] - この変数は、楽観的トランザクションの再試行回数の最大値を設定するために使用されます。トランザクションが再試行可能なエラー(トランザクションの競合、トランザクションのコミットが非常に遅い、テーブルスキーマの変更など)に遭遇した場合、この変数に基づいてトランザクションが再実行されます。1~
0tidb_retry_limit設定すると、自動再試行が無効になることに注意してください。この変数は楽観的トランザクションにのみ適用され、悲観的トランザクションには適用されません。
tidb_row_format_version
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
2 - 範囲:
[1, 2] - テーブルに新しく保存されたデータの形式バージョンを制御します。 TiDB v4.0 では、新しいデータの保存にデフォルトで新しいstorage行フォーマットバージョン
2が使用されます。 - TiDB のバージョンが v4.0.0 より前のバージョンから v4.0.0 以降のバージョンにアップグレードした場合、フォーマット バージョンは変更されず、TiDB は引き続きバージョン
1の古いフォーマットを使用してテーブルにデータを書き込みます。つまり、新しく作成されたクラスタのみがデフォルトで新しいデータ フォーマットを使用します。 - この変数を変更しても、既に保存されている古いデータには影響しませんが、この変数を変更した後に新たに書き込まれるデータにのみ、対応するバージョン形式が適用されます。
tidb_runtime_filter_mode v7.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
OFF - 可能な
LOCAL:OFF - ランタイム フィルターのモード、つまりフィルター送信者オペレーターとフィルター受信者オペレーター間の関係を制御します。
OFFとLOCAL2 つのモードがあります。OFF、ランタイム フィルターを無効にすることを意味します。LOCAL、ローカル モードでランタイム フィルターを有効にすることを意味します。詳細については、ランタイムフィルタモードを参照してください。
tidb_runtime_filter_type v7.2.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
IN - 可能な値:
IN - 生成されたフィルター演算子によって使用される述語のタイプを制御します。現在、1 つのタイプのみがサポートされています:
IN。詳細については、ランタイムフィルタタイプを参照してください。
tidb_scatter_region
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
"" tableglobal値:""- テーブル作成時にパラメータ
SHARD_ROW_ID_BITSとPRE_SPLIT_REGIONS設定されている場合、システムはテーブルの作成が成功すると、自動的に指定された数のリージョンに分割します。この変数は、分割されたリージョンの分散戦略を制御します。TiDB は、選択された分散戦略に基づいてリージョンを処理します。テーブル作成操作は、成功ステータスを返す前に分散処理が完了するまで待機するため、この変数を有効にすると、ステートメントCREATE TABLEの実行時間が大幅に増加する可能性があることに注意してください。この変数が無効になっている場合と比較すると、実行時間は数倍長くなる可能性があります。可能な値の説明は次のとおりです。"":デフォルト値。テーブル作成後、テーブルの領域が分散されないことを示します。table:テーブル作成時に属性PRE_SPLIT_REGIONSまたはSHARD_ROW_ID_BITSを設定した場合、複数のリージョンを事前に分割するシナリオでは、これらのテーブルのリージョンはテーブルの粒度に応じて分散されます。ただし、テーブル作成時に上記の属性を設定しない場合、多数のテーブルを迅速に作成するシナリオでは、これらのテーブルのリージョンが少数のTiKVノードに集中し、リージョンの分布が不均一になります。global:TiDBは、新しく作成されたテーブルのリージョンをクラスタ全体のデータ分布に従って分散します。特に、多数のテーブルを迅速に作成する場合、globalオプションを使用すると、リージョンが少数のTiKVノードに過度に集中するのを防ぎ、クラスタ全体にリージョンがよりバランスよく分散されるようにすることができます。
tidb_schema_cache_size v8.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
536870912(512 MiB) - 範囲:
0または[67108864, 9223372036854775807] - TiDB v8.4.0 より前のバージョンでは、この変数のデフォルト値は
0です。 - TiDB v8.4.0以降では、デフォルト値は
536870912です。以前のバージョンからv8.4.0以降にアップグレードする場合、以前のバージョンで設定されていた値が使用されます。 - この変数は、TiDB のスキーマ キャッシュのサイズを制御します。単位はバイトです。この変数を
0に設定すると、キャッシュ制限機能が無効になります。この機能を有効にするには、[67108864, 9223372036854775807]範囲内の値を設定する必要があります。TiDB はこの値を最大使用可能メモリ制限として使用し、LRU (Least Recently Used、最近使用頻度の低いもの)アルゴリズムを適用して必要なテーブルをキャッシュすることで、スキーマ情報によって使用されるメモリを効果的に削減します。 - クラスターに多数のパーティションテーブルが含まれている場合、またはパーティションテーブルに対して DDL 操作を頻繁に実行する場合 (
TRUNCATEやDROP PARTITIONなど)、この変数を0に設定することをお勧めします。
tidb_schema_version_cache_limit v7.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
16 - 範囲:
[2, 255] - この変数は、TiDBインスタンスにキャッシュできる履歴スキーマバージョンの数を制限します。デフォルト値は
16で、これはTiDBがデフォルトで16個の履歴スキーマバージョンをキャッシュすることを意味します。 - 通常、この変数を変更する必要はありません。ステイル読み取り機能を使用し、DDL操作が非常に頻繁に実行されると、スキーマバージョンが頻繁に変更されます。その結果、ステイル読み取りがスナップショットからスキーマ情報を取得しようとすると、スキーマキャッシュミスにより情報の再構築に時間がかかる場合があります。この場合、スキーマキャッシュミスの問題を回避するために、
tidb_schema_version_cache_limitの値を増やす(例えば32する)ことができます。 - この変数を変更すると、TiDBのメモリ使用量がわずかに増加します。メモリ不足の問題を回避するため、TiDBのメモリ使用量を監視してください。
tidb_server_memory_limit v6.4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
80% - 範囲:
- 値をパーセンテージ形式で設定できます。これは、メモリ使用量が総メモリに対して占める割合を意味します。値の範囲は
[1%, 99%]です。 - メモリサイズの値も設定できます。値の範囲は
0~[536870912, 9223372036854775807]バイトです。「KiB|MiB|GiB|TiB」単位のメモリ形式がサポートされています。50メモリ制限なしを意味します。 - この変数に512 MiB未満で
0以外のメモリサイズが設定されている場合、TiDBは実際のサイズとして512 MiBを使用します。
- 値をパーセンテージ形式で設定できます。これは、メモリ使用量が総メモリに対して占める割合を意味します。値の範囲は
- この変数は、TiDBインスタンスのメモリ制限を指定します。TiDBのメモリ使用量がこの制限に達すると、TiDBは現在実行中のSQL文のうち、最もメモリ使用量の多い文をキャンセルします。SQL文が正常にキャンセルされた後、TiDBはGolangのガベージコレクション(GC)を呼び出してメモリを解放し、メモリ負荷をできるだけ早く軽減しようとします。
tidb_server_memory_limit_sess_min_sizeの制限を超えるメモリ使用量を持つ SQL ステートメントのみが、最初にキャンセルされる SQL ステートメントとして選択されます。- 現在、TiDBは一度に1つのSQL文のみをキャンセルします。TiDBがSQL文を完全にキャンセルしてリソースを解放した後も、メモリ使用量がこの変数で設定された制限を超えている場合、TiDBは次のキャンセル操作を開始します。
tidb_server_memory_limit_gc_trigger はv6.4.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
70% - 範囲:
[50%, 99%] - TiDBがGCをトリガーしようとするしきい値。TiDBのメモリ使用量が
tidb_server_memory_limit×tidb_server_memory_limit_gc_triggerの値に達すると、TiDBはGolangのGC操作を積極的にトリガーします。1分間にトリガーされるGC操作は1回のみです。
tidb_server_memory_limit_sess_min_sizeは v6.4.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
134217728(128MiB) - 範囲:
[128, 9223372036854775807](バイト単位)。「KiB|MiB|GiB|TiB」単位のメモリフォーマットもサポートされています。 - メモリ制限を有効にすると、TiDB は現在のインスタンス上でメモリ使用量が最も高い SQL ステートメントを終了します。この変数は、終了する SQL ステートメントの最小メモリ使用量を指定します。メモリ使用量が低いセッションが多すぎるために TiDB インスタンスのメモリ使用量が制限を超えている場合は、この変数の値を適切に下げることで、より多くのセッションをキャンセルできるようになります。
tidb_service_scope v7.4.0で追加
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値: ""
- オプションの値: 最大 64 文字の文字列。有効な文字は、数字
0-9、文字a-zA-Z、アンダースコア_、ハイフン-です。 - この変数はインスタンスレベルのシステム変数です。これを使用してTiDB分散実行フレームワーク(DXF)の下で各 TiDB ノードのサービス スコープを制御できます。 DXF は、この変数の値に基づいて、どの TiDB ノードが分散タスクを実行するようにスケジュールできるかを決定します。特定のルールについては、 タスクスケジューリングを参照してください。
tidb_session_alias v7.4.0で追加
- 範囲: セッション
- クラスターに保持される: いいえ
- ヒントSET_VARに適用:はい
- デフォルト値: ""
- この変数を使用すると、現在のセッションに関連するログの
session_alias列の値をカスタマイズできます。これにより、トラブルシューティング時にセッションを特定しやすくなります。この設定は、ステートメントの実行に関与する複数のノード (TiKV を含む) のログに影響します。この変数の最大長は 64 文字に制限されており、それを超える文字は自動的に切り捨てられます。値の末尾のスペースも自動的に削除されます。
tidb_session_plan_cache_size v7.1.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
100 - 範囲:
[1, 100000] - この変数は、キャッシュできるプランの最大数を制御します。準備済みプランキャッシュ準備されていないプランキャッシュは同じキャッシュを共有します。
- 以前のバージョンからv7.1.0以降のバージョンにアップグレードした場合、この変数は
tidb_prepared_plan_cache_sizeと同じ値のままです。
tidb_shard_allocate_step v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
9223372036854775807 - 範囲:
[1, 9223372036854775807] - この変数は、
AUTO_RANDOMまたはSHARD_ROW_ID_BITS属性に割り当てられる連続IDの最大数を制御します。通常、1つのトランザクション内では、AUTO_RANDOMIDまたはSHARD_ROW_ID_BITS注釈付き行IDが連続して増分されます。この変数を使用すると、大規模なトランザクションシナリオにおけるホットスポットの問題を解決できます。
tidb_shard_row_id_bits v8.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 15] - この変数は、新しく作成されるテーブルのデフォルトの行 ID シャード数を設定するために使用されます。この変数にゼロ以外の値を設定すると、TiDB は
CREATE TABLEステートメントを実行する際にSHARD_ROW_ID_BITSの使用を許可するテーブル (たとえば、NONCLUSTEREDテーブル) にこの属性を自動的に適用します。詳細については、SHARD_ROW_ID_BITS参照してください。
tidb_simplified_metrics
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数が有効になっている場合、TiDB は Grafana パネルで使用されていないメトリックを収集または記録しません。
tidb_skip_ascii_check v5.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、ASCII検証をスキップするかどうかを設定するために使用されます。
- ASCII文字の検証はパフォーマンスに影響します。入力文字が有効なASCII文字であることが確実な場合は、変数の値を
ONに設定できます。
tidb_skip_isolation_level_check
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - このスイッチを有効にした後、TiDBでサポートされていない分離レベルが
tx_isolationに割り当てられた場合でも、エラーは報告されません。これにより、異なる分離レベルを設定する(ただし、それに依存しない)アプリケーションとの互換性が向上します。
tidb> set tx_isolation='serializable';
ERROR 8048 (HY000): The isolation level 'serializable' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error
tidb> set tidb_skip_isolation_level_check=1;
Query OK, 0 rows affected (0.00 sec)
tidb> set tx_isolation='serializable';
Query OK, 0 rows affected, 1 warning (0.00 sec)
tidb_skip_missing_partition_stats はv7.3.0 で追加されました。
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: ブール値
デフォルト値:
ONパーティション 動的剪定モードでパーティションテーブルにアクセスする場合、TiDB は各パーティションの統計情報を集約してグローバル統計情報を生成します。この変数は、パーティション統計情報が欠落している場合にグローバル統計情報を生成するかどうかを制御します。
- この変数が
ON場合、TiDB はグローバル統計を生成する際に不足しているパーティション統計をスキップするため、グローバル統計の生成には影響しません。 - この変数が
OFF場合、TiDB は欠落しているパーティション統計を検出すると、グローバル統計の生成を停止します。
- この変数が
tidb_skip_utf8_check
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、UTF-8検証をスキップするかどうかを設定するために使用されます。
- UTF-8文字の検証はパフォーマンスに影響します。入力文字が有効なUTF-8文字であることが確実な場合は、変数の値を
ONに設定してください。
注記:
文字チェックをスキップすると、TiDB はアプリケーションによって書き込まれた無効な UTF-8 文字を検出できず、
ANALYZE実行時にデコードエラーが発生したり、その他の未知のエンコードの問題を引き起こしたりする可能性があります。アプリケーションが書き込まれた文字列の有効性を保証できない場合は、文字チェックをスキップすることはお勧めしません。
tidb_slow_log_threshold
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスタに永続化しますか?:いいえ、現在接続している TiDB インスタンスにのみ適用されます。
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
300 - 範囲:
[-1, 9223372036854775807] - 単位:ミリ秒
- この変数は、スローログの処理時間のしきい値を出力します。デフォルト値は300ミリ秒です。クエリの処理時間がこの値を超えると、そのクエリはスロークエリとみなされ、そのログがスロークエリログに出力されます。なお、
log.levelの出力レベルが"debug"場合、この変数の設定に関わらず、すべてのクエリがスロークエリログに記録されます。
tidb_slow_query_file
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
INFORMATION_SCHEMA.SLOW_QUERYが照会された場合、設定ファイルでslow-query-fileによって設定されたスロークエリログ名のみが解析されます。デフォルトのスロークエリログ名は「tidb-slow.log」です。他のログを解析するには、tidb_slow_query_fileセッション変数に特定のファイルパスを設定し、INFORMATION_SCHEMA.SLOW_QUERY照会して、設定したファイルパスに基づいてスロークエリログを解析します。
詳細については、遅いクエリを特定する参照してください。
tidb_slow_txn_log_threshold はv7.0.0 で追加されました。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 符号なし整数
- デフォルト値:
0 - 範囲:
[0, 9223372036854775807] - 単位:ミリ秒
- この変数は、低速トランザクションのログ記録のしきい値を設定します。トランザクションの実行時間がこのしきい値を超えると、TiDB はトランザクションに関する詳細情報をログに記録します。値が
0に設定されている場合、この機能は無効になります。
tidb_snapshot
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- この変数は、セッションがデータを読み取る時点を設定するために使用されます。たとえば、変数を「2017-11-11 20:20:20」または「400036290571534337」のようなTSO番号に設定すると、現在のセッションはこの時点のデータを読み取ります。
tidb_source_id v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[1, 15]
- この変数は、 双方向複製クラスター内のさまざまなクラスター ID を構成するために使用されます。
tidb_stats_cache_mem_quota (v6.1.0で追加)
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- 単位:バイト
- デフォルト値は
0、これは TiDB 統計キャッシュのメモリ割り当てが TiDB インスタンスの総メモリの 20% であることを意味します。v8.5.1 より前のバージョンでは、0メモリ割り当てが TiDB インスタンスの総メモリの 50% であることを意味します。 - 範囲:
[0, 1099511627776] - この変数は、TiDB統計キャッシュのメモリ割り当て量を設定します。
tidb_stats_load_pseudo_timeout v5.4.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、SQL最適化の待機時間がタイムアウトに達し、完全な列統計情報を同期的にロードする際のTiDBの動作を制御します。デフォルト値の
ONは、タイムアウト後にSQL最適化が擬似統計情報を使用する状態に戻ることを意味します。この変数をOFFに設定すると、タイムアウト後にSQL実行が失敗します。
tidb_stats_load_sync_wait v5.4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
100 - 範囲:
[0, 2147483647] - 単位:ミリ秒
- この変数は、同期的に統計情報を読み込む機能を有効にするかどうかを制御します。値
0は、この機能が無効であることを意味します。この機能を有効にするには、この変数に、SQL 最適化が列統計情報を完全に同期的に読み込むために待機できる最大時間 (ミリ秒単位) を設定します。詳細については、負荷統計参照してください。
tidb_stmt_summary_enable_persistent v6.6.0で追加
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は読み取り専用です。 ステートメントの要約持続性を有効にするかどうかを制御します。
- この変数の値は、構成項目
tidb_stmt_summary_enable_persistentの値と同じです。
tidb_stmt_summary_filename v6.6.0で追加
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- 型: 文字列
- デフォルト値:
"tidb-statements.log" - この変数は読み取り専用です。 ステートメントの要約持続性が有効な場合に永続データが書き込まれるファイルを指定します。
- この変数の値は、構成項目
tidb_stmt_summary_filenameの値と同じです。
tidb_stmt_summary_file_max_backups v6.6.0で追加
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - この変数は読み取り専用です。 ステートメントの要約持続性が有効な場合に保存できるデータ ファイルの最大数を指定します。
- この変数の値は、構成項目
tidb_stmt_summary_file_max_backupsの値と同じです。
tidb_stmt_summary_file_max_daysは v6.6.0 で追加されました。
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
3 - 単位:日
- この変数は読み取り専用です。 ステートメントの要約持続性が有効な場合に、永続的なデータ ファイルを保持する最大日数を指定します。
- この変数の値は、構成項目
tidb_stmt_summary_file_max_daysの値と同じです。
tidb_stmt_summary_file_max_size はv6.6.0 で追加されました。
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
64 - 単位: MiB
- この変数は読み取り専用です。 ステートメントの要約持続性が有効な場合の永続データ ファイルの最大サイズを指定します。
- この変数の値は、構成項目
tidb_stmt_summary_file_max_sizeの値と同じです。
tidb_stmt_summary_history_size v4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
24 - 範囲:
[0, 255] - この変数は明細書概要表の履歴容量を設定するために使用されます。
tidb_stmt_summary_internal_query v4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、明細書概要表にTiDBのSQL情報を含めるかどうかを制御するために使用されます。
tidb_stmt_summary_max_sql_length v4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
4096 - 範囲:
[0, 2147483647] - 単位:バイト
- この変数は、明細書概要表およびTiDBダッシュボードの SQL 文字列の長さを制御するために使用されます。
tidb_stmt_summary_max_stmt_count v4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
3000 - 範囲:
[1, 32767] - この変数は、
statements_summaryとstatements_summary_historyテーブルがメモリに格納できる SQL ダイジェストの総数を制限するために使用されます。
注記:
tidb_stmt_summary_enable_persistentが有効になっている場合、tidb_stmt_summary_max_stmt_countstatements_summaryテーブルがメモリに格納できる SQL ダイジェストの数を制限するだけです。
tidb_stmt_summary_refresh_interval v4.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1800 - 範囲:
[1, 2147483647] - 単位:秒
- この変数は明細書概要表の更新時間を設定するために使用されます。
tidb_store_batch_size
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- 型: 整数
- デフォルト値:
4 - 範囲:
[0, 25000] - この変数は、
IndexLookUpオペレータのコプロセッサータスクのバッチ サイズを制御するために使用されます。30バッチを無効にすることを意味します。タスク数が比較的多く、クエリの処理が遅い場合は、この変数を増やすことでクエリを最適化できます。
tidb_store_limit はv3.0.4 および v4.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 9223372036854775807] - この変数は、TiDBが同時にTiKVに送信できるリクエストの最大数を制限するために使用されます。0は制限なしを意味します。
tidb_streamagg_concurrency
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - この変数は、クエリ実行時の
StreamAgg演算子の同時実行数を設定します。 - この変数を設定することは推奨されません。変数の値を変更すると、データの正確性に問題が生じる可能性があります。
tidb_super_read_only v5.3.1で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF tidb_super_read_onlyMySQL 変数super_read_onlyの代替として実装されることを目指しています。ただし、TiDB は分散データベースであるため、tidb_super_read_only実行直後にデータベースを読み取り専用にするのではなく、最終的には読み取り専用にします。- 権限レベル
SUPERまたはSYSTEM_VARIABLES_ADMINのユーザーは、この変数を変更できます。 - この変数は、クラスタ全体の読み取り専用状態を制御します。変数が
ONの場合、クラスタ内のすべての TiDB サーバーが読み取り専用モードになります。この場合、TiDB はSHOWSELECTのようにデータを変更しないステートメントのみを実行します。9 やUSEINSERTの他のステートメントについては、TiDB は読み取り専用モードでの実行UPDATE拒否します。 - この変数を使用して読み取り専用モードを有効にしても、最終的にクラスタ全体が読み取り専用状態になることが保証されるだけです。TiDBクラスタでこの変数の値を変更しても、その変更が他のTiDBサーバーにまだ反映されていない場合、更新されていないTiDBサーバーは読み取り専用モードになりません。
- TiDB は、SQL ステートメントの実行前に読み取り専用フラグを確認します。v6.2.0 以降では、SQL ステートメントのコミット前にもフラグがチェックされます。これにより、サーバーが読み取り専用モードになった後に、長時間実行される自動コミットステートメントがデータを変更するケースを防ぐことができます。
- この変数が有効になっている場合、TiDB はコミットされていないトランザクションを次のように処理します。
- コミットされていない読み取り専用トランザクションについては、通常どおりトランザクションをコミットできます。
- 読み取り専用ではない未コミットのトランザクションの場合、これらのトランザクション内で書き込み操作を実行するSQL文は拒否されます。
- データが変更された未コミットの読み取り専用トランザクションについては、これらのトランザクションのコミットは拒否されます。
- 読み取り専用モードが有効になると、明示的に権限
RESTRICTED_REPLICA_WRITER_ADMINが付与されない限り、すべてのユーザー(権限SUPERを持つユーザーを含む)はデータを書き込む可能性のあるSQLステートメントを実行できなくなります。 tidb_restricted_read_onlyシステム変数がONに設定されている場合、場合によってはtidb_super_read_onlytidb_restricted_read_onlyの影響を受けます。詳細な影響については、tidb_restricted_read_onlyの説明を参照してください。
tidb_sysdate_is_now はv6.0.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
OFF - この変数は、関数
SYSDATE関数NOWに置き換えることができるかどうかを制御するために使用されます。この設定項目は、MySQLオプションのsysdate-is-nowと同じ効果を持ちます。
tidb_sysproc_scan_concurrency v6.5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:
[0, 4294967295]以前のバージョンの最大値は256です。v8.2.0より前のバージョンでは、最小値は1です0に設定すると、クラスタサイズに基づいて同時実行数が適応的に調整されます。 - この変数は、TiDBが内部SQLステートメント(統計情報の自動更新など)を実行する際に実行されるスキャン操作の同時実行数を設定するために使用されます。
tidb_table_cache_lease v6.0.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
3 - 範囲:
[1, 10] - 単位:秒
- この変数は、キャッシュキャッシュされたテーブルテーブルのリース時間を制御するために使用され、デフォルト値は
3です。この変数の値は、キャッシュされたテーブルの変更に影響します。キャッシュされたテーブルが変更された後、最長の待機時間はtidb_table_cache_lease秒になる場合があります。テーブルが読み取り専用であるか、高い書き込みレイテンシーを許容できる場合は、この変数の値を増やすことで、キャッシュされたテーブルの有効時間を長くし、リース更新の頻度を減らすことができます。
tidb_tmp_table_max_size はv5.3.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
67108864 - 範囲:
[1048576, 137438953472] - 単位:バイト
- この変数は、単一一時テーブルの最大サイズを設定するために使用されます。この変数の値よりも大きいサイズの一時テーブルはエラーになります。
tidb_top_sql_max_meta_count はv6.0.0 で追加されました。
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
5000 - 範囲:
[1, 10000]
- この変数は、 Top SQLが1分あたりに収集するSQLステートメントタイプの最大数を制御するために使用されます。
tidb_top_sql_max_time_series_count はv6.0.0 で追加されました。
注記:
この TiDB 変数はTiDB Cloudには適用されません。
注記:
現在、TiDBダッシュボードのTop SQLページには、負荷に最も寄与する上位5種類のSQLクエリのみが表示されますが、これは
tidb_top_sql_max_time_series_countの設定とは無関係です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
100 - 範囲:
[1, 5000]
- この変数は、負荷に最も大きく寄与するSQLステートメント(つまり、上位N個)を、1分あたりTop SQLで記録する数を制御するために使用されます。
tidb_track_aggregate_memory_usage
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、TiDB が集計関数のメモリ使用量を追跡するかどうかを制御します。
tidb_tso_client_batch_max_wait_time はv5.3.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0 - 範囲:
[0, 10] - 単位:ミリ秒
- この変数は、TiDBがPDからTSOを要求する際のバッチ操作の最大待機時間を設定するために使用されます。デフォルト値は
0で、これは追加の待機時間がないことを意味します。 - TiDBで使用されるPDクライアントは、PDからTSOリクエストを取得する際、同時に受信したTSOリクエストを可能な限り多く収集します。そして、収集したリクエストをバッチ処理で1つのRPCリクエストに統合し、PDに送信します。これにより、PDへの負荷を軽減できます。
- この変数を
0より大きい値に設定すると、TiDBは各バッチマージの終了前に、この値の最大期間待機します。これは、より多くのTSOリクエストを収集し、バッチ処理の効果を向上させるためです。 - この変数の値を増加させるシナリオ:
- TSOリクエストの負荷が高いため、PDリーダーのCPUがボトルネックとなり、TSO RPCリクエストのレイテンシーが増大する。
- クラスター内にはTiDBインスタンスは多くありませんが、すべてのTiDBインスタンスが高い同時実行性で動作しています。
- この変数はできるだけ小さい値に設定することをお勧めします。
注記:
- TSO RPCのレイテンシーが、PDリーダーのCPU使用率のボトルネック以外の理由(ネットワークの問題など)で増加するとします。この場合、
tidb_tso_client_batch_max_wait_timeの値を増やすと、TiDBの実行レイテンシーが増加し、クラスタのQPSパフォーマンスに影響を与える可能性があります。- この機能は
tidb_tso_client_rpc_modeと互換性がありません。この変数にゼロ以外の値を設定すると、tidb_tso_client_rpc_mode有効になりません。
tidb_tso_client_rpc_mode v8.4.0で追加
対象範囲:グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: 列挙型
デフォルト値:
DEFAULTPARALLEL-FASTPARALLEL:DEFAULTこの変数は、TiDB が TSO RPC リクエストを PD に送信するモードを切り替えます。このモードによって、TSO RPC リクエストが並列処理されるかどうかが決まり、各 TS 取得操作のバッチ待機時間に影響します。これにより、特定のシナリオにおいて、クエリ実行中の TS 取得の待機時間を短縮できます。
DEFAULT: TiDBは、特定の期間にわたるTS取得操作を単一のTSO RPCリクエストに集約し、バッチ処理でPDに送信してタイムスタンプを取得します。そのため、各TS取得操作の所要時間は、バッチ処理待ち時間とRPC実行時間で構成されます。2DEFAULTでは、異なるTSO RPCリクエストが直列に処理され、各TS取得操作の平均所要時間は、TSO RPCリクエストの実際の処理時間の約1.5倍になります。PARALLEL:このモードでは、TiDBは各バッチの収集時間をDEFAULTモードの半分に短縮し、同時に2つのTSO RPCリクエストを維持しようとします。このようにして、各TS取得操作の平均時間は理論的にはTSO RPC時間の約1.25倍に短縮でき、これはDEFAULTモードの時間コストの約83%に相当します。ただし、バッチ処理の効果は低下し、TSO RPCリクエストの数はDEFAULTモードの約2倍に増加します。PARALLEL-FAST:PARALLELモードと同様に、このモードでは、TiDBは各バッチの収集時間をDEFAULTモードの4分の1に短縮し、同時に4つのTSO RPCリクエストを維持しようとします。このようにして、各TS取得操作の平均時間は理論的にはTSO RPC時間の約1.125倍に短縮でき、これはDEFAULTモードの時間コストの約75%に相当します。ただし、バッチ処理の効果はさらに低下し、TSO RPCリクエストの数はDEFAULTモードの約4倍に増加します。
以下の条件を満たす場合、パフォーマンス向上の可能性を考慮して、この変数を
PARALLELまたはPARALLEL-FASTに切り替えることを検討してください。- TSOの待機時間は、SQLクエリの総実行時間の大部分を占める。
- PDにおけるTSOの割り当ては、まだボトルネックに達していません。
- PDノードとTiDBノードは十分なCPUリソースを備えている。
- TiDBとPD間のネットワークレイテンシーは、PDがTSOを割り当てるのにかかる時間よりもかなり長い(つまり、TSO RPCの実行時間の大部分はネットワークレイテンシーによるものである)。
- TSO RPCリクエストの所要時間を取得するには、Grafana TiDBダッシュボードのPDクライアントセクションにあるPD TSO RPC所要時間パネルを確認してください。
- PD TSO割り当ての期間を確認するには、Grafana PDダッシュボードのTiDBセクションにあるPDサーバーTSOハンドル期間パネルを確認してください。
- TiDBとPD間のTSO RPCリクエストの増加(
PARALLELの場合は2倍、PARALLEL-FASTの場合は4倍)によって生じる追加のネットワークトラフィックは許容範囲内です。
注記:
- モード
PARALLELとモードPARALLEL-FASTは、tidb_tso_client_batch_max_wait_timeおよびtidb_enable_tso_follower_proxyと互換性がありません。tidb_tso_client_batch_max_wait_timetidb_tso_client_batch_max_wait_timeゼロ以外の値に設定されている場合、またはtidb_enable_tso_follower_proxyが有効になっている場合、モードtidb_tso_client_rpc_modeの設定は有効にならず、TiDBは常にモードDEFAULTで動作します。PARALLELとPARALLEL-FASTモードは、TiDBにおけるTSの取得にかかる平均時間を短縮するように設計されています。ただし、レイテンシーの変動が大きい場合(例えば、テールレイテンシーが長い場合やレイテンシーに上昇する場合など)は、これらの2つのモードでは顕著なパフォーマンス向上は得られない可能性があります。
tidb_cb_pd_metadata_error_rate_threshold_ratioは v8.5.5 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
0 - 範囲:
[0, 1] - この変数は、TiDBがサーキットブレーカーをトリガーするタイミングを制御します。値を
0(デフォルト)に設定すると、サーキットブレーカーは無効になります。3~0.011値を設定すると有効になり、PDに送信される特定のリクエストのエラー率がしきい値に達するか超えた場合にサーキットブレーカーがトリガーされます。
tidb_ttl_delete_rate_limit はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
0 - 範囲:
[0, 9223372036854775807] - この変数は、各 TiDB ノード上の TTL ジョブにおける
DELETEステートメントの実行速度を制限するために使用されます。この値は、TTL ジョブ内の単一ノードで 1 秒あたりに許可される最大DELETEステートメント数を表します。この変数を0に設定すると、制限は適用されません。詳細については、生きる時が来たを参照してください。
tidb_ttl_delete_batch_size はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
100 - 範囲:
[1, 10240] - この変数は、TTL ジョブの
DELETEつのトランザクションで削除できる最大行数を設定するために使用されます。詳細については、生きる時が来たを参照してください。
tidb_ttl_delete_worker_count はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
4 - 範囲:
[1, 256] - この変数は、各 TiDB ノードでの TTL ジョブの最大同時実行数を設定するために使用されます。詳細については、生きる時が来たを参照してください。
tidb_ttl_job_enable v6.5.0で追加
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - タイプ: ブール値
- この変数は、TTL ジョブを有効にするかどうかを制御するために使用されます。これを
OFFに設定すると、TTL 属性を持つすべてのテーブルが期限切れデータのクリーンアップを自動的に停止します。詳細については、生きる時が来たを参照してください。
tidb_ttl_scan_batch_size はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
500 - 範囲:
[1, 10240] - この変数は、TTL ジョブで期限切れデータをスキャンするために使用される各
SELECTステートメントのLIMIT値を設定するために使用されます。詳細については、生きる時が来たを参照してください。
tidb_ttl_scan_worker_count はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
4 - 範囲:
[1, 256] - この変数は、各 TiDB ノードでの TTL スキャン ジョブの最大同時実行数を設定するために使用されます。詳細については、生きる時が来たを参照してください。
tidb_ttl_job_schedule_window_start_time はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- タイプ: 時間
- クラスターに保持される: はい
- デフォルト値:
00:00 +0000 - この変数は、バックグラウンドで実行されるTTLジョブのスケジューリングウィンドウの開始時刻を制御するために使用されます。この変数の値を変更する際は、ウィンドウが小さすぎると期限切れデータのクリーンアップが失敗する可能性があるため注意してください。詳細については、生きる時が来たを参照してください。
tidb_ttl_job_schedule_window_end_time はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- ヒントSET_VARに適用:いいえ
- タイプ: 時間
- クラスターに保持される: はい
- デフォルト値:
23:59 +0000 - この変数は、バックグラウンドで実行されるTTLジョブのスケジューリングウィンドウの終了時刻を制御するために使用されます。この変数の値を変更する際は、ウィンドウが小さすぎると期限切れデータのクリーンアップが失敗する可能性があるため注意してください。詳細については、生きる時が来たを参照してください。
tidb_ttl_running_tasks はv7.0.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
-1~[1, 256] - クラスター全体で実行中の TTL タスクの最大数を指定します。
-1、TTL タスクの数が TiKV ノードの数と等しいことを意味します。詳細については、生きる時が来たを参照してください。
tidb_txn_assertion_level v6.0.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:いいえ
タイプ: 列挙型
デフォルト値:
FASTFASTSTRICT値:OFFこの変数はアサーション レベルを制御するために使用されます。アサーションは、データとインデックス間の整合性チェックであり、書き込まれるキーがトランザクションのコミット プロセスに存在するかどうかをチェックします。詳細については、 データとインデックス間の不整合のトラブルシューティング参照してください。
OFF:このチェックを無効にする。FAST:ほとんどのチェック項目を有効にしますが、パフォーマンスへの影響はほとんどありません。STRICT:すべてのチェック項目を有効にします。システム負荷が高い場合、悲観的トランザクションのパフォーマンスにわずかな影響があります。
v6.0.0以降のバージョンの新規クラスターの場合、デフォルト値は
FASTです。v6.0.0より前のバージョンからアップグレードする既存のクラスターの場合、デフォルト値はOFFです。
tidb_txn_commit_batch_size はv6.2.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
16384 - 範囲:
[1, 1073741824] - 単位:バイト
- この変数は、TiDB が TiKV に送信するトランザクションコミット要求のバッチサイズを制御するために使用されます。アプリケーションワークロード内のトランザクションの大部分に多数の書き込み操作が含まれている場合、この変数の値を大きくすることでバッチ処理のパフォーマンスを向上させることができます。ただし、この変数を大きすぎる値に設定して TiKV の
raft-entry-max-sizeの制限を超えると、コミットが失敗する可能性があります。
tidb_txn_entry_size_limit はv7.6.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 125829120] - 単位:バイト
- この変数は、TiDB 構成項目
performance.txn-entry-size-limit動的に変更するために使用されます。これは、TiDB 内の単一行のデータのサイズを制限し、構成項目 7 と同等です。この変数のデフォルト値は0であり、これは TiDB がデフォルトで構成項目txn-entry-size-limitの値を使用することを意味します。この変数がゼロ以外の値に設定されている場合、txn-entry-size-limitも同じ値に設定されます。
注記:
この変数をSESSIONスコープで変更すると、現在のユーザーセッションのみに影響し、内部TiDBセッションには影響しません。内部TiDBトランザクションのエントリサイズが構成項目の制限を超えると、トランザクションが失敗する可能性があります。したがって、制限を動的に増やすには、変数をGLOBALスコープで変更することをお勧めします。
tidb_txn_mode
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
pessimistic - 可能な
optimistic:pessimistic - この変数はトランザクション モードを設定するために使用されます。 TiDB 3.0 は悲観的トランザクションをサポートします。 TiDB 3.0.8 以降、悲観的取引モードはデフォルトで有効になっています。
- TiDBをv3.0.7以前のバージョンからv3.0.8以降のバージョンにアップグレードしても、デフォルトのトランザクションモードは変更されません。新しく作成されたクラスタのみが、デフォルトで悲観的トランザクションモードを使用します。
- この変数が「楽観的」または「」に設定されている場合、TiDB は楽観的取引モードを使用します。
tidb_use_plan_baselines v4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - この変数は、実行プランのバインディング機能を有効にするかどうかを制御するために使用されます。デフォルトでは有効になっており、値
OFFを割り当てることで無効にできます。実行プランのバインディングの使用方法については、実行計画の拘束拘束」を参照してください。
tidb_wait_split_region_finish
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: ブール値
- デフォルト値:
ON - リージョンの分散には通常長い時間がかかりますが、これはPDスケジューリングとTiKVの負荷によって決まります。この変数は、
SPLIT REGIONステートメントの実行時にすべてのリージョンの分散が完了した後に結果をクライアントに返すかどうかを設定するために使用されます。ON、SPLIT REGIONSステートメントがすべてのリージョンが分散されるまで待機することを要求します。OFFを指定すると、SPLIT REGIONSステートメントはすべての領域の散布が完了する前に戻ることができます。
- リージョンを分散させる場合、分散対象のリージョンの書き込みおよび読み取りパフォーマンスに影響が出る可能性があることに注意してください。バッチ書き込みやデータインポートのシナリオでは、リージョンの分散処理が完了してからデータをインポートすることをお勧めします。
tidb_wait_split_region_timeout
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
300 - 範囲:
[1, 2147483647] - 単位:秒
- この変数は、
SPLIT REGIONステートメントの実行タイムアウトを設定するために使用されます。ステートメントが指定された時間内に完全に実行されない場合、タイムアウトエラーが返されます。
tidb_window_concurrency v4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
-1 - 範囲:
[1, 256] - 単位:糸
- この変数は、ウィンドウ演算子の並行度を設定するために使用されます。
- 値が
-1の場合は、代わりに値tidb_executor_concurrencyが使用されます。
tiflash_fastscan v6.3.0の新機能
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- デフォルト値:
OFF - タイプ: ブール値
- ファストスキャンが有効になっている場合 (
ONに設定されている場合)、 TiFlash はより効率的なクエリ パフォーマンスを提供しますが、クエリ結果の精度やデータの一貫性は保証されません。
tiflash_fine_grained_shuffle_batch_size v6.2.0で追加
- 範囲: セッション | グローバル
- ヒントSET_VARに適用:はい
- デフォルト値:
8192 - 範囲:
[1, 18446744073709551615] - 細粒度シャッフルが有効になっている場合、 TiFlashにプッシュダウンされるウィンドウ関数を並列実行できます。この変数は、送信側から送信されるデータのバッチサイズを制御します。
- パフォーマンスへの影響:ビジネス要件に応じて適切なサイズを設定してください。不適切な設定はパフォーマンスに影響します。値が小さすぎる場合(例えば
1、ブロックごとに 1 つのネットワーク転送が発生します。値が大きすぎる場合(例えばテーブルの総行数)、受信側がデータの待機にほとんどの時間を費やすため、パイプライン処理が機能しなくなります。適切な値を設定するには、 TiFlashレシーバーが受信する行数の分布を確認してください。ほとんどのスレッドが数行(例えば数百行)しか受信しない場合は、この値を増やしてネットワークのオーバーヘッドを削減できます。
tiflash_fine_grained_shuffle_stream_count v6.2.0で追加
範囲: セッション | グローバル
クラスターに保持される: はい
ヒントSET_VARに適用:はい
型: 整数
デフォルト値:
0範囲:
[-1, 1024]ウィンドウ関数が実行のためにTiFlashにプッシュダウンされる際、この変数を使用してウィンドウ関数の実行の並行レベルを制御できます。指定可能な値は以下のとおりです。
- -1: 細粒度シャッフル機能が無効になります。TiFlashにプッシュダウンされたウィンドウ関数は、シングルスレッドで実行されます。
- 0: 細粒度シャッフル機能が有効になります。tidb_max_tiflash_threads
tidb_max_tiflash_threads有効な値 (0 より大きい値) に設定されている場合、tiflash_fine_grained_shuffle_stream_counttidb_max_tiflash_threadsの値に設定されます。それ以外の場合は、 TiFlash計算ノードの CPU リソースに基づいて自動的に推定されます。TiFlash 上のウィンドウ関数の実際の並行レベルは、min(tiflash_fine_grained_shuffle_stream_count、 TiFlashTiFlash上の物理スレッド数) です。 - 0より大きい整数: 細粒度シャッフル機能が有効になります。TiFlashにプッシュダウンされたウィンドウ関数は、複数のスレッドで実行されます。並行処理レベルは、min(
tiflash_fine_grained_shuffle_stream_count、 TiFlashノード上の物理スレッド数)です。
理論的には、ウィンドウ関数のパフォーマンスはこの値に比例して向上します。しかし、この値が実際の物理スレッド数を超えると、逆にパフォーマンスが低下します。
tiflash_mem_quota_query_per_node v7.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[-1, 9223372036854775807] - この変数は、 TiFlashノード上のクエリの最大メモリ使用量を制限します。クエリのメモリ使用量がこの制限を超えると、 TiFlashはエラーを返してクエリを終了します。この変数を
-1または0に設定すると、制限なしとなります。この変数が0より大きい値に設定され、tiflash_query_spill_ratio有効な値に設定されている場合、 TiFlashはクエリレベルのスピル有効にします。
tiflash_query_spill_ratio v7.4.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0.7 - 範囲:
[0, 0.85] - この変数はTiFlashのしきい値を制御します。 クエリレベルのスピル
0は自動クエリ レベル スピルを無効にすることを意味します。この変数が0より大きく、クエリのメモリ使用量がtiflash_mem_quota_query_per_node*tiflash_query_spill_ratioを超えると、 TiFlash はクエリ レベル スピルをトリガーし、必要に応じてクエリ内のサポートされている演算子のデータをスピルします。
注記:
- この変数は、
tiflash_mem_quota_query_per_nodeが0より大きい場合にのみ有効になります。つまり、 tiflash_mem_quota_query_per_nodeが0または-1の場合、tiflash_query_spill_ratioが0より大きい場合でも、クエリレベルのスピルは有効になりません。- TiFlashクエリレベルのスピリングが有効になっている場合、個々のTiFlashオペレータのスピリングしきい値は自動的に無効になります。つまり、
tiflash_mem_quota_query_per_nodeとtiflash_query_spill_ratio両方が0より大きい場合、 tidb_max_bytes_before_tiflash_external_sort 、 tidb_max_bytes_before_tiflash_external_group_by 、 tidb_max_bytes_before_tiflash_external_joinの3つの変数は自動的に無効になり、これらを0に設定するのと同等になります。
tiflash_replica_read v7.3.0の新機能
注記:
この TiDB 変数はTiDB Cloudには適用されません。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
all_replicas - 金額オプション:
all_replicasclosest_adaptiveまたはclosest_replicas - この変数は、クエリがTiFlashエンジンを必要とする場合に、 TiFlashレプリカを選択するための戦略を設定するために使用されます。
all_replicas、分析計算に利用可能なすべてのTiFlashレプリカを使用することを意味します。closest_adaptive、クエリを開始するTiDBノードと同じゾーンにあるTiFlashレプリカを優先的に使用することを意味します。このゾーンのレプリカに必要なデータがすべて含まれていない場合、クエリは他のゾーンのTiFlashレプリカと、それに対応するTiFlashノードを巻き込みます。closest_replicasを指定すると、クエリを開始するTiDBノードと同じゾーンにあるTiFlashレプリカのみを使用します。このゾーンのレプリカに必要なデータがすべて含まれていない場合、クエリはエラーを返します。
注記:
tiflash_hashagg_preaggregation_mode v8.3.0で追加
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:はい
- タイプ: 列挙型
- デフォルト値:
force_preagg autoforce_streaming:force_preagg- この変数は、 TiFlashにプッシュダウンされる2段階または3段階のHashAgg操作の最初の段階で使用される事前集計戦略を制御します。
force_preagg: TiFlashはHashAggの最初の段階で事前集計を強制します。この動作はv8.3.0以前の動作と一致しています。force_streaming: TiFlash は、事前集計を行わずにデータを HashAgg の次のステージに直接送信します。auto: TiFlashは、現在のワークロードの集約度に基づいて、事前集約を実行するかどうかを自動的に選択します。
tikv_client_read_timeout はv7.4.0 で追加されました。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
0 - 範囲:
[0, 2147483647] - 単位:ミリ秒
tikv_client_read_timeout使用すると、クエリで TiDB が TiKV RPC 読み取りリクエストを送信するタイムアウトを設定できます。TiDB クラスタが不安定なネットワーク環境または深刻な TiKV I/Oレイテンシーのジッターがある環境にあり、アプリケーションが SQL クエリのレイテンシーに敏感な場合は、tikv_client_read_timeout設定して TiKV RPC 読み取りリクエストのタイムアウトを短縮できます。この場合、TiKV ノードで I/Oレイテンシーのジッターが発生すると、TiDB はすぐにタイムアウトして、次の TiKVリージョンピアがある TiKV ノードに RPC リクエストを再送信できます。すべての TiKVリージョンピアのリクエストがタイムアウトした場合、TiDB はデフォルトのタイムアウト (通常 40 秒) で再試行します。- クエリ内でオプティマイザヒント
/*+ SET_VAR(TIKV_CLIENT_READ_TIMEOUT=N) */使用すると、TiDBがTiKV RPC読み取りリクエストを送信するタイムアウトを設定できます。オプティマイザヒントとこのシステム変数の両方が設定されている場合は、オプティマイザヒントが優先されます。 - デフォルト値の
0、デフォルトのタイムアウト(通常は40秒)が使用されることを示します。
注記:
- 通常、通常のクエリは数ミリ秒で完了しますが、TiKVノードのネットワークが不安定な場合やI/Oジッターが発生すると、クエリに1秒以上、場合によっては10秒以上かかることがあります。このような場合、オプティマイザヒント
/*+ SET_VAR(TIKV_CLIENT_READ_TIMEOUT=100) */を使用して、特定のクエリのTiKV RPC読み取りリクエストのタイムアウトを100ミリ秒に設定できます。こうすることで、TiKVノードの応答が遅い場合でも、TiDBはすぐにタイムアウトして、次のTiKVリージョンピアが存在するTiKVノードにRPCリクエストを再送信できます。2つのTiKVノードが同時にI/Oジッターが発生する確率は低いため、クエリは通常、数ミリ秒から110ミリ秒以内に完了します。tikv_client_read_timeoutに小さすぎる値(例えば 1 ミリ秒)を設定しないでください。そうしないと、TiDB クラスタのワークロードが高い場合にリクエストがタイムアウトしやすくなり、その後の再試行によって TiDB クラスタへの負荷がさらに増加します。- クエリの種類ごとに異なるタイムアウト値を設定する必要がある場合は、オプティマイザヒントを使用することをお勧めします。
タイムゾーン
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
SYSTEM - この変数は現在のタイムゾーンを返します。値は、「-8:00」のようなオフセット、または「America/Los_Angeles」のような名前付きゾーンのいずれかで指定できます。
- 値
SYSTEMは、タイムゾーンがシステムホストと同じであるべきであることを意味し、これはsystem_time_zone変数で取得できます。
タイムスタンプ
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- タイプ: フロート
- デフォルト値:
0 - 範囲:
[0, 2147483647] - この変数の値が空でない場合、それは関数
CURRENT_TIMESTAMP()NOW()およびその他の関数のタイムスタンプとして使用されるUNIXエポックを示します。この変数は、データ復元またはレプリケーションで使用される可能性があります。
トランザクション分離
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
REPEATABLE-READ READ-COMMITTEDSERIALIZABLE値REPEATABLE-READREAD-UNCOMMITTED- この変数はトランザクションの分離を設定します。 TiDB は MySQL との互換性のために
REPEATABLE-READ宣伝しますが、実際の分離レベルはスナップショット分離です。詳細については、トランザクション分離レベル参照してください。
tx_isolation
この変数はtransaction_isolationの別名です。
tx_isolation_one_shot
注記:
この変数はTiDB内部で使用されます。ユーザー側で使用する必要はありません。
内部的には、TiDBパーサーはSET TRANSACTION ISOLATION LEVEL [READ COMMITTED| REPEATABLE READ | ...]ステートメントをSET @@SESSION.TX_ISOLATION_ONE_SHOT = [READ COMMITTED| REPEATABLE READ | ...]に変換します。
tx_read_ts
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値: ""
- ステイル読み取りシナリオでは、このセッション変数を使用して、Stable Read のタイムスタンプ値を記録します。
- この変数はTiDBの内部動作に使用されます。この変数を設定することは推奨されません。
トランザクションスコープ
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値:
global - 値オプション:
globalとlocal - この変数は、現在のセッショントランザクションがグローバルトランザクションかローカルトランザクションかを設定するために使用されます。
- この変数はTiDBの内部動作に使用されます。この変数を設定することは推奨されません。
validate_password.check_user_nameは v6.5.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
ON - タイプ: ブール値
- この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードがユーザー名と一致するかどうかをチェックします。この変数は、
validate_password.enableが有効になっている場合にのみ有効になります。 - この変数が有効で
ONに設定されている場合、パスワードを設定すると、TiDBはパスワードをユーザー名(ホスト名を除く)と比較します。パスワードがユーザー名と一致する場合、パスワードは拒否されます。 - この変数は
validate_password.policyとは独立しており、パスワードの複雑性チェックレベルの影響を受けません。
validate_password.dictionary v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
"" - 型: 文字列
- この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードが辞書と一致するかどうかを確認します。この変数は、
validate_password.enableが有効で、validate_password.policyが2(STRONG) に設定されている場合にのみ有効になります。 - この変数は、1024文字以下の文字列です。パスワードに使用できない単語のリストが含まれています。各単語はセミコロン(
;)で区切られています。 - この変数はデフォルトでは空の文字列に設定されており、辞書チェックは実行されません。辞書チェックを実行するには、照合する単語を文字列に含める必要があります。この変数が設定されている場合、パスワードを設定すると、TiDB はパスワードの各部分文字列 (長さは 4 ~ 100 文字) を辞書内の単語と比較します。パスワードのいずれかの部分文字列が辞書内の単語と一致する場合、パスワードは拒否されます。比較では大文字と小文字は区別されません。
validate_password.enable はv6.5.0 で追加されました。
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialでは常に有効になっています。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- デフォルト値:
OFF - タイプ: ブール値
- この変数は、パスワードの複雑性チェックを実行するかどうかを制御します。この変数を
ONに設定すると、パスワードを設定する際にTiDBがパスワードの複雑性チェックを実行します。
validate_password.length v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
8 - 範囲:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
[0, 2147483647]、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合は[8, 2147483647] - この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードの長さが十分かどうかをチェックします。デフォルトでは、パスワードの最小長さは
8です。この変数は、validate_password.enableが有効になっている場合にのみ有効になります。 - この変数の値は、式
validate_password.number_count + validate_password.special_char_count + (2 * validate_password.mixed_case_count)より小さくてはなりません。 validate_password.number_countvalidate_password.special_char_countまたはvalidate_password.mixed_case_countの値を変更して式の値がvalidate_password.lengthより大きくなると、validate_password.lengthの値は自動的に式の値に合わせて変更されます。
validate_password.mixed_case_count v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
[0, 2147483647]、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合は[1, 2147483647] - この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードに十分な大文字と小文字が含まれているかどうかをチェックします。この変数は、
validate_password.enableが有効で、validate_password.policyが1(MEDIUM) 以上に設定されている場合のみ有効になります。 - パスワードに含まれる大文字の数と小文字の数は、いずれも
validate_password.mixed_case_count未満であってはなりません。例えば、変数が1に設定されている場合、パスワードには少なくとも1つの大文字と1つの小文字が含まれている必要があります。
validate_password.number_countは v6.5.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
[0, 2147483647]、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合は[1, 2147483647] - この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードに十分な数の数字が含まれているかどうかをチェックします。この変数は、
validate_password.enableが有効で、validate_password.policyが1(MEDIUM)以上に設定されている場合にのみ有効になります。
validate_password.policy v6.5.0で追加
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- タイプ: 列挙型
- デフォルト値:
1 - 値オプション:TiDB Self-
2およびTiDB Cloud Dedicatedの場合は01TiDB Cloud StarterおよびTiDB Cloud Essential1場合は2 - この変数は、パスワードの複雑性チェックのポリシーを制御します。この変数は、
validate_password.enableが有効になっている場合にのみ有効になります。この変数の値によって、validate_password.check_user_nameを除く他のvalidate-password変数がパスワードの複雑性チェックで有効になるかどうかが決まります。 - この変数の値は
01または2(それぞれLOW、MEDIUM、STRONGに対応)になります。ポリシーレベルによってチェック項目が異なります。- 0またはLOW:パスワードの長さ。
- 1 または MEDIUM: パスワードの長さ、大文字と小文字、数字、および特殊文字。
- 2 または強力: パスワードの長さ、大文字と小文字、数字、特殊文字、および辞書との一致。
validate_password.special_char_countは v6.5.0 で追加されました。
- 対象範囲:グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
1 - 範囲:TiDB Self-ManagedおよびTiDB Cloud Dedicatedの場合は
[0, 2147483647]、 TiDB Cloud StarterおよびTiDB Cloud Essentialの場合は[1, 2147483647] - この変数は、パスワードの複雑性チェックにおけるチェック項目です。パスワードに十分な特殊文字が含まれているかどうかをチェックします。この変数は、
validate_password.enableが有効で、validate_password.policyが1(MEDIUM) 以上に設定されている場合のみ有効になります。
バージョン
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値:
8.0.11-TiDB-(tidbバージョン) - この変数は、MySQLのバージョンに続いてTiDBのバージョンを返します。例えば、「8.0.11-TiDB-v8.5.4」のようになります。
バージョンコメント
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: (文字列)
- この変数は、TiDBのバージョンに関する詳細情報を返します。例えば、「TiDB Server (Apache License 2.0) Community Edition、MySQL 8.0互換」などです。
バージョンコンパイルマシン
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: (文字列)
- この変数は、TiDBが実行されているCPUアーキテクチャの名前を返します。
バージョンコンパイルOS
- 適用範囲:なし
- ヒントSET_VARに適用:いいえ
- デフォルト値: (文字列)
- この変数は、TiDBが実行されているOSの名前を返します。
待機タイムアウト
注記:
この変数は、 TiDB Cloud StarterおよびTiDB Cloud Essentialクラスターでは読み取り専用です。
- 範囲: セッション | グローバル
- クラスターに保持される: はい
- ヒントSET_VARに適用:いいえ
- 型: 整数
- デフォルト値:
28800 - 範囲:
[0, 31536000] - 単位:秒
- この変数は、ユーザーセッションのアイドルタイムアウトを制御します。値がゼロの場合は無制限です。
警告回数
- 範囲: セッション
- ヒントSET_VARに適用:いいえ
- デフォルト値:
0 - この読み取り専用変数は、前回実行されたステートメントで発生した警告の数を示します。
