私はゲームサーバー(プレイヤー情報、セーブデータ、もの)用にMySQL(InnoDB)を持つNodeJSを実行しています。サーバーはHTTP(S)に基づいているため、リアルタイムではありません。あなたと最大応答時間を見ることができ、応答時間のグラフでMySQLクエリ時間に奇妙なスパイクがあります
あなたは下のグラフからわかるように、私はこれらの奇妙なスパイクを持っています(最初のグラフは、リクエスト/秒と最後のグラフは、クエリ/秒である)
紫色で応答時間が平均です。これらの10〜20kピークの平均値でも、リクエストの95%が50〜100msにとどまります。
私は掘り下げていましたが、遅いクエリは特別なものではないことがわかりました。通常はsavedata(〜2kbのブロブ)またはユーザー名などのように変更するプレーヤープロファイルの更新でクエリを更新します。ジョインなどはありません。我々は100k行未満のテーブルについて話しています。
サーバは、4コアと7GBのRAMを使用して、MySQL 5.7でUbuntu 14.04のAzureで動作しています。
MySQLの設定:
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
innodb_buffer_pool_instances=4
innodb_log_buffer_size=4M
query_cache_type=0
tmp_table_size=64M
max_heap_table_size=64M
sort_buffer_size=32M
wait_timeout=300
interactive_timeout=300
innodb_file_per_table=ON
編集:それは問題はSQLクエリの前に決してMySQLのパフォーマンスが、Node.jsの性能だったことが判明しました。詳細:Node.js multer and body-parser sometimes extremely slow
ディスクのスループットも確認できますか?ディスクが忙しくてスパイクが発生することがあります。また、これが重いシステムを書いている場合、ロック待ち、デッドロックなどのようなバックグラウンドで起こっていることがたくさんあります。これらもまた、この種の動作につながります。 – Aruna
IO側で何も起きない。サーバーは、バックエンド以外にはほとんど実行されていません。 –
リソースを使い切っている時間別のcronジョブがありますか?固定間隔であるようですか?たぶんlogrotationまたは何か – verhie