ステイル読み取りの使用シナリオ

このドキュメントでは、 ステイル読み取りの使用シナリオについて説明します。 ステイル読み取り は、TiDB に保存されているデータの履歴バージョンを読み取るために TiDB が適用するメカニズムです。このメカニズムを使用すると、特定の時点または指定された時間範囲内の対応する履歴データを読み取ることができるため、storageノード間のデータ レプリケーションによって生じるレイテンシーを節約できます。

ステイル読み取りを使用している場合、TiDB はデータ読み取り用のレプリカをランダムに選択します。つまり、すべてのレプリカをデータ読み取りに使用できます。アプリケーションが非リアルタイム データの読み取りを許容できない場合は、 ステイル読み取りを使用しないでください。そうしないと、レプリカから読み取られたデータが、TiDB に書き込まれた最新のデータではない可能性があります。

シナリオ例

  • シナリオ 1: トランザクションに読み取り操作のみが含まれ、データの古さをある程度許容できる場合は、 ステイル読み取り を使用して履歴データを取得できます。 TiDB はステイル読み取りを使用して、リアルタイムのパフォーマンスをいくらか犠牲にしてクエリ要求を任意のレプリカに送信するため、クエリ実行のスループットが向上します。特に小さなテーブルがクエリされるいくつかのシナリオでは、強力な一貫性のある読み取りが使用されると、リーダーが特定のstorageノードに集中し、クエリのプレッシャーがそのノードにも集中する可能性があります。したがって、そのノードがクエリ全体のボトルネックになる可能性があります。ただし、 ステイル読み取りと、クエリの全体的なスループットが向上し、クエリのパフォーマンスが大幅に向上します。

  • シナリオ 2: 地理的に分散した展開の一部のシナリオで、強力な一貫性のあるフォロワー読み取りが使用されている場合、フォロワーから読み取られたデータがLeaderに格納されているデータと一致していることを確認するために、TiDB は検証のために異なるデータセンターからReadindexを要求します。クエリ プロセス全体のアクセスレイテンシーが増加します。 ステイル読み取りを使用すると、TiDB は現在のデータ センターのレプリカにアクセスして、リアルタイム パフォーマンスをいくらか犠牲にして対応するデータを読み取ります。これにより、クロスセンター接続によってもたらされるネットワークレイテンシーが回避され、クエリ全体のアクセスレイテンシーが短縮されます。詳細については、 3 つのデータ センター展開でのローカル読み取りを参照してください。

トランザクションに読み取り操作のみが含まれ、データの古さをある程度許容できる場合は、 ステイル読み取り を使用して履歴データを取得できます。 TiDB はステイル読み取りを使用して、リアルタイムのパフォーマンスをいくらか犠牲にしてクエリ要求を任意のレプリカに送信するため、クエリ実行のスループットが向上します。特に小さなテーブルがクエリされるいくつかのシナリオでは、強力な一貫性のある読み取りが使用されると、リーダーが特定のstorageノードに集中し、クエリのプレッシャーがそのノードにも集中する可能性があります。したがって、そのノードがクエリ全体のボトルネックになる可能性があります。ただし、 ステイル読み取りと、クエリの全体的なスループットが向上し、クエリのパフォーマンスが大幅に向上します。

用途

TiDB は、次のように、ステートメント レベル、セッション レベル、およびグローバル レベルでステイル読み取りを実行するメソッドを提供します。

  • ステートメント レベル
    • 正確な時点の指定 (推奨): 分離レベルに違反することなく、特定の時点からグローバルに一貫性のあるデータを TiDB で読み取る必要がある場合は、クエリ ステートメントでその時点の対応するタイムスタンプを指定できます。詳細な使用方法については、 AS OF TIMESTAMPを参照してください。
    • 時間範囲の指定: 分離レベルに違反することなく、時間範囲内でできるだけ新しいデータを TiDB で読み取る必要がある場合は、クエリ ステートメントで時間範囲を指定できます。指定された時間範囲内で、TiDB は適切なタイムスタンプを選択して、対応するデータを読み取ります。 「適切」とは、このタイムスタンプより前に開始され、アクセスされたレプリカでコミットされていないトランザクションがないことを意味します。つまり、TiDB はアクセスされたレプリカで読み取り操作を実行でき、読み取り操作はブロックされません。詳しい使い方はAS OF TIMESTAMPTIDB_BOUNDED_STALENESS関数の紹介を参照してください。
  • セッションレベル
    • 時間範囲の指定: セッションで、分離レベルに違反することなく、後続のクエリで時間範囲内で TiDB が可能な限り新しいデータを読み取る必要がある場合は、 tidb_read_stalenessシステム変数を設定して時間範囲を指定できます。詳しい使い方はtidb_read_stalenessを参照してください。

さらに、TiDB は、セッションまたはグローバル レベルでtidb_external_tsシステム変数を設定することにより、正確な時点を指定する方法を提供します。詳しい使い方はtidb_external_tsを使用してステイル読み取りを実行するを参照してください。

ステイル読み取りのレイテンシーを減らす

ステイル読み取り機能は、TiDB クラスターの Resolved TS タイムスタンプを定期的に進めます。これにより、TiDB はトランザクションの一貫性を満たすデータを読み取ることができます。 ステイル読み取りで使用されるタイムスタンプ (たとえば、 AS OF TIMESTAMP '2016-10-08 16:45:26' ) が Resolved TS よりも大きい場合、 ステイル読み取りは TiDB をトリガーして Resolved TS を先に進め、データを読み取る前に先送りが完了するのを待ちます。これにより、レイテンシーが増加します。

ステイル読み取り レイテンシーを減らすには、次の TiKV 構成項目を変更して、TiDB が Resolved TS タイムスタンプをより頻繁に進めるようにします。

[resolved-ts] advance-ts-interval = "20s" # The default value is "20s". You can set it to a smaller value such as "1s" to advance the Resolved TS timestamp more frequently.

ノート:

上記の TiKV 構成項目を減らすと、TiKV の CPU 使用率とノード間のトラフィックが増加します。

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

Playground
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Dedicated
TiDB Serverless
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.