LoginSignup
21

More than 5 years have passed since last update.

MySQLの処理負荷が上がるとLoad Averageも上がるのか

Posted at

MySQLで待ちクエリが大量発生してもLoad Averageが上がることはないというようなことを聞いたので、その理由を考えてみました。自分なりに調べてみましたが、間違っていたらご指摘下さい。

そもそもLoad Average(ロードアベレージ)とは

  • 実行プロセス数(実行中プロセス数+実行可能プロセス数) ※実行可能プロセス数とは、CPU割り当て待ちのプロセスで、CPUが割り当てられれば実行されるプロセスのこと。I/O待ちのプロセスはカウントされない。
  • Load Average は1分あたりの実行プロセス数を表す。 例えば値が 0.5 だった場合、1プロセスが30秒稼働状態だったかもしれないし、2プロセスが15秒稼働状態だったかもしれない。
  • Load Average <= CPU数であれば、処理負荷がかかっていないと一般的には言われている。 ※CPU数の数え方については http://tweeeety.hateblo.jp/entry/20130422/1366637798 に詳しく記載されている。

MySQLの処理負荷が上がるとLoad Averageも上がるのか?

  • まず、MySQLはシングルプロセス/マルチスレッドのアプリケーションである。
  • マルチスレッドとは

1つのアプリケーションソフトがスレッドと呼ばれる処理単位を複数生成し、並行して複数の処理を行うこと。いわばアプリケーションソフト内でのマルチタスク処理。マルチタスクと同じように、CPUの処理時間を非常に短い単位に分割し、複数のスレッドに順番に割り当てることによって、複数の処理を同時に行っているようにみせている。
http://e-words.jp/w/E3839EE383ABE38381E382B9E383ACE38383E38389.html

  • つまり、クエリが大量に発行されても、MySQLのプロセスは1つのままであり、MySQLのプロセス内でクエリの実行待ちが増える。CPUの負荷率は高まるが、プロセス数は1のままとなる。
  • で、MySQLのCPU使用率が高まるとMySQL以外のプロセスに影響が出る。その結果、Load Averageが上昇することは考えられる。
  • ちなみに MySQL の 「show processlist」コマンドで表示されるデータは「プロセス」なのか?公式を見ると下記のこと。スレッドなんですね。

SHOW PROCESSLIST shows you which threads are running.
http://dev.mysql.com/doc/refman/5.5/en/show-processlist.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21