このページでは、PolarDB for MySQL のコールドデータアーカイブ機能に関するよくある質問を紹介します。
エラー
以下の表に、一般的なエラーとその解決方法を示します。
| エラーメッセージ | 原因 | ソリューション |
|---|---|---|
[Data Lifecycle Management] DLM storage engine is not support. The value of polar_dlm_storage_mode is OFF. | クラスターでコールドデータアーカイブが有効になっていません。 | PolarDB コンソールでコールドデータアーカイブを有効にしてください。詳細については、「コールドデータアーカイブの有効化」をご参照ください。 |
[Data Lifecycle Management] errmsg: Not allowd archive the archived table. | 対象テーブルはすでにアーカイブされています。アーカイブ済みのテーブルを再度アーカイブすることはサポートされていません。 | アーカイブステートメントを実行する前に、テーブルがすでにアーカイブされているかどうかを確認してください。 |
OSS error: error message: The OSS Access Key Id you provided does not exist in our records | 一時的なアクセス認証情報の有効期限が切れ、AccessKey ペアが無効になっています。 | アプリケーションサーバーから STS を使用して、AccessKey ペアを使って新しい一時的なアクセス認証情報を取得してください。詳細については、「STS が提供する一時認証情報を使って OSS にアクセスする」をご参照ください。その他の OSS error: メッセージについては、「OSS エラーコード」をご参照ください。 |
ERROR 8185 (HY000): Change partition not support archive to engine CSV | パーティションテーブル向けのコールドデータアーカイブ機能はカナリアリリース中であり、ご利用のアカウントでは有効になっていません。 | クォータセンターにアクセスし、クォータ ID polardb_mysql_hybrid_partition を入力してクォータ名を検索し、操作列の [申請] をクリックします。 |
Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables. | CSV または ORC 形式でアーカイブされたテーブルはトランザクションをサポートしません。ストアドプロシージャにアーカイブ済みテーブルが含まれている場合、実際の書き込み操作が行われていなくても、グローバルトランザクション ID (GTID) の不整合が発生する可能性があります。 | ストレージエンジンを X-Engine に変更してください。これによりストレージコストを削減でき、すべてのテーブルをトランザクションテーブルとして維持できます。 |
The last packet successfully received from the server was 15,287 milliseconds ago. The last packet sent successfully to the server was 15,287 milliseconds ago. | リストア処理がクライアントのタイムアウトしきい値を超えました。 | クラスターの PolarDB 容量単位 (PCU) の最小仕様を引き上げてから、リストアタスクを再実行してください。 |
データがアーカイブされているかどうかの確認
以下のいずれかの方法で、テーブルまたはパーティションがアーカイブされているかどうかを確認できます。
方法 1:SQL ステートメントの実行
SHOW CREATE TABLE table_name; を実行します。
通常のテーブルの場合:
STORAGE OSSまたはCONNECTION='default_oss_server'が表示されている場合は、データがアーカイブされています。パーティションテーブルの場合:パーティションに
ENGINE=CSVまたはENGINE=ORCが表示されている場合は、データがアーカイブされています。
方法 2:コンソールでの確認
PolarDB コンソールにログインします。クラスターを見つけ、その ID をクリックします。左側のナビゲーションウィンドウで、[設定と管理] > [コールドデータアーカイブ] を選択します。テーブル名がリストに表示されている場合は、データが OSS にアーカイブされています。
機能を有効にした後も [コールドデータアーカイブ] メニューが表示されない場合は、数分待ってページをリフレッシュしてください。
アーカイブ済みデータの操作
アーカイブ済みコールドデータのクエリ
通常のテーブル:ホットデータと同様にクエリできます。アクセス方法を変更する必要はありません。
パーティションテーブル:「ハイブリッドパーティションテーブル内のデータのクエリ」をご参照ください。
アーカイブ済みコールドデータの変更
CSV または ORC 形式で OSS にアーカイブされたコールドデータは直接変更できません。変更するには、以下の手順を実行します。
ALTER TABLE table_name ENGINE=InnoDB;を実行して、OSS からテーブルデータを PolarStore にインポートします。PolarStore 内でデータを変更します。
ALTER TABLE t ENGINE = CSV STORAGE OSS;を実行して、変更後のデータを OSS に再アーカイブします。
詳細については、「OSS テーブルから PolarStore へのデータインポート」をご参照ください。
アーカイブ済みコールドデータの削除
特権アカウントを使用してアーカイブ済みコールドデータを削除してください。
アーカイブ済みコールドデータを削除するには、以下の手順を実行します。
DROP TABLEを実行して、PolarDB からアーカイブ済みテーブルを削除します。CALL dbms_oss.delete_table_file('database_name', 'table_name');を実行して、OSS からアーカイブ済みコールドデータを削除します。
アーカイブ済みコールドデータのダウンロード
アーカイブ済みコールドデータの直接ダウンロードはサポートされていません。ダウンロードアクセスをリクエストするには、クォータセンターにアクセスし、クォータ ID polardb_mysql_download_oss を入力してクォータ名を検索し、操作列の [申請] をクリックします。
アーカイブ済みコールドデータのサイズの確認
PolarDB コンソールまたはクラスター上でコールドデータテーブルを直接クエリすることでサイズを確認できます。詳細については、「OSS にアーカイブされたコールドデータの情報の確認」をご参照ください。
サイズとフォーマット
アーカイブによるテーブルサイズへの影響
アーカイブ後のサイズは、元のストレージエンジンおよびアーカイブフォーマットによって異なります。
| シナリオ | サイズへの影響 |
|---|---|
| インデックスのない InnoDB テーブル | 小さくなる — アーカイブ時にデータが圧縮されます。 |
| インデックス付きの InnoDB テーブル | 大幅に小さくなる — アーカイブ時にインデックスが削除されます。 |
| X-Engine テーブル | 大きくなる可能性あり — OSS の圧縮率が X-Engine の内蔵圧縮に及ばない場合があります。 |
| CSV フォーマットと ORC フォーマットの比較 | CSV でアーカイブされたデータは、ORC でアーカイブされたデータよりも大きくなる可能性があります。ORC はより高い圧縮率を提供します。 |
CSV フォーマットでのアーカイブに関する情報は、「CSV フォーマットでコールドデータを手動でアーカイブする」をご参照ください。
アーカイブ後に元のテーブルは引き続きストレージを消費しますか?
いいえ。アーカイブ後、PolarDB にはテーブルのメタデータのみが保持されます。実際のデータは OSS に保存され、クラスターストレージを消費しません。
空のテーブルをアーカイブした後、コンソールにアーカイブ済みテーブルが表示されないのはなぜですか?
空のテーブルの場合、アーカイブ後に OSS に CSV ファイルが生成されないため、コンソールにテーブル情報が表示されません。
自分の OSS にアーカイブ済みコールドデータが表示されないのはなぜですか?
PolarDB はコールドデータを Alibaba Cloud OSS アカウントではなく、PolarDB のデフォルト OSS に保存します。アーカイブ済みコールドデータは PolarDB コンソールでのみ確認できます。
自動アーカイブ
自動アーカイブはどのようにトリガーされますか?
自動アーカイブは、データライフサイクル管理 (DLM) のライフサイクルイベントによってトリガーされます。詳細については、「データライフサイクル管理 (DLM)」をご参照ください。
自動アーカイブされたデータのログはどこに保存されますか?
ログは mysql.dlm_progress テーブルに保存されます。MySQL データベースに対する権限を持つアカウントであれば誰でもクエリできます。テーブルスキーマについては、「mysql.dlm_progress テーブル」をご参照ください。
現在の自動アーカイブポリシーを確認する方法を教えてください。
アーカイブポリシーは mysql.dlm_policies テーブルに保存されます。MySQL データベースに対する権限を持つアカウントであれば誰でもクエリできます。テーブルスキーマについては、「mysql.dlm_policies テーブル」をご参照ください。
その他の質問
アーカイブ済みテーブルの名前変更にはどのくらい時間がかかりますか?
OSS にアーカイブされたテーブルの名前を変更する際、OSS 内のファイル情報は約 100 Mbit/s の速度で変更されます。所要時間はアーカイブデータの合計サイズに基づいて推定してください。
自分の OSS にデータをアーカイブできますか?
いいえ。PolarDB のコールドデータアーカイブは、デフォルト OSS のみを使用します。自分の OSS にデータをエクスポートするには、SELECT INTO OSSOUTFILE ステートメントを実行してください。詳細については、「ローカルテーブルをシリアルに OSS にエクスポートする」をご参照ください。
PolarDB for MySQL クラスターのバージョンが古すぎてコールドデータアーカイブが利用できない場合はどうすればよいですか?
クラスターを最新バージョンにアップグレードしてください。詳細については、「バージョン管理」をご参照ください。