web-dev-qa-db-ja.com

pt-online-schema-changeがデータのコピー中に一貫性を確保する方法

読みました pt-online-schema-changeドキュメントを作成し、トリガーを作成してデータをチャンクにコピーし、チャンク時間秒(デフォルトでは0.5秒)で動作することを理解しました

以下のケースを考えてみましょう。

5 GBのテーブルTBL1があり、PT-ONLINE-SCHEMA-CHANGEで変更されています

PT-ONLINE-SCHEMA-CHANGEは、必要な変更を含む新しいテーブルを作成し、TBL1にトリガーを追加して、コピーを開始しました。

データの10チャンクをコピーし、サイズが「X」MBの11番目のチャンクのコピーを開始しました。ツールごとに、このチャンクは最大500ミリ秒または0.5秒でコピーされます

11番目のチャンクのコピー中に、アプリケーションは、このデータの11番目のチャンクの一部であるエフェクト行を変更する必要があるUPDATEを発行しました。

私の質問は、以下のどれがnow.original tableが今起こっているかということです。

A) Update will be blocked till the chunk be copied and then applied on original table 
   which gets updated through triggers on new one.

B) Update will be performed on original table and data chunk will be re copied all 
   over again.

オプションAが答えである場合、PT-ONLINE-SCHEMA-CHANGEをどのようにロックフリーにすることができますか?

オプションBが答えである場合、コピーされているチャンクが変更されたことをどのようにして知るのですか?

前もって感謝します。

3
Uday

正しく理解できれば

  • チャンクのトランザクションスナップショットが取得されます(〜0時間)
  • そのスナップショット(古いデータ)のコピーが行われます(500ミリ秒)
  • その間、トリガーはUPDATEにヒットし、古いテーブルと新しいテーブルの両方を更新します。 (ここがぼやけるところです。)

肝心なのは「信頼する」ことです。

0
Rick James