web-dev-qa-db-ja.com

AmazonRDSインスタンスのパフォーマンスが低い

小さなRDSデータベースインスタンスに支えられたPHP Webアプリケーションで負荷/ストレステストを行っています。最大50の同時WebリクエストでWebサイトにアクセスすると、RDSデータベースが停止します。すべての接続要求に約10秒間応答します(私のWebアプリケーションから、および他のマシンからコマンドラインmysqlクライアントを使用して私から)PHPは次のエラーを返します:

Could not connect to database. Lost connection to MySQL server at 'reading initial communication packet', system error: 110

これは、リソースを占有しているWebアプリケーションのSQLが貧弱で遅いと思いましたが、このパフォーマンスは本当に悪いように思われるので、もう少し深く掘り下げました。同じバージョンのmysql、データベースのクローン、およびデフォルト構成を使用して、EC2マイクロインスタンスに別のmysqlサーバーをセットアップしました。 EC2インスタンスのパフォーマンスは数倍向上します(レイテンシーと、クローキング前の同時Webリクエストの数の両方)。

RDSインスタンスとEC2インスタンスは同じバージョンのmysqlをデフォルト構成で使用していますが、RDSインスタンスを微調整してさまざまなバッファー、max_connections、max_connection_errorsを増やしてみましたが、すべて役に立ちませんでした。

何が得られますか?より優れた「ディスク」I/O、3x RAM、およびより多くの専用CPUを備えたRDSインスタンスが、弱虫のEC2インスタンスよりも優れているのはなぜですか?

私の疑いは、これがAWSの癖かMySQL/RDS構成の問題のいずれかであるということです。どちらの主題の第一人者も、この問題に光を当てることができることを願っています...ありがとう!

4
Stefan

小さなRDSインスタンスで遭遇したことの1つは、接続数の設定でした。これはRAM-に基づく式であり、小さなDBでは最大150の接続しか許可されません。これが最初に確認することです。

SHOW PROCESSLIST;

コマンドになります。アプリで何らかの接続プールを使用していない場合は、かなり早くその制限に達する可能性があります。

暗闇の中でのショットですが、とにかく頑張ってください!

3
tsykoduk

「DBパラメータグループ」を作成してから、コマンドラインツールを使用して設定を編集する必要があります: AWS RDSデプロイメントガイド

1
eeMZee