コンフィグレーションを動的に変更する

このドキュメントでは、クラスター構成を動的に変更する方法について説明します。

クラスターコンポーネントを再起動せずに、SQL ステートメントを使用してコンポーネント (TiDB、TiKV、PD など) の構成を動的に更新できます。現在、TiDB インスタンスの構成を変更する方法は、他のコンポーネント (TiKV や PD など) の構成を変更する方法とは異なります。

注記:

この機能は TiDB セルフホスト型にのみ適用され、 TiDB Cloudでは使用できません。 TiDB Cloudの場合、構成を変更するにはTiDB Cloudのサポートに連絡する必要があります。

共通の操作

このセクションでは、構成を動的に変更する一般的な操作について説明します。

インスタンス構成のビュー

クラスター内のすべてのインスタンスの構成を表示するには、 show configステートメントを使用します。結果は次のとおりです。

show config;
+------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Type | Instance | Name | Value | +------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tidb | 127.0.0.1:4001 | advertise-address | 127.0.0.1 | | tidb | 127.0.0.1:4001 | binlog.binlog-socket | | | tidb | 127.0.0.1:4001 | binlog.enable | false | | tidb | 127.0.0.1:4001 | binlog.ignore-error | false | | tidb | 127.0.0.1:4001 | binlog.strategy | range | | tidb | 127.0.0.1:4001 | binlog.write-timeout | 15s | | tidb | 127.0.0.1:4001 | check-mb4-value-in-utf8 | true | ...

結果をフィールドでフィルタリングできます。例えば:

show config where type='tidb' show config where instance in (...) show config where name like '%log%' show config where type='tikv' and name='log.level'

TiKV 構成を動的に変更する

注記:

  • TiKV 構成項目を動的に変更した後、TiKV 構成ファイルは自動的に更新されます。ただし、 tiup edit-config ; を実行して、対応する構成項目を変更する必要もあります。そうしないと、 upgradereloadなどの操作によって変更が上書きされます。設定項目の変更の詳細については、 TiUPを使用して構成を変更するを参照してください。
  • tiup edit-configを実行した後、 tiup reloadを実行する必要はありません。

set configステートメントを使用すると、インスタンス アドレスまたはコンポーネントタイプに応じて、単一インスタンスまたはすべてのインスタンスの構成を変更できます。

  • すべての TiKV インスタンスの構成を変更します。

注記:

変数名をバッククォートで囲むことをお勧めします。

set config tikv `split.qps-threshold`=1000;
  • 単一の TiKV インスタンスの構成を変更します。

    set config "127.0.0.1:20180" `split.qps-threshold`=1000;

変更が成功すると、 Query OKが返されます。

Query OK, 0 rows affected (0.01 sec)

バッチ変更中にエラーが発生した場合は、警告が返されます。

set config tikv `log-level`='warn';
Query OK, 0 rows affected, 1 warning (0.04 sec)
show warnings;
+---------+------+---------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------------------------------------------------------------------------+ | Warning | 1105 | bad request to http://127.0.0.1:20180/config: fail to update, error: "config log-level can not be changed" | +---------+------+---------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

バッチ変更は原子性を保証しません。変更は一部のインスタンスでは成功する可能性がありますが、他のインスタンスでは失敗する可能性があります。 set tikv key=valを使用して TiKV クラスター全体の構成を変更すると、一部のインスタンスで変更が失敗する可能性があります。 show warnings使用して結果を確認できます。

一部の変更が失敗した場合は、対応するステートメントを再実行するか、失敗した各インスタンスを変更する必要があります。ネットワークの問題またはマシンの障害により一部の TiKV インスタンスにアクセスできない場合は、回復後にこれらのインスタンスを変更します。

構成アイテムが正常に変更されると、結果は構成ファイルに保持され、後続の操作で優先されます。一部の構成項目の名前は、 limitkeyなどの TiDB 予約語と競合する可能性があります。これらの構成項目は、バッククォート`を使用して囲みます。たとえば、 `raftstore.raft-log-gc-size-limit`

次の TiKV 構成項目は動的に変更できます。

コンフィグレーション項目説明
ログレベルログレベル。
raftstore.raft-max-inflight-msgs確認するRaft丸太の数。この数値を超えると、 Raftステート マシンのログ送信が遅くなります。
raftstore.raft-log-gc-tick-intervalRaftログを削除するポーリング タスクがスケジュールされる時間間隔
raftstore.raft-log-gc-thresholdRaft丸太の最大許容数のソフトリミット
raftstore.raft-log-gc-count-limitRaftの残存丸太の許容数のハードリミット
raftstore.raft-log-gc-size-limitRaftの残存丸太の許容サイズに対する厳しい制限
raftstore.raft-max-size-per-msg生成が許可される単一メッセージ パケットのサイズのソフト制限
raftstore.raft-entry-max-size単一のRaftログの最大サイズに対するハードリミット
raftstore.raft-entry-cache-life-timeメモリ内のログ キャッシュに許可される最大残り時間
raftstore.split-region-check-tick-intervalリージョン分割が必要かどうかを確認する時間間隔
raftstore.region-split-check-diffリージョン分割前にリージョンデータが超えることが許可される最大値
raftstore.region-compact-check-intervalRocksDB の圧縮を手動でトリガーする必要があるかどうかを確認する時間間隔
raftstore.region-compact-check-step手動圧縮の各ラウンドで一度にチェックされるリージョンの数
raftstore.region-compact-min-tombstonesRocksDB の圧縮をトリガーするために必要なトゥームストーンの数
raftstore.region-compact-tombstones-percentRocksDB の圧縮をトリガーするために必要なトゥームストーンの割合
raftstore.pd-heartbeat-tick-intervalリージョンの PD へのハートビートがトリガーされる時間間隔
raftstore.pd-store-heartbeat-tick-intervalストアの PD へのハートビートがトリガーされる時間間隔
raftstore.snap-mgr-gc-tick-interval期限切れのスナップショット ファイルのリサイクルがトリガーされる時間間隔
raftstore.snap-gc-timeoutスナップショット ファイルが保存される最長時間
raftstore.lock-cf-compact-intervalTiKV がロックカラムファミリーの手動圧縮をトリガーする時間間隔
raftstore.lock-cf-compact-bytes-thresholdTiKV がロックカラムファミリーの手動圧縮をトリガーするサイズ
raftstore.messages-per-tickバッチごとに処理されるメッセージの最大数
raftstore.max-peer-down-durationピアに許可される非アクティブ期間の最長値
raftstore.max-leader-missing-durationリーダーなしでピアが存在できる最長期間。この値を超えると、ピアは PD を使用して、ピアが削除されたかどうかを確認します。
raftstore.abnormal-leader-missing-durationピアがリーダーなしで存在できる通常の期間。この値を超えると、ピアは異常とみなされ、メトリクスとログにマークが付けられます。
raftstore.peer-stale-state-check-intervalピアにリーダーが存在しないかどうかを確認する時間間隔
raftstore.consistency-check-interval整合性をチェックする時間間隔 (TiDB のガベージコレクションと互換性がないため推奨されません)
raftstore.raft-store-max-leader-leaseRaftのリーダーとして最も長く信頼されていた期間
raftstore.merge-check-tick-intervalマージチェックの時間間隔
raftstore.cleanup-import-sst-interval期限切れの SST ファイルをチェックする時間間隔
raftstore.local-read-batch-size1 回のバッチで処理される読み取りリクエストの最大数
raftstore.apply-yield-write-size適用スレッドが各ラウンドで 1 つの FSM (有限状態マシン) に対して書き込むことができる最大バイト数
raftstore.hibernate-timeout起動時に休止状態に入るまでの最短の待機時間。この期間内では、TiKV は休止状態になりません (解放されません)。
raftstore.apply-pool-sizeデータをディスクにフラッシュするプール内のスレッドの数。これは、適用スレッド プールのサイズです。
raftstore.store-pool-sizeRaftを処理するプール内のスレッドの数 ( Raftstoreスレッド プールのサイズ)
raftstore.apply-max-batch-sizeRaftステート マシンは、BatchSystem によってデータ書き込みリクエストをバッチで処理します。この設定項目は、1 つのバッチでリクエストを実行できるRaftステート マシンの最大数を指定します。
raftstore.store-max-batch-sizeRaftステート マシンは、BatchSystem によってバッチでディスクにログをフラッシュするリクエストを処理します。この設定項目は、1 つのバッチでリクエストを処理できるRaftステート マシンの最大数を指定します。
raftstore.store-io-pool-sizeRaft I/O タスクを処理するスレッドの数。これは StoreWriter スレッド プールのサイズでもあります (この値をゼロ以外の値から 0 に、または 0 からゼロ以外の値に変更しないでください)。
readpool.unified.max-thread-count読み取りリクエストを均一に処理するスレッド プール内のスレッドの最大数。UnifyReadPool スレッド プールのサイズです。
readpool.unified.auto-adjust-pool-sizeUnifyReadPool スレッド プール サイズを自動的に調整するかどうかを決定します
coprocessor.split-region-on-tableテーブルごとにリージョンを分割できるようにします
coprocessor.batch-split-limitバッチでのリージョン分割のしきい値
coprocessor.region-max-sizeリージョンの最大サイズ
coprocessor.region-split-size新しく分割されたリージョンのサイズ
coprocessor.region-max-keysリージョン内で許可されるキーの最大数
coprocessor.region-split-keys新しく分割されたリージョン内のキーの数
pessimistic-txn.wait-for-lock-timeout悲観的トランザクションがロックを待機する最長期間
pessimistic-txn.wake-up-delay-duration悲観的トランザクションがウェイクアップされるまでの期間
pessimistic-txn.pipelinedパイプライン化された悲観的ロック プロセスを有効にするかどうかを決定します。
pessimistic-txn.in-memoryメモリ内の悲観的ロックを有効にするかどうかを決定します。
quota.foreground-cpu-timeTiKV フォアグラウンドが読み取りおよび書き込みリクエストを処理するために使用する CPU リソースのソフト制限
quota.foreground-write-bandwidthフォアグラウンド トランザクションがデータを書き込む帯域幅のソフト制限
quota.foreground-read-bandwidthフォアグラウンド トランザクションとコプロセッサーがデータを読み取る帯域幅のソフト制限
quota.background-cpu-time読み取りおよび書き込みリクエストを処理するために TiKV バックグラウンドで使用される CPU リソースのソフト制限
quota.background-write-bandwidthバックグラウンド トランザクションがデータを書き込む帯域幅のソフト制限 (まだ有効ではありません)
quota.background-read-bandwidthバックグラウンド トランザクションとコプロセッサーがデータを読み取る帯域幅のソフト制限 (まだ有効ではありません)
quota.enable-auto-tuneクォータの自動調整を有効にするかどうか。この構成項目が有効になっている場合、TiKV は TiKV インスタンスの負荷に基づいてバックグラウンド リクエストのクォータを動的に調整します。
quota.max-delay-duration単一の読み取りまたは書き込みリクエストがフォアグラウンドで処理されるまで強制的に待機する最大時間
gc.ratio-thresholdリージョンGC がスキップされるしきい値 (GC バージョン数 / キー数)
gc.batch-keys1 回のバッチで処理されるキーの数
gc.max-write-bytes-per-secRocksDB に 1 秒あたりに書き込むことができる最大バイト数
gc.enable-compaction-filterコンパクションフィルターを有効にするかどうか
gc.compaction-filter-skip-version-checkコンパクションフィルターのクラスターバージョンチェックをスキップするかどうか(未リリース)
{db-name}.max-total-wal-sizeWAL 合計の最大サイズ
{db-name}.max-background-jobsRocksDB のバックグラウンド スレッドの数
{db-name}.max-background-flushesRocksDB のフラッシュ スレッドの最大数
{db-name}.max-open-filesRocksDB が開くことができるファイルの総数
{db-name}.compaction-readahead-size圧縮時のreadaheadのサイズ
{db-name}.bytes-per-syncファイルが非同期で書き込まれている間に、OS がファイルをディスクに増分同期する速度。
{db-name}.wal-bytes-per-syncWAL ファイルの書き込み中に OS が WAL ファイルをディスクに増分同期する速度
{db-name}.writable-file-max-buffer-sizeWritableFileWrite で使用される最大バッファ サイズ
{db-name}.{cf-name}.block-cache-sizeブロックのキャッシュサイズ
{db-name}.{cf-name}.write-buffer-sizememtableのサイズ
{db-name}.{cf-name}.max-write-buffer-numbermemtable の最大数
{db-name}.{cf-name}.max-bytes-for-level-base基本レベル (L1) の最大バイト数
{db-name}.{cf-name}.target-file-size-base基本レベルでのターゲット ファイルのサイズ
{db-name}.{cf-name}.level0-file-num-compaction-trigger圧縮をトリガーする L0 のファイルの最大数
{db-name}.{cf-name}.level0-slowdown-writes-trigger書き込み停止をトリガーする L0 のファイルの最大数
{db-name}.{cf-name}.level0-stop-writes-trigger書き込みを完全にブロックする L0 のファイルの最大数
{db-name}.{cf-name}.max-compaction-bytes圧縮ごとにディスクに書き込まれる最大バイト数
{db-name}.{cf-name}.max-bytes-for-level-multiplierレイヤーのデフォルトの増幅倍数
{db-name}.{cf-name}.disable-auto-compactions自動圧縮を有効または無効にします。
{db-name}.{cf-name}.soft-pending-compaction-bytes-limit保留中の圧縮バイトのソフト制限
{db-name}.{cf-name}.hard-pending-compaction-bytes-limit保留中の圧縮バイトのハード制限
{db-name}.{cf-name}.titan.blob-run-modeBLOB ファイルの処理モード
server.grpc-memory-pool-quotagRPC が使用できるメモリサイズを制限します。
server.max-grpc-send-msg-len送信できる gRPC メッセージの最大長を設定します
server.snap-io-max-bytes-per-secスナップショットを処理するときに許容される最大ディスク帯域幅を設定します
server.concurrent-send-snap-limit同時に送信されるスナップショットの最大数を設定します
server.concurrent-recv-snap-limit同時に受信するスナップショットの最大数を設定します
server.raft-msg-max-batch-size単一の gRPC メッセージに含まれるRaftメッセージの最大数を設定します。
server.simplify-metricsサンプリング監視メトリクスを簡素化するかどうかを制御します
storage.block-cache.capacity共有ブロックキャッシュのサイズ (v4.0.3 以降サポート)
storage.scheduler-worker-pool-sizeスケジューラのスレッド プール内のスレッドの数
backup.num-threadsバックアップ スレッドの数 (v4.0.3 以降サポート)
split.qps-thresholdリージョンでload-base-splitを実行するためのしきい値。リージョンの読み取りリクエストの QPS が 10 秒連続でqps-thresholdを超える場合、このリージョンを分割する必要があります。
split.byte-thresholdリージョンでload-base-splitを実行するためのしきい値。リージョンの読み取りリクエストのトラフィックが 10 秒連続でbyte-thresholdを超える場合、このリージョンを分割する必要があります。
split.region-cpu-overload-threshold-ratioリージョンでload-base-splitを実行するためのしきい値。リージョンの統合読み取りプールの CPU 使用率が 10 秒連続でregion-cpu-overload-threshold-ratio超える場合、このリージョンを分割する必要があります。 (v6.2.0以降サポート)
split.split-balance-scoreパラメータload-base-splitは、2 つの分割リージョンの負荷が可能な限りバランスされるようにします。値が小さいほど、負荷のバランスが取れています。ただし、小さすぎる値を設定すると、分割エラーが発生する可能性があります。
split.split-contained-scoreload-base-splitのパラメータ。値が小さいほど、リージョン分割後のリージョン間の訪問が少なくなります。
cdc.min-ts-intervalResolved TSが転送される時間間隔
cdc.old-value-cache-memory-quotaTiCDC Old Value エントリが占有するメモリの上限
cdc.sink-memory-quotaTiCDC データ変更イベントが占有するメモリの上限
cdc.incremental-scan-speed-limit履歴データの増分スキャン速度の上限
cdc.incremental-scan-concurrency履歴データの同時増分スキャン タスクの最大数

上の表で、接頭辞{db-name}または{db-name}.{cf-name}が付いているパラメータは、RocksDB に関連する設定です。 db-nameのオプションの値はrocksdbraftdbです。

  • db-name writecf rocksdb raftcf場合、 cf-nameのオプションの値はdefaultcf 、およびlockcfです。
  • db-nameraftdb場合、 cf-nameの値はdefaultcfになる可能性があります。

パラメータの詳細な説明については、 TiKVコンフィグレーションファイルを参照してください。

PD構成を動的に変更する

現在、PD はインスタンスごとに個別の構成をサポートしていません。すべての PD インスタンスは同じ構成を共有します。

次のステートメントを使用して PD 構成を変更できます。

set config pd `log.level`='info';

変更が成功すると、 Query OKが返されます。

Query OK, 0 rows affected (0.01 sec)

設定項目が正常に変更されると、結果は設定ファイルではなく etcd に保存されます。 etcd の設定が後続の操作に優先されます。一部の構成項目の名前は、TiDB の予約語と競合する可能性があります。これらの構成項目については、バッククォート`を使用してそれらを囲みます。たとえば、 `schedule.leader-schedule-limit`

次の PD 構成項目は動的に変更できます。

コンフィグレーション項目説明
log.levelログレベル
cluster-versionクラスターのバージョン
schedule.max-merge-region-sizeサイズ制限をRegion Merge (MiB 単位) に制御します。
schedule.max-merge-region-keysRegion Mergeキーの最大数を指定します
schedule.patrol-region-intervalreplicaCheckerの健全性状態をチェックする頻度を決定します。
schedule.split-merge-interval同じリージョンで分割およびマージ操作を実行する時間間隔を決定します。
schedule.max-snapshot-count単一ストアが同時に送信または受信できるスナップショットの最大数を決定します。
schedule.max-pending-peer-count単一ストア内の保留中のピアの最大数を決定します。
schedule.max-store-down-time切断されたストアを回復できないとPDが判断するまでのダウンタイム
schedule.leader-schedule-policyLeaderのスケジューリングのポリシーを決定します
schedule.leader-schedule-limit同時に実行されるLeaderのスケジュール設定タスクの数
schedule.region-schedule-limit同時に実行されるリージョンスケジュール タスクの数
schedule.replica-schedule-limit同時に実行されるレプリカのスケジューリング タスクの数
schedule.merge-schedule-limit同時に実行されるRegion Mergeスケジューリング タスクの数
schedule.hot-region-schedule-limit同時に実行されるホットリージョンスケジューリング タスクの数
schedule.hot-region-cache-hits-thresholdリージョンがホットスポットとみなされるしきい値を決定します。
schedule.high-space-ratioストアのキャパシティがそれ以下であれば十分であるというしきい値比率
schedule.low-space-ratioストアの容量が不足するしきい値比率
schedule.tolerant-size-ratiobalanceバッファ サイズを制御します
schedule.enable-remove-down-replicaDownReplicaを自動的に削除する機能を有効にするかどうかを決定します。
schedule.enable-replace-offline-replica移行する機能を有効にするかどうかを決定しますOfflineReplica
schedule.enable-make-up-replicaレプリカを自動的に補完する機能を有効にするかどうかを決定します。
schedule.enable-remove-extra-replica余分なレプリカを削除する機能を有効にするかどうかを決定します。
schedule.enable-location-replacement分離レベルチェックを有効にするかどうかを決定します
schedule.enable-cross-table-mergeテーブル間のマージを有効にするかどうかを決定します
schedule.enable-one-way-merge一方向のマージを有効にします。これにより、次に隣接するリージョンとのマージのみが許可されます。
replication.max-replicasレプリカの最大数を設定します
replication.location-labelsTiKVクラスターのトポロジー情報
replication.enable-placement-rules配置ルールを有効にする
replication.strictly-match-labelラベルチェックを有効にします
pd-server.use-region-storage独立したリージョンstorageを有効にする
pd-server.max-gap-reset-tsタイムスタンプ (BR) をリセットする最大間隔を設定します。
pd-server.key-typeクラスターキーのタイプを設定します
pd-server.metric-storageクラスターメトリックのstorageアドレスを設定します
pd-server.dashboard-addressダッシュボードのアドレスを設定します
replication-mode.replication-modeバックアップモードを設定します

パラメータの詳細な説明については、 PDコンフィグレーションファイルを参照してください。

TiDB 構成を動的に変更する

現在、TiDB 構成を変更する方法は、TiKV および PD 構成を変更する方法とは異なります。 システム変数を使用して TiDB 構成を変更できます。

次の例は、変数tidb_slow_log_thresholdを使用してslow-threshold動的に変更する方法を示しています。

デフォルト値のslow-thresholdは 300 ミリ秒です。 tidb_slow_log_thresholdを使用すると、200 ミリ秒に設定できます。

set tidb_slow_log_threshold = 200;
Query OK, 0 rows affected (0.00 sec)
select @@tidb_slow_log_threshold;
+---------------------------+ | @@tidb_slow_log_threshold | +---------------------------+ | 200 | +---------------------------+ 1 row in set (0.00 sec)

次の TiDB 構成項目は動的に変更できます。

|コンフィグレーション項目 | SQL 変数 |説明 | | :--- | :--- | | instance.tidb_enable_slow_log | tidb_enable_slow_log |スローログを有効にするかどうか | | instance.tidb_slow_log_threshold | tidb_slow_log_threshold |スローログのしきい値 | | instance.tidb_expensive_query_time_threshold | tidb_expensive_query_time_threshold |高価なクエリのしきい値 |

TiFlash構成を動的に変更する

現在、システム変数tidb_max_tiflash_threadsを使用してTiFlash構成max_threadsを変更できます。これは、 TiFlash がリクエストを実行するための最大同時実行数を指定します。

デフォルト値tidb_max_tiflash_threads-1で、このシステム変数が無効であり、 TiFlash構成ファイルの設定に依存することを示します。 tidb_max_tiflash_threadsを使用してmax_threads ~ 10 を設定できます。

set tidb_max_tiflash_threads = 10;
Query OK, 0 rows affected (0.00 sec)
select @@tidb_max_tiflash_threads;
+----------------------------+ | @@tidb_max_tiflash_threads | +----------------------------+ | 10 | +----------------------------+ 1 row in set (0.00 sec)

このページは役に立ちましたか?