ゲームサーバー(プレーヤー情報、保存データなど)用にMySQL(InnoDB)でNodeJSを実行しています。サーバーは HTTP(S) ベースなのでリアルタイムではありません。
以下のグラフからわかるように、これらの奇妙なスパイクがあります (最初のグラフはリクエスト/秒で、最後のグラフはクエリ/秒です)。
応答時間グラフでは、最大応答時間が紫で、平均応答時間が青で表示されます。これらの 10 ~ 20,000 のピークがあっても、リクエストの 95% と同様に、平均は 50 ~ 100 ミリ秒のままです。
私は掘り下げてきましたが、遅いクエリは特別なものではないことがわかりました。通常、savedata (~2kb の blob) を使用してクエリを更新するか、ユーザー名などを変更するプレーヤー プロファイルの更新を行います。結合などはありません。10万行未満のテーブルについて話しています。
サーバーは、4 コアと 7 GB の 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
編集: 問題は MySQL のパフォーマンスではなく、SQL クエリの前の Node.js のパフォーマンスであることが判明しました。詳細はこちら: Node.js multer と body-parser が非常に遅い場合がある