📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

スキーマキャッシュ



マルチテナント環境では、データベースやテーブルが数十万、あるいは数百万にも及ぶ場合があります。これらのデータベースやテーブルすべてのスキーマ情報をメモリにロードすると、大量のメモリを消費するだけでなく、アクセス性能も低下します。この問題を解決するため、TiDBはLRU(Least Recently Used:最小使用頻度)に似たスキーマキャッシュメカニズムを導入しています。最も最近アクセスされたデータベースやテーブルのスキーマ情報のみがメモリにキャッシュされます。

注記:

現在、この機能はTiDB Cloud StarterおよびTiDB Cloud Essentialインスタンスではご利用いただけません。

スキーマキャッシュの設定

システム変数tidb_schema_cache_sizeを設定することで、スキーマキャッシュ機能を有効にできます。

ベストプラクティス

  • データベースとテーブルの数が非常に多い場合(例えば、10万を超えるデータベースとテーブルがある場合)、またはデータベースとテーブルの数がシステムのパフォーマンスに影響を与えるほど多い場合は、スキーマキャッシュ機能を有効にすることをお勧めします。
  • TiDBダッシュボードの「スキーマロード」セクションにあるサブパネル「Infoschema v2 Cache Operation」を確認することで、スキーマキャッシュのヒット率を監視できます。ヒット率が低い場合は、 tidb_schema_cache_sizeの値を増やすことができます。
  • TiDBダッシュボードの「スキーマロード」セクションにあるサブパネル「Infoschema v2 Cache Size」を確認することで、現在使用されているスキーマキャッシュのサイズを監視できます。
  • TiDBの起動時間を短縮するために、 performance.force-init-statsを無効にすることをお勧めします。
  • 多数のテーブル(例えば、10万個以上のテーブル)を作成する必要がある場合は、リージョンの数を減らし、TiKVのメモリ使用量を削減するために、 split-tableパラメータをfalseに設定することをお勧めします。

既知の制限事項

多数のデータベースとテーブルが存在するシナリオでは、以下の既知の問題が存在します。

  • 単一クラスター内のテーブル数は300万を超えることはできません。

  • 単一クラスタ内のテーブル数が 300,000 を超える場合は、 tidb_schema_cache_sizeの値を0に設定しないでください。TiDB のメモリ不足 (OOM) を引き起こす可能性があります。

  • 外部キーを使用すると、クラスタ環境におけるDDL操作の実行時間が長くなる可能性があります。

  • テーブルへのアクセスが不規則な場合(例えば、あるテーブル群が時刻1にアクセスされ、別のテーブル群が時刻2にアクセスされる場合など)、 tidb_schema_cache_sizeの値が小さいと、スキーマ情報が頻繁に削除およびキャッシュされ、パフォーマンスの変動につながる可能性があります。この機能は、頻繁にアクセスされるデータベースやテーブルが比較的固定されているシナリオに適しています。

  • 統計情報は適時に収集されない可能性がある。

  • 一部のメタデータ情報へのアクセス速度が低下する可能性があります。

  • スキーマキャッシュのオン/オフを切り替えるには、待機時間が必要です。

  • すべてのメタデータ情報を列挙する操作は、以下のような場合に遅くなる可能性があります。

    • SHOW FULL TABLES
    • FLASHBACK
    • ALTER TABLE ... SET TIFLASH MODE ...
  • AUTO_INCREMENTまたはAUTO_RANDOM属性を持つテーブルを使用する場合、スキーマ キャッシュ サイズが小さいと、これらのテーブルのメタデータが頻繁にキャッシュに出入りする可能性があります。その結果、割り当てられた ID 範囲が完全に使用される前に無効になり、ID ジャンプが発生する可能性があります。書き込みが集中するシナリオでは、ID 範囲が枯渇することさえあります。異常な ID 割り当て動作を最小限に抑え、システムの安定性を向上させるために、次の対策を講じることをお勧めします。

    • 監視パネルでスキーマキャッシュのヒット率とサイズをビュー、キャッシュ設定が適切かどうかを評価してください。スキーマキャッシュのサイズを適切に増やすことで、キャッシュの強制削除頻度を減らすことができます。
    • IDジャンプを防ぐには、 AUTO_ID_CACHE 1に設定してください。
    • ID 範囲が小さすぎることを避けるため、 AUTO_RANDOMのシャードビットと予約ビットを適切に設定してください。

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