すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:より速いDDL

最終更新日:Jan 11, 2024

このトピックでは、最適化されたバッファプール管理メカニズムを提供する高速DDL機能について説明します。 このメカニズムにより、データ定義言語 (DDL) 操作の影響を軽減し、許可される同時DDL操作の数を増やすことができます。

前提条件

RDSインスタンスは、次のいずれかのMySQLバージョンを実行します。

背景情報

DDL操作はRDSインスタンスで一般的です。 RDSインスタンスを使用すると、DDL操作に関連する問題が発生する可能性があります。 たとえば、次の問題が発生する可能性があります。

  • インデックスを追加すると、パフォーマンスジッターが発生し、RDSインスタンスの読み取りおよび書き込み操作が中断されるのはなぜですか。
  • サイズが1 GB未満のテーブルでDDL操作を実行するのに10分以上かかるのはなぜですか?
  • 一時テーブルを生成する接続が閉じられると、なぜパフォーマンスジッタが発生するのでしょうか。

ApsaraDB for RDSのデータベースエンジンチームは、これらの問題を特定するために詳細な分析と集中的なテストを実施しました。 分析とテストの結果に基づいて、チームはDDL操作の管理に使用されるキャッシュメンテナンスロジックの欠陥を特定しました。 これらの問題を解決するために、チームはより高速なDDL機能を開発しました。 この機能によって提供される最適化されたバッファプール管理メカニズムにより、DDL操作によってトリガーされるロックの競合が軽減されます。 RDSインスタンスが通常の数のワークロードを処理する場合、DDL操作中にRDSインスタンスのパフォーマンスを確保できます。

より高速なDDLを有効にする

ApsaraDB for RDSコンソールでloose_innodb_rds_faster_DDLパラメーターをONに設定することで、より高速なddl機能を有効にできます。 詳細は、「インスタンスパラメーターの変更」をご参照ください。

DDL操作を使用したテスト

  • テストシナリオ

    インプレースアルゴリズムを使用して、MySQL 8.0でサポートされている次のステートメントを実行してオンラインDDL操作を実行します。CREATE INDEXおよびOPTIMIZE TABLE。 CREATE INDEXステートメントは、テーブルを再構築する必要なしに、テーブルにインデックスを作成します。 OPTIMIZE TABLEステートメントは、テーブルを再構築する必要があるテーブルにインデックスを作成します。

    操作インスタントインプレース再構築テーブル同時DML操作を許可メタデータのみ変更
    CREATE INDEX任意必須任意必須任意
    最適化テーブル任意必須必須必須任意
  • テストインスタンス

    テストに使用されるRDSインスタンスは、MySQL 8.0を実行します。 8 CPUコアと64 GBのメモリを提供します。 DDL操作を実行するテーブルのサイズは600 MBです。

  • テストの実行手順

    SysBenchを使用してストレステストを実行します。 このテストでは、オンラインDDL操作を実行し、操作結果を比較します。

  • テスト結果
    操作平均実行期間 (高速DDL無効)平均実行期間 (高速DDLを有効にした場合)パフォーマンス向上時間
    CREATE INDEX56秒4.9秒11.4
    最適化テーブル220秒17秒12.9
  • テスト概要

    より高速なDDL機能により、ApsaraDB RDS for MySQLとAliSQLを使用することで、DDL操作の実行期間をMySQL Community Editionと比較して90% 以上短縮できます。

一時テーブルでのテスト

一時テーブルはMySQLで一般的です。 たとえば、information_schemaデータベースからテーブルを照会したり、複雑なSQL文の実行を促進したりするために使用される一時テーブルを作成します。 スレッドが終了すると、関連するすべての一時テーブルが削除されます。 これは、RDSインスタンスのパフォーマンスジッタを引き起こす特定のタイプのDDL操作と呼ばれます。 詳細については、「大BPでの切断stuck InnoDBでのTemp ibtテーブルスペースの切り捨て」をご参照ください。

  • テストインスタンス

    テストに使用されるRDSインスタンスは、MySQL 8.0を実行します。 8 CPUコアと64 GBのメモリを提供します。

  • テストの実行手順

    tpcc-mysqlを使用してストレステストを実行します。 このテストでは、クエリを実行して、バッファプールがほぼフル容量に達していることを確認します。 次に、一時テーブルを生成するために、短命の接続を介してシングルスレッド要求を開始します。

  • テスト結果
    比較アイテムDDL操作は含まれませんより高速なDDL対応より高速なDDL無効化
    1秒あたりのトランザクション数 (TPS)42,00040,000<10,000

    ストレステストで得られた第2レベルのパフォーマンスデータを次の図に示します。 赤で強調表示された部分は、高速DDL機能が無効になっているときにRDSインスタンスでサポートされているTPSを示します。

    TPS
  • テスト概要

    一時テーブルを生成するスレッドが終了するたびに、ネイティブMySQLは深刻なパフォーマンスジッターを引き起こします。 ジッタはTPSを70% 以上減少させる。 より高速なDDL機能が有効になった後、TPSの減少は5% に減少します。

最適化効果

より高速なDDL機能は、MySQL 5.6、5.7、および8.0をサポートします。 ただし、サポートされるDDL操作は、選択したMySQLバージョンによって異なります。

カテゴリDDL操作MySQL 5.6MySQL 5.7MySQL 8.0
インプレースDDL詳細については、「MySQL 8.0オンラインDDL操作」および「MySQL 5.7オンラインDDL操作」をご参照ください。任意必須必須
テーブルスペース管理テーブルスペース暗号化を有効または無効にします。任意必須必須
テーブルスペースを解放または削除します。任意必須必須
テーブルスペースを破棄します。必須必須必須
テーブルの削除 テーブルを解放または削除します。必須必須必須
元に戻す操作元に戻すテーブルスペースを解放または削除します。任意任意必須
テーブル更新テーブルとその汚れたページを更新します。必須必須必須

より速いDDLによって修正された欠陥

より高速なDDL機能は、次の欠陥を修正します。