sql >> データベース >  >> RDS >> Database

RDSソリューションのビッグテーブルをテーブルフルエラーに変更

    RDSのビッグテーブルで変更 テーブルの完全なエラーの解決策。例を見てみましょう。サイズが非常に大きいテーブル(〜> 100GBから600GB)。このような大きなテーブルで変更を行うと、メモリとCPUを大量に消費するタスクになります。テーブルの1つでクエリを変更しようとすると、「エラー1114(HY000):テーブルがいっぱいです ”エラー…

    Amazon Auroraのストレージボリュームが自動的に64TBまで増加するのに、この問題が発生したのはなぜですか?

    まず、RDSAuroraのストレージについて理解します。 Auroraには2種類のストレージがあります。 インスタンスストア 一時的なオブジェクトが保存されるローカルストレージとメインストレージです。 データ用。したがって、テーブルに対してALTERを実行すると、一時テーブルが生成され、RDSauroraはインスタンスストレージを使用して一時テーブルを格納します。 db.r3.largeインスタンスであるインスタンスの場合、1×32 GBのローカルストレージがあるため、インスタンス上の一時オブジェクトがこのサイズより大きくなると、「テーブルがいっぱい」というエラーが発生します。また、ローカルストレージの制限は、ストレージボリュームの合計とは異なります。 Auroraインスタンスで利用可能であり、データベースの使用状況に基づいて、AmazonAuroraストレージボリュームは10GB刻みで最大64TBまで自動的に増加します。

    RDSの大きなテーブルで変更 テーブルの完全なエラーの解決策

    1. この問題を解決するには、インスタンスをスケールアップして、ALTERを実行するローカルストレージを増やし、テーブルを変更してから、インスタンスタイプをスケールダウンします。これにより、インスタンスタイプのアップグレード/ダウングレード中にダウンタイムが発生します。
    2. 次のコマンドも使用できます:「pt-online-schema-change」コマンドを使用すると、元のテーブルをダウンタイムなしで引き続き使用できるようになりますまたはテーブルロックなし。
    システムでダウンタイムを発生させる余裕がない場合は、インスタンスをスケーリングする代わりに、pt-online-schema-changeコマンドを使用してください。 ただし、pt-online-schema-changeのドキュメント つまり、このコマンドを実行する前にバックアップを取る必要があります。したがって、本番テーブルの変更中のテーブルのロックや障害を回避するために、同じRDSインスタンスタイプを使用して、アプリケーションデータベースの正確なコピーでこのコマンドをテストできます。 また、トラフィックを模倣するために、テーブルに重い書き込み負荷を追加してみてください 。これを実現するには、テーブルに新しい行を継続的に挿入するbashスクリプトを作成します。現在のDBの正確なコピーをすばやく作成するには、RDS DBのスナップショットを作成し、テストのためにスナップショットから復元します。 このコマンドを実行する前に、RDSDBパラメータグループでlog_bin_trust_function_creatorsを1に設定する必要があります。 ALTERプロセスが完了したら、変数を再び「0」に変更できます。
    結果:
    ptでテーブルを変更する場合 -online-schema-change のコマンド サイズが35〜40 GBのテーブルの場合、約30時間かかる場合があります。

    pt-online-schema-changeコマンドを使用する理由と有効にする理由 DBパラメータグループの「log_bin_trust_function_creators」?

    pt-online-schema-change テーブルをロックしません。このコマンドは、元のテーブルにトリガーを作成します。ただし、このためには、スーパーユーザー権限が必要です。ストアドプロシージャを使用している場合、次のエラーが発生します。
    #1419 – SUPER権限がなく、バイナリロギングが有効になっています(安全性の低いlog_bin_trust_function_creators変数を使用する場合があります
    理由: このエラーは、「ストアドプロシージャ」を使用しようとすると、RDSインスタンスで発生します。ユーザーにスーパー特権を付与しても機能しないことがすぐにわかります。したがって、物事を機能させる唯一の方法は、log_bin_trust_function_creatorsを1に設定することです。 Perconaドキュメントによると: 要点は、バイナリログが有効になっているサーバーでトリガーを作成するには、SUPER権限を持つユーザーが必要です(Amazon RDSでは不可能です)。エラーメッセージは回避策を示しています。 DBパラメータグループ「log_bin_trust_function_creators」の変数を有効にする必要があります。これを有効にすることは、サーバーに次のように言うようなものです。 「通常のユーザーのトリガーと機能を信頼しており、問題が発生しないことを信頼しているので、ユーザーがそれらを作成できるようにします。」 データベースの機能は変更されないため、ユーザーを信頼することが問題になります。 log_bin_trust_function_creatorsは、動的に変更できるグローバル変数です。 MySQLデータベースのユーザーテーブルでユーザーの権限を確認するときに、「Super_priv」の詳細を検索しようとしています。 Super_privがrdsadminユーザー以外には設定されていないことがわかります。
    MySQL> select User,Super_priv from user;
    +-----------+------------+
    | User | Super_priv |
    +-----------+------------+
    | rdsadmin | Y |
    | root | N |
    | dbuser | N |
    +-----------+------------+
    3 rows in set (0.00 sec)

    ここで、「root」はマスターユーザー、「dbuser」はこれらのユーザーが作成したDBユーザーであり、「rdsadmin」ユーザーはこのユーザーにアクセスできないAWSによって自動的に作成されます。 rdsadmin MySQLユーザーは、Amazonがメンテナンスおよび管理作業に使用します。

    これでチュートリアルは終了です。RDSソリューションのビッグテーブルを変更して、完全なエラーをテーブルに表示する方法です。


    1. 基本的なpyodbcバルクインサート

    2. Oracle 11gで2つの日付の間の日数を取得するにはどうすればよいですか?

    3. PL / SQLがロールによって付与された権限を尊重しないのはなぜですか?

    4. RACデータベースの起動がエラーORA-12547で失敗する