Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
約9年前投稿 修正あり

Percona XtraDB Cluster 5.6のオンラインDDL(The Percona Performance Blogより)

Percona LiveでのGalera Clusterに関する講演の補足。PXC 5.6でオンラインスキーマ変更する際にMySQL 5.6のオンラインDDLの機能の恩恵にはTOI(Total Order Isolation)で動作する場合は全く与れず、pt-online-schema-changeを利用するのがベストである。

原文
Online DDL and Percona XtraDB Cluster 5.6 (English)
翻訳依頼者
B5aa4f809000b9147289650532e83932
翻訳者
B5aa4f809000b9147289650532e83932 taka-h
翻訳レビュアー
0deae06ab5d86b39feeec2e23a30b88a yoku0825
原著者への翻訳報告
未報告


出典について

この記事はThe Percona Performance Blog内のStephane Combaudon氏によるOnline DDL and Percona XtraDB Cluster 5.6(2015/10/9)を翻訳したものです。


2、3週間前アムステルダムで開催されたPercona Liveで講演を行い(Galera Clusterの簡単なコツ)、その中でスキーマの変更が話題となりました。TOI(Total Order Isolation)RSU(Rolling Schema Upgrades)pt-online-schema-changeの短所と長所について議論しました。忘れてしまったものの1つとして、MySQL 5.6から利用可能となったオンラインDDLがありました。オンラインでスキーマ変更をする他の方法はあるでしょうか?

読むのが億劫な人へのまとめ

MySQL 5.6のオンラインDDL機能はPXCで修正されていませんが(訳注: PXCでInnoDBネイティブのオンラインALTER TABLEには手が加えられておらず利用可能なままですが)、GaleraはALTER TABLE文が動作している最中に書込みの同時実行を許さないため、期待した動作はしません。従ってALTER TABLEは、TOIを利用している場合、PXC 5.5でそうであったのと全く同様に、全ノード上の全ての書込みをブロックします。

ALTER TABLEをオンラインで実施したかったら、pt-online-schema-changeがベストでしょう。

TOIでのオンラインDDL

簡単なテストをしました。3ノードのクラスタを準備し、ノード1にテーブルにレコードを挿入する為にsysbenchを動作させ、同時にノード2でALTER TABLE(インデックス追加)を走らせます。実行中のCom_insertステータス変数の値は次の通りです。

# ノード1
| Com_insert                                | 563                         |
| Com_insert                                | 75                          |
| Com_insert                                | 1532                        |
| Com_insert                                | 10                          |
| Com_insert                                | 4                           |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 11                          |
| Com_insert                                | 135                         |
# ノード2
| Com_insert                                | 12                          |
| Com_insert                                | 575                         |
| Com_insert                                | 307                         |
| Com_insert                                | 1231                        |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 1                           |
| Com_insert                                | 133                         |
# ノード3
| Com_insert                                | 559                         |
| Com_insert                                | 339                         |
| Com_insert                                | 736                         |
| Com_insert                                | 465                         |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 0                           |
| Com_insert                                | 5                           |
| Com_insert                                | 121                         |

ALTER TABLEが動作している際に、全ての書込みが停止していることが明らかに見てとれるでしょう。いったい何が起きたのでしょうか?オンラインDDLのドキュメントをみると、同時に書込むことが可能であるようにもみえます。

理由としては、TOIではGaleraは変更中のテーブルに対してトランザクションを同時に適用することを許していないだけです。

テーブルt1のスキーマ変更の最中にテーブルt2に書込みを行ったら違う結果となるでしょうか?いいえ、なりません。再度の確認となりますが、GaleraはALTER TABLE文の実行中は全ての書込みをブロックします。

注意として加えておきたいのが、テストの最中に同時書込みがnode1では動作しているものの、他のノードでは動作しないケースが何回かありました。しかし、数秒後にはフロー制御が効き、クラスタへの全ての書込みがブロックされました。この動作を思った通りに再現させられていないので、現時点ではこのとき何が起こっていたかは分かりません。

RSUでのオンラインDDL

RSUでのオンラインDDLはそれほどクリティカルではありません。ALTER TABLE文は最悪でもスキーマ変更が実行されているノードの書込みをブロックするだけでだからです。そしてこのノードはフロー制御のトリガーを引きません。

潜在的な同時書込みを許す唯一の効用は、レプリケーションが速く追い付くことです。これは負荷の高いクラスタでは重要となりえて、例えば全ノードでワークロードを処理する必要がある場合がこれに該当します。

しかし再度となりますが、ALTER TABLEは書込みの同時実行をブロックするので、オンラインDDL機能の恩恵を受けることができません。

まとめ

PXC 5.6はオンラインDDL機能の恩恵に与ることはできません。大きなテーブルのスキーマ変更が必要になり、RSUで動作していない場合は、pt-online-schema-changeが最善となるでしょう。

次の記事
MySQL 5.8で期待している機能
前の記事
InfluxDBの新しいストレージエンジン : 時間構造のマージツリー (InfluxDB Blogより)

Feed small 記事フィード

新着記事Twitterアカウント