2016-10-24 7 views
0

私はゲームサーバー(プレイヤー情報、セーブデータ、もの)用にMySQL(InnoDB)を持つNodeJSを実行しています。サーバーはHTTP(S)に基づいているため、リアルタイムではありません。あなたと最大応答時間を見ることができ、応答時間のグラフでMySQLクエリ時間に奇妙なスパイクがあります

あなたは下のグラフからわかるように、私はこれらの奇妙なスパイクを持っています(最初のグラフは、リクエスト/秒と最後のグラフは、クエリ/秒である)

紫色で応答時間が平均です。これらの10〜20kピークの平均値でも、リクエストの95%が50〜100msにとどまります。

私は掘り下げていましたが、遅いクエリは特別なものではないことがわかりました。通常はsavedata(〜2kbのブロブ)またはユーザー名などのように変更するプレーヤープロファイルの更新でクエリを更新します。ジョインなどはありません。我々は100k行未満のテーブルについて話しています。

サーバは、4コアと7GBのRAMを使用して、MySQL 5.7でUbuntu 14.04のAzureで動作しています。

Server monitor stuff

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

+0

ディスクのスループットも確認​​できますか?ディスクが忙しくてスパイクが発生することがあります。また、これが重いシステムを書いている場合、ロック待ち、デッドロックなどのようなバックグラウンドで起こっていることがたくさんあります。これらもまた、この種の動作につながります。 – Aruna

+0

IO側で何も起きない。サーバーは、バックエンド以外にはほとんど実行されていません。 –

+0

リソースを使い切っている時間別のcronジョブがありますか?固定間隔であるようですか?たぶんlogrotationまたは何か – verhie

答えて

1

(RAM使用量を最大0 mysqlのマシンであることを仮定)あなたのswappinessのを確認してください。唯一のRAMの7Gとちょうどプールをバッファリングの4Gと

> sysctl -A|grep swap 
vm.swappiness = 0 

swappinessのであれば、あなたのマシンが入れ替わりますゼロではない。

スワップグラフと使用メモリを投稿できますか? 4Gバッファは7Gラムの「端を越えて」あります。 8Gラムの場合、OS上のmysql wise + 2Gのすべてに+ 1Gがあるので、3Gを提供します。

また、トランザクションログファイルには1Gがありますが、2つのログファイルがあると仮定します。そのような大きなファイルを持つためにたくさんの書き込みがありますか?このガイドを使用できます:https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

+0

60に設定され、0に変更されました。 –

+0

私はデフォルトの設定から始めて、これらのガイドの多くを使って最適化しようとしました。 1つのログはバッファサイズの25%にする必要があるので、私は1Gに行きました。 –

+0

私は5.5 - > 5.7からMySQLをアップグレードしました。また、VMを14GB RAMで若干高速のCPUにアップグレードしました。私は現在、古いconf(2G RAMであっても4Gバッファ)でサーバを実行しています。 Swappinessは0になり、10Gで "available memory"と表示されます。私たちは近い将来、少なくとも100倍以上のトラフィックを期待しています。私はこのサーバーでパニックに陥っています。 –

関連する問題