ローカルのMySQLデータベースに大きなINSERTを実行しています
私は2,000,000行に達しており、現在、減速に気づき始めています。 MySQLはあまりスケーラブルではないと聞いていました
私はこのデータベースが大きくなることを期待しており、挿入することがたくさんあります
amazonマイクロインスタンスを使用すると、ここで何かメリットがありますか?
アップロード速度がボトルネックになるとは思いません。そのため、私のロジックでは、分散処理によってデータベースが高速になるということです。
これはより多くのCPU使用率の問題であることが判明しましたが、Amazonのソリューションの方が優れているでしょう。このロジックを使用すると、より高価なインスタンスのパフォーマンスが向上します
しかし、ここには非常に多くの変数が含まれているので、誰かがこれについて言う経験がありますか?
MySQL環境、特にInnoDB設定を完全に調整する必要があります。 (チューニングのヒントについては、回答の下部を参照してください)。これは、RAM /ディスクのエルボールームでアマゾンと戦うよりもはるかに優れています。なぜ私は戦いと言ったのですか?
MySQLのAmazon RDSインスタンスをスピンアップしただけの場合は、与えられた制約を受けます。 MySQL Amazon RDSのすべてのモデルには同じ主要オプションがありますが、2つの点のみが異なります
ここに私が一週間前に投稿したチャートがあります: https://dba.stackexchange.com/a/21498/877
MODEL max_connections innodb_buffer_pool_size
--------- --------------- -----------------------
t1.micro 34 326107136 ( 311M)
m1-small 125 1179648000 ( 1125M, 1.097G)
m1-large 623 5882511360 ( 5610M, 5.479G)
m1-xlarge 1263 11922309120 (11370M, 11.103G)
m2-xlarge 1441 13605273600 (12975M, 12.671G)
m2-2xlarge 2900 27367833600 (26100M, 25.488G)
m2-4xlarge 5816 54892953600 (52350M, 51.123G)
モデルが大きいほど、InnoDBバッファープールも大きくなります。ええ、予算を大きくする必要があります。
ほとんどの人が知らないのは、InnoDBトランザクションログファイルがすべてのモデルで同じサイズであるということです:128M。デフォルト設定( innodb_log_files_in_group = 2)を前提とすると、256Mのトランザクションログスペースになります。他のInnoDBオプションを設定する場合は、次のようにします。
MySettings
と呼びます)./rds-modify-db-parameter-group MySettings --parameters "name=<InnoDB Option>,value=???,method=immediate"
MySettings
それはあなたの将来の考慮のためです。
手元のインポートの問題については、 AWS RDSドキュメントにインポートの遅延を回避するための多くの提案があります 以下を含みます:
LOAD DATA INFILE
インポート用。どうして ?なぜなら、MyISAMテーブルのみが、一括挿入バッファー( がデフォルトで8M )と組み合わせて使用することでメリットがあるためです。 InnoDBはその恩恵を受けません。
Mysqldumpまたは独自のSQLを介してInnoDBテーブルをロードしている場合、すべて順調です。大量のトランザクションを一括で課している場合は、前に説明したように、トランザクションログを拡張する必要があります。
補足として、AWSがスナップショットを実行している場合は、大きなトランザクションを実行しないでください。スナップショットが適切にスケジュールされていることを確認してから、スナップショットウィンドウ内で大きなトランザクションを実行しないようにコミットする必要があります。一括トランザクション中にスナップショットを無効にすることもできますが、 AWS RDSのドキュメント には、次の点に大きな注意があります。
警告:ポイントインタイムリカバリを実行する機能を維持する必要がある場合は、自動バックアップを無効にしないでください。自動バックアップを無効にすると、既存のバックアップがすべて消去されるため、自動バックアップを無効にした後は、ポイントインタイムリカバリを実行できません。自動バックアップを無効にすることはパフォーマンスの最適化であり、データのロードには必要ありません。 DBスナップショットは、自動バックアップを無効にしても影響を受けないことに注意してください。既存のすべてのDBスナップショットは、引き続き復元に使用できます。
自動バックアップを無効にすると、ロード時間が約25%短縮され、ロード中に必要なストレージ容量が減少します。データを含まない新しいDBインスタンスにデータをロードする場合、バックアップを無効にすると、ロードを高速化し、バックアップに必要な追加のストレージを使用しないようにする簡単な方法です。ただし、すでにデータが含まれているDBインスタンスにロードする場合は、バックアップを無効にすることの利点と、ポイントインタイムリカバリを実行する機能を失うことの影響を比較検討する必要があります。
DBインスタンスでは、デフォルトで自動バックアップが有効になっています(保持期間は1日)。自動バックアップを無効にするには、バックアップ保持期間をゼロに設定する必要があります。ロード後、バックアップ保持期間をゼロ以外の値に設定することにより、バックアップを再度有効にすることができます。バックアップを有効または無効にするために、Amazon RDSは、DBインスタンスをシャットダウンして再起動し、MySQLロギングをオンまたはオフにする必要があります。
Rds-modify-db-instanceコマンドを使用して、バックアップ保持をゼロに設定し、変更をすぐに適用します。保持期間をゼロに設定するには、DBインスタンスを再起動する必要があるため、再起動が完了するまで待ってから次に進みます。
rds-modify-db-instance AcmeRDS --apply-immediately --backup-retention-period = 0 rds-describe-db-instancesコマンドを使用して、DBインスタンスのステータスを確認できます。この例では、AcmeRDSデータベースインスタンスのステータスが表示され、列見出しを表示する--headersオプションが含まれています。
これが、InnoDBのチューニングに関する私の過去の投稿です。
@Philで述べたように、Amazon RDSは配布されないため、オンデマンドでマシンをアップグレードできることを除いて、ローカルシステムとほとんど同じです。それでも、最大のRDSインスタンスで利用できるよりも多くのCPUパワーを使用する必要がある場合は、行き詰まります。スループット/ CPU使用率に無制限のスケーラビリティを持たせたい場合は、自動スケーリングを提供する Xeround のようなMySQLサービス、または RackSpace's MySQLサービスを検討する必要があります-これらは分散されていますRDSとは異なり、ソリューション。 :)