私の同僚がサーバーとDBをAWSに移行したところ、それ以降、いくつかのクエリが非常に遅くなっています。私たちのコードは主にPHPであり、MySQLデータベースを使用しています。私が行ったいくつかの調査に基づいて、問題は次の2つのうちの1つである可能性があります。
1)Auroraは古いシングルスレッドコードを処理するように最適化されていないため、MySQL RDSを使用するとうまく機能する可能性がありますか? (クリック ここ 関連記事を見る)
2)すべてのインデックスを再構築する必要があります
私はこれらのいずれかをテストまたは処理する方法がわからないので(私はDB初心者です)、誰かが私を正しい方向に向けたり、何が起こっているのかについていくつかの提案をしてくれることを望んでいました。
編集:
これが役立つ場合は、エラーログの一部へのPastebinを次に示します。 https://Pastebin.com/fudCSTux 、スクリプトを機能させようとしていますが、今のところうまくいきません。これらの変数の値を貼り付けてうれしいですが、それらのいくつかはセキュリティリスクのようです。機密情報を調べて編集する必要があります。
編集2:
ここ は、すべてのデータベース構成情報のペーストビンです。
Here は、explainクエリとshow createtable情報のPastebinです。
編集3:
メインサーバーはt2小さいです。データベースに関する限り、マスター、リーダー、ライターがあります。リーダーとライターはどちらも現在t2メディア、vCPU 2、RAM 4GB、SSD/NVMEデバイスがないことがわかる限りです。AWSコンソールを見ていますservices > rds > databases > clicked on instances > configuration > instance class
ハードウェアを評価します。
クエリを変更し、driverId
の前後の引用符を削除しましたが、クエリはまだ遅いです。何かがクラッシュした場合に備えて、今夜はトラフィックが少なくなるまでインデックスを作成するのを待ちます。
クエリ-select * from driver_events where driverId = '923' and FROM_UNIXTIME(time、 '%m-%d-%Y')= '12 -18-2019 'order by time desc limit 0,5; -driverIDを引用符で囲む必要はありません。引用符はすべての行のデータ型操作を引き起こします。列driverIDはINTとして定義されているため、引用符は不要です。
Jobs.timeのインデックスがないため、jobsクエリは非常に長く実行されます。提案:ALTERTABLEジョブADDINDEX idx_jobs_time(time);
クエリの完了に必要な時間を短縮するため。パフォーマンスを向上させるためのダウンロード可能な無料のユーティリティスクリプトのネットワークプロファイルを表示します。
1秒あたりのレート= RPS
AWS AuroraParametersグループで検討すべき提案
thread_cache_size=32 # from 2 to reduce threads_created
innodb_lru_scan_depth=100 # from 1024 to conserve 90% of CPU cycles used by function
innodb_flushing_avg_loops=5 # from 30 to reduce loop delay
read_rnd_buffer_size=192K # from 512K to reduce handler_read_rnd_next RPS of 12,322
これらの構成変更により、CPUビジーが大幅に削減され、クエリの完了速度が向上します。