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

PolarDB:オンライン DDL

最終更新日:Nov 13, 2024

オンラインデータ定義言語 (DDL) は、DDL操作および他のトランザクションの同時実行を可能にする。 オンラインDDLは、データベーステーブルのロック期間を最小限に抑え、データベースの全体的な同時実行性とパフォーマンスを向上させます。

前提条件

概要

PolarDB-XインスタンスのDDL操作は、次の2つのカテゴリに分類できます。

  • 物理的に実行: DDL操作は実行のためにデータノードにプッシュダウンされます。 これらのDDL動作は、CREATE LOCAL INDEXALTER/ADD COLUMN、およびCREATE/DROP TABLEを含む。 計算ノードは、物理ステートメントのシャードレベルの転送、調整、およびメタデータ管理のみを実行します。 これらのDDL操作の実装原則とオンライン機能は、MySQL DDL操作のものと同様です。

  • 論理的に実行: 計算ノードは完全なDDL操作を実行します。 これらのDDL操作には、GLOBAL INDEXCREATE/DROP PARTITIONCREATE/DROP PRIMARY KEY、およびChange the column type without locking tablesが含まれます。 このタイプのDDL操作が実行されると、システムは一時テーブルを作成します。 システムは、元のテーブルの既存のデータを一時テーブルにコピーし、同時に増分データ更新をキャプチャして一時テーブルに同期します。 一時テーブルに履歴データと増分データの両方が十分に追加された後、システムはデータフローを元のテーブルから一時テーブルにシームレスに切り替えます。 計算ノードは、データバックフィル、増分マルチライト、およびメタデータ管理プロセスを処理します。 このタイプのDDL操作はテーブルをロックしません。

次のコンテンツは、他のSQL操作への影響に基づいて、3つの次元からオンラインDDL機能を分析します。

  • テーブルがロックされているかどうか?

    • オンラインDDL操作ブロックデータ操作言語 (DML) 操作は、テーブル切り替え中の数秒間のみで、ほとんどの実行期間中にDML操作を実行できます。

    • オンライン以外のDDL操作では、テーブルに対してDML操作を実行できない実行プロセス全体でテーブルがロックされます。

  • データはバックフィルされますか?

    • INSTANT ADD COLUMNRENAME TABLEなど、メタデータの変更のみを含むDDL操作は、データをバックフィルすることなく即座に完了できます。

    • DROP TABLEDROP INDEXなどのDDL操作は、メタデータを変更し、関連する物理ファイルを削除するだけです。 これらの操作は、データをバックフィルする必要なしに短時間で完了する。

    • INSTANT操作、テーブル削除操作、およびインデックス削除操作以外のDDL操作では、物理的または論理的な実行中に、元のデータを新しいクラスタ化インデックスまたはセカンダリインデックスにコピーして書き込みます。 実行により、特定の量のクラスターリソースが占有されます。 実行期間は、データ量、同時実行レベル、およびインスタンスの仕様によって異なります。

  • オンライン更新の同期されたマルチライティングは必要ですか?

    • 論理的に実行されたDDL操作は、データを一時テーブルに埋め戻し、同時にオンラインDMLトラフィックを一時テーブルに同期して複数書き込みます。 オンラインDMLトラフィックは、バックフィルされたデータと競合し得る。 さらに、分散トランザクション手法を使用してマルチ書き込みを処理し、アトミック性を確保し、DML操作を論理操作として実行させます。 これにより、オンライン操作のパフォーマンスが低下します。 この問題に対処するために、PolarDB-Xは、MOVE/SPLIT PARTITIONChange the column type without locking tablesREBALANCEなどの論理的に実行されるDDL操作に対して非同期マルチ書き込みを実装します。 マルチライトDMLトラフィックは最初にキャッシュされ、データバックフィルが完了した後に非同期に実行されます。これにより、マルチライトの競合とパフォーマンス低下の期間が最小限に抑えられます。 これらのDDL操作が非同期マルチ書き込みをサポートするかどうかについては、このトピックのオンラインDDL機能のセクションで説明します。

    • 既定では、物理的にデータノードで実行され、データをバックフィルし、テーブルをロックしないネイティブオンラインDDL操作は、オンラインログを使用してネイティブ非同期マルチ書き込みを実装します。 これらのDDL操作が非同期マルチ書き込みをサポートするかどうかについては、このトピックのオンラインDDL機能セクションで説明しません。

    • 他のタイプのDDL動作は、複数の書き込みを必要としない。 これらのDDL操作が非同期マルチ書き込みをサポートするかどうかについては、このトピックのオンラインDDL機能セクションで説明しません。

オンラインDDL操作

重要

特にMODIFY columnおよびCHANGE COLUMNステートメントを使用してDDLステートメントを使用してテーブルおよび列操作を実行する場合、属性の欠落による予期しない列の変更を回避するために、完全な列属性を指定する必要があります。

インデックス操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

ローカルセカンダリインデックス (LSI) の作成

選択可能

選択可能

継続しない

継続する

-

LSIの削除

選択可能

選択可能

選択可能

選択可能

-

LSIの名前変更

選択可能

選択可能

選択可能

選択可能

-

グローバルセカンダリインデックス (GSI) の作成

必須

継続しない

継続する

必須

選択可能

GSIの削除

必須

選択可能

選択可能

選択可能

-

GSIの名前変更

必須

選択可能

選択可能

選択可能

-

テーブル操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

行形式の変更 (ROW_FORMAT)

選択可能

継続しない

継続する

必須

-

最適化テーブル

選択可能

継続しない

継続する

必須

-

テーブル名の変更

選択可能

選択可能

選択可能

選択可能

-

デフォルトの文字セットを変更する

選択可能

継続しない

継続する

必須

-

文字セットの変換

継続しない

継続する

必須

必須

-

GSIを持たないテーブルの切り捨て (GSIなしのTruncate table)

選択可能

継続しない

継続する

選択可能

-

GSIを持つテーブルの切り捨て (Truncate table WITH GSI)

必須

継続しない

継続する

選択可能

-

パーティション操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

パーティションの移行

必須

選択可能

はい (関連するパーティションのみが再作成されます) 。

必須

必須

説明
  • 論理テーブルとGSIには明示的または暗黙的なプライマリキーがあるため、この機能をサポートしています。

  • デフォルトでは、グローバルに一意なセカンダリインデックスにはプライマリキーがなく、この機能はサポートされていません。

パーティションを分割する

必須

選択可能

はい (関連するパーティションのみが再作成されます) 。

必須

パーティションの結合Merge partitions

必須

選択可能

はい (関連するパーティションのみが再作成されます) 。

必須

選択可能

パーティションを追加する

説明
  • RANGEまたはRANGE COLUMNSパーティション分割方法を使用してパーティション分割されたテーブルにMAXVALUEパーティションが定義されていない場合、テーブルにパーティションを追加するときにデータをバックフィルする必要はありません。 それ以外の場合は、特定のパーティションデータをバックフィルする必要があります。

  • LISTまたはLIST COLUMNSパーティション分割方法を使用してパーティション分割されたテーブルにDEFAULTパーティションが定義されていない場合、テーブルにパーティションを追加するときにデータをバックフィルする必要はありません。 それ以外の場合は、特定のパーティションデータをバックフィルする必要があります。

必須

選択可能

選択可能

選択可能

-

パーティションの削除

説明
  • RANGEまたはRANGE COLUMNSのパーティション分割方法を使用してパーティション分割されたテーブルの最後のパーティションを削除する場合、データバックフィルは必要ありません。 他のパーティションを削除する場合は、データバックフィルが必要です。

  • LISTまたはLIST COLUMNSパーティション分割方法を使用してパーティション分割されたテーブルにDEFAULTパーティションが定義されていない場合、テーブルからパーティションを削除するときにデータをバックフィルする必要はありません。 それ以外の場合は、データをバックフィルする必要があります。

必須

選択可能

選択可能

選択可能

-

パーティションの再編成

必須

選択可能

はい (関連するパーティションのみが再作成されます) 。

必須

選択可能

パーティションをクリアする

必須

選択可能

選択可能

選択可能

-

パーティションの名前変更

必須

選択可能

選択可能

選択可能

-

パーティションの変更

必須

選択可能

はい (関連するパーティションのみが再作成されます) 。

必須

選択可能

説明

上記の表で説明したパーティション操作のオンラインDDL機能は、テーブルグループとテーブルの両方に適用されます。

シーケンス変更操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

シーケンスを作成するCreate a sequence

必須

選択可能

選択可能

選択可能

-

シーケンスの削除

必須

選択可能

選択可能

選択可能

-

シーケンスの属性の変更

必須

選択可能

選択可能

選択可能

-

シーケンスタイプの変換

必須

選択可能

選択可能

選択可能

-

一般的な列操作

重要

列操作は、一般的な列操作 (主キー、パーティションキー、または生成された列に関連しない列操作) 、主キーおよびパーティションキーの変更操作、および生成された列操作に分類されます。 SHOW FULL CREATE TABLE TABLE_NAMEステートメントを実行して、完全な列属性を表示し、列操作が属するカテゴリを決定できます。

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

列を追加します。 詳細については、「注1」をご参照ください。

選択可能

継続しない

継続する

必須

-

列の削除

選択可能

継続しない

継続する

必須

-

列の名前変更

選択可能

選択可能

選択可能

選択可能

-

列の順序を変更する

選択可能

継続しない

継続する

必須

-

列のデフォルト値を変更する

選択可能

選択可能

選択可能

選択可能

-

列のデフォルト値を削除する

選択可能

選択可能

選択可能

選択可能

-

列のデータ型を変更する

継続しない

継続する

必須

必須

-

varchar列の長さを拡張します。 詳細については、「注2」および「注3」をご参照ください。

選択可能

選択可能

選択可能

選択可能

-

char列の長さを拡張します。 詳細については、「注3」をご参照ください。

継続しない

継続する

必須

必須

-

列の値をNULLに変更する

選択可能

継続しない

継続する

必須

-

列の値をNOT NULLに変更する

説明

SQL_MODEオプションにstrict_trans_tablesまたはstrict_all_tablesフラグが含まれている場合、操作はオンライン操作です。 そうでなければ、COPYアルゴリズムを使用してテーブルをロックし、データをコピーする。

選択可能

継続しない

継続する

必須

-

説明

  1. PolarDB-Xでは、データベースのメタデータのみを変更することで、インスタントアルゴリズムを使用して列を追加できます。 特定の列に対する変更操作は、オンラインで論理的に実行できます。 次の表は、ALGORITHM=INSTANTまたはALGORITHM=OMCが明示的に指定されている場合の操作のオンライン実行機能を示しています。

    API 操作

    論理的に実行される

    ロックテーブル

    テーブルの再構築

    データの埋め戻し

    非同期マルチ書き込みをサポート

    インスタントADD COLUMN

    選択可能

    選択可能

    選択可能

    選択可能

    -

    列タイプをオンラインで変更する

    必須

    継続しない

    継続する

    必須

    必須

  2. デフォルトでは、PolarDB-X 5.7データノードを使用して、INPLACEアルゴリズムを使用してVARCHAR列の長さを拡張できます。 ただし、この機能は8.0のデータノードではサポートされません。 VARCHAR列の長さが255バイト以下の場合、格納に必要なのは1バイトだけです。 長さが256バイト以上の場合、格納のために2バイトを必要とする。 VARCHAR列の長さを255バイト以下から256バイト以上に拡張する場合、メタデータの変更だけでは変更できません。 逆に、VARCHAR列の長さを256バイト以上から255バイト以下に減らしたい場合は、メタデータの変更のみで変更できます。

    API 操作

    論理的に実行される

    ロックテーブル

    テーブルの再構築

    データの埋め戻し

    非同期マルチ書き込みをサポート

    VARCHAR列の長さを256バイト以上に拡張します。

    選択可能

    継続しない

    継続する

    必須

    -

  3. デフォルトでは、PolarDB-X 5.7データノードを使用して、INPLACEアルゴリズムを使用してCHAR列の長さを拡張できます。 ただし、この機能は8.0のデータノードではサポートされません。 次の表に、操作のオンライン実行機能を示します。

    API 操作

    論理的に実行される

    ロックテーブル

    テーブルの再構築

    データの埋め戻し

    非同期マルチ書き込みをサポート

    CHAR列の長さを拡張する

    選択可能

    継続しない

    継続する

    必須

    -

主キーとシャーディング列の操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

主キーの追加

必須

継続しない

継続する

必須

選択可能

元の主キーを削除し、新しい主キーを追加する

必須

継続しない

継続する

必須

選択可能

シャーディング方法、シャード数、またはシャーディング列の変更

必須

選択可能

はい (シャーディングの変更に関連するGSIまたはプライマリテーブルが再作成されます) 。

必須

選択可能

GSIまたはプライマリテーブルのシャーディング列の定義を変更する

必須

選択可能

はい (シャーディング列を使用するGSIまたはプライマリテーブルが再作成されます) 。

必須

選択可能

生成された列操作

API 操作

論理的に実行される

ロックテーブル

テーブルの再構築

データの埋め戻し

非同期マルチ書き込みをサポート

仮想列の追加 (virtual列)

選択可能

選択可能

選択可能

選択可能

-

仮想列の削除 (virtual列)

選択可能

選択可能

選択可能

選択可能

-

ストレージ列の追加 (STORED列)

継続しない

継続する

必須

必須

-

ストレージ列の削除 (STORED列)

選択可能

継続しない

継続する

必須

-

論理列の追加 (logical列)

必須

継続しない

継続する

必須

選択可能

論理列の削除 (logical列)

必須

継続しない

継続する

必須

-

オンライン実行機能の管理

PolarDB-Xでは、次の方法を使用してオンライン実行機能を管理できます。

  • 列を追加する場合は、ALGORITHM=Instantを指定してインスタントadd column機能を使用できます。

  • オンラインで列を変更する場合は、ALGORITHM=OMCを指定して論理実行方法を使用できます。

  • デフォルトでは、論理的に実行されるDDLステートメントはオンラインで実行されます。 特別な仕様は必要ありません。

  • 物理的に実行される一般的な列操作とローカルインデックスDDL操作のオンライン実行の場合、操作に対してALGORITHM=INPLACEを指定できます。 操作がオンライン実行をサポートしていない場合、エラーが発生します。 それ以外の場合、操作は直接実行されます。