PolarDB for MySQLは、プリエンプティブDDL機能をサポートしています。 プリエンプティブDDLは、読み取り専用ノードでの大規模なクエリまたは長時間実行されるトランザクションによって引き起こされるDDL操作の失敗を解決するのに役立ちます。
症状
PolarDB for MySQLクラスターでDDL操作を実行すると、メタデータロック (MDL) 同期エラーが発生します。 エラーメッセージ:
ERROR HY000: Fail to get MDL on replica during DDL synchronize
ERROR HY000: Fail to get table lock on replica; you can 'set polar_support_mdl_sync_preemption = ON' and try restarting transaction
前提条件
PolarDB for MySQLクラスターは、次のいずれかのデータベースエンジンバージョンを実行します。
リビジョンバージョンが5.6.1.0.43以降のPolarDB for MySQL 5.6。
リビジョンバージョンが5.7.1.0.34以降のPolarDB for MySQL 5.7。
リビジョンバージョンが8.0.1.1.39以降のPolarDB for MySQL 8.0.1。
改訂バージョンが8.0.2.2.14以降のPolarDB for MySQL 8.0.2クラスター
クラスターのデータベースエンジンバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。
制限事項
プリエンプティブDDL機能は、読み取り専用ノードでのみサポートされます。
使用上の注意
プリエンプティブDDL機能を有効にすると、読み取り専用ノードの現在のテーブルへの接続が中断されたり、現在のテーブルで実行されていないSQL文がロールバックされたりする可能性があります。 慎重に進んでください。
プリエンプティブDDL機能は、loose_replica_lock_wait_timeoutパラメーターの値が、loose_polar_mdl_sync_preempt_after_wait_secondパラメーターの値の合計に5を加えた値より大きい場合にのみ有効になります。
MySQL for PolarDB 8.0.1またはMySQL for PolarDB 8.0.2でテーブルの名前を変更したときにプリエンプティブDDLが有効になるようにするには、renameステートメントの代わりに
ALTER table RENAME
ステートメントを使用します。
背景情報
PolarDB for MySQLは共有ストレージアーキテクチャを使用します。 DDL操作を実行すると、システムはプライマリノードでMDL-Xロックを取得し、読み取り専用ノードにMDL-Xロックの取得を通知します。 読み取り専用ノードのテーブルにアクセスしている場合、MDL-Xロック同期スレッドはブロックされます。 読み取り専用ノードが指定されたタイムアウト期間内にMDL-Xロックを取得できない場合、クライアントは次のエラーコードとエラーメッセージを返します。error 8007 (HY000): DDL synchronize
中にレプリカでMDLを取得できません。 この問題は、複数の読み取り専用ノードを含むPolarDB for MySQLクラスターで頻繁に発生します。 プリエンプティブDDL機能を使用して問題を解決できます。
使用法
loose_polar_support_mdl_sync_プリエンプションパラメーターをONに設定してプリエンプティブDDL機能を有効にし、loose_polar_mdl_sync_preempt_after_wait_secondパラメーターを設定してMDL同期を完了する必要があるタイムアウト期間を指定します。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。 次の表にパラメーターを示します。
パラメーター | レベル | 説明 |
loose_polar_support_mdl_sync_プリエンプション | セッション | プリエンプティブDDL機能を有効にするかどうかを指定します。 有効な値:
|
loose_polar_mdl_sync_preempt_after_wait_秒 | グローバル | MDL同期を完了する必要があるタイムアウト期間。 指定されたタイムアウト期間が終了したときにMDLロックが同期されない場合、プリエンプションスレッドが開始されます。 有効な値: 1 ~ 31536000 単位は秒です。 デフォルト値: 10。 |
例
プリエンプティブDDL disabled
プリエンプティブDDL enabled
お問い合わせ
DDL操作についてご質問がある場合は、お気軽にお問い合わせください。