オンラインでConfiguration / コンフィグレーションを変更する

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

ノート:

この機能は実験的です。この機能を実稼働環境で使用することはお勧めしません

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

一般的な操作

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

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

クラスタのすべてのインスタンスの構成を表示するには、 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構成アイテムはオンラインで変更できます。

Configuration / コンフィグレーション項目説明
raftstore.raft-entry-max-size単一のログの最大サイズ
raftstore.raft-log-gc-tick-intervalRaftログを削除するポーリングタスクがスケジュールされる時間間隔
raftstore.raft-log-gc-threshold残りのRaftログの最大許容数のソフト制限
raftstore.raft-log-gc-count-limit残りのRaftログの許容数の厳しい制限
raftstore.raft-log-gc-size-limit残りの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.hibernate-timeout開始時に休止状態に入るまでの最短待機時間。この期間内、TiKVは休止状態になりません(解放されません)。
raftstore.apply-pool-size適用スレッドプールサイズの数
raftstore.store-pool-sizeストアスレッドプールサイズの数
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パイプライン化された悲観的ロックプロセスを有効にするかどうか
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-size合計WALの最大サイズ
{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ファイルを処理するモード
storage.block-cache.capacity共有ブロックキャッシュのサイズ(v4.0.3以降でサポート)
backup.num-threadsバックアップスレッドの数(v4.0.3以降でサポート)
split.qps-thresholdリージョンでload-base-splitを実行するためのしきい値。リージョンの読み取り要求のQPSが連続してqps-thresholdを超える場合、このリージョンを分割する必要があります。
split.byte-thresholdリージョンでload-base-splitを実行するためのしきい値。リージョンの読み取り要求のトラフィックが連続してbyte-thresholdを超える場合、このリージョンを分割する必要があります。
split.split-balance-score2つの分割されたリージョンの負荷が可能な限りバランスが取れていることを保証するload-base-splitのパラメーター。値が小さいほど、負荷のバランスが取れています。ただし、設定が小さすぎると、分割が失敗する可能性があります。
split.split-contained-scoreload-base-splitのパラメータ。値が小さいほど、リージョン分割後のリージョン間の訪問は少なくなります。
cdc.min-ts-interval解決済みTSが転送される時間間隔
cdc.old-value-cache-memory-quotaTiCDCOldValueエントリが占有するメモリの上限
cdc.sink-memory-quotaTiCDCデータ変更イベントが占めるメモリの上限
cdc.incremental-scan-speed-limit履歴データのインクリメンタルスキャンの速度の上限
cdc.incremental-scan-concurrency履歴データの同時増分スキャンタスクの最大数

上記の表で、プレフィックスが{db-name}または{db-name}.{cf-name}のパラメーターは、RocksDBに関連する構成です。 db-nameのオプション値はrocksdbraftdbです。

  • db-namerocksdbの場合、 cf-nameのオプション値はdefaultcfwritecf lockcf raftcf
  • db-nameraftdbの場合、 cf-nameの値はdefaultcfになります。

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

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構成アイテムはオンラインで変更できます。

Configuration / コンフィグレーション項目説明
log.levelログレベル
cluster-versionクラスタバージョン
schedule.max-merge-region-sizeRegion Mergeのサイズ制限を制御します(MiB単位)
schedule.max-merge-region-keysRegion Mergeキーの最大数を指定します
schedule.patrol-region-intervalreplicaCheckerがリージョンのヘルス状態をチェックする頻度を決定します
schedule.split-merge-interval同じリージョンで分割およびマージ操作を実行する時間間隔を決定します
schedule.max-snapshot-count1つのストアが同時に送信または受信できるスナップショットの最大数を決定します
schedule.max-pending-peer-count1つのストアで保留中のピアの最大数を決定します
schedule.max-store-down-time切断されたストアを回復できないとPDが判断するまでのダウンタイム
schedule.leader-schedule-policyリーダースケジューリングのポリシーを決定します
schedule.leader-schedule-limit同時に実行されたリーダースケジューリングタスクの数
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独立したリージョンストレージを有効にします
pd-server.max-gap-reset-tsタイムスタンプ(BR)をリセットする最大間隔を設定します
pd-server.key-typeクラスタキータイプを設定します
pd-server.metric-storageクラスタメトリックのストレージアドレスを設定します
pd-server.dashboard-addressダッシュボードアドレスを設定します
replication-mode.replication-modeバックアップモードを設定します

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

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構成アイテムはオンラインで変更できます。

|Configuration / コンフィグレーション項目| SQL変数|説明| | :--- | :--- | | mem-quota-query | tidb_mem_quota_query |クエリのメモリ使用制限| | log.enable-slow-log | tidb_enable_slow_log |スローログを有効にするかどうか| | log.slow-threshold | tidb_slow_log_threshold |遅いログのしきい値| | log.expensive-threshold | tidb_expensive_query_time_threshold |高価なクエリのしきい値|

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