mysqlのCPU負荷で悩んでいます。mysqlのCPU負荷をtopコマンドで見ているのですが、数%~10数%だったのが、急に50%になったり110%になったりするのですが、これは普通なのでしょうか?それともmysqlのチューニングなどが悪いのでしょうか?あまりに抽象的な質問であることは承知していますので、分かる範囲での情報や参考になりそうな情報をお教え頂ければ幸いです。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/02/06 13:55:17
  • 終了:2011/02/12 11:03:24

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/02/06 14:16:35

ポイント50pt

数値とCPUの状態をざっくりと書きますと以下になります

低い数値 特に仕事もせずにプラプラとしている暇な状態
瞬間的に高い数値 仕事をしている状態
高い数値が続いている状態 CPUはいっぱいいっぱいな状態で仕事を続けている(処理が重過ぎる)

急に数値が上がっただけで、すぐに数値が下がるようであれば、特に心配することはありませんが、数値が上がりっぱなしになるようであれば計算能力が追いついていないということになりますので、MySQLに行わせる仕事の量を減らすか、パソコンの処理能力をあげてやる(メモリ増設や高速なHDDへの置換、パソコンまるごと高性能なものに交換など)してやらなければなりません

 

以下、蛇足です

データベースで足かせになるのは、HDDとのやりとりになりますので、Linuxのようにファイルキャッシュなど調整できるOSであれば調整をすることで劇的に改善する場合もあります(Windowsの場合は細かいメモリの利用割り当てなどは出来ませんので次に進みます)

 

OSの設定のような難しいことをせずとも、OS/MySQL共にデフォルトの設定でもまぁまぁの性能はでるようになってますので、インデックスを適切に設定したり、SQLはなるべく簡単な処理を行うようにして、さらには取得するレコード数を絞ったりするなどといった工夫をするだけで段違いな性能を示すようになります。難しいことを考えずシンプルなデータベースの構造とSQLを作成することを心がけてみてください

id:MrB

丁寧な回答ありがとうございます。

昼間は瞬間的に高いだけなのですが、夜の21時~24時くらいまでは高い数値が続いたりします。

自分ではシンプルなSQLを書いているつもりですが、もういちどSQLなどを見直してみます。

2011/02/06 18:17:47

その他の回答(2件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/02/06 14:16:35ここでベストアンサー

ポイント50pt

数値とCPUの状態をざっくりと書きますと以下になります

低い数値 特に仕事もせずにプラプラとしている暇な状態
瞬間的に高い数値 仕事をしている状態
高い数値が続いている状態 CPUはいっぱいいっぱいな状態で仕事を続けている(処理が重過ぎる)

急に数値が上がっただけで、すぐに数値が下がるようであれば、特に心配することはありませんが、数値が上がりっぱなしになるようであれば計算能力が追いついていないということになりますので、MySQLに行わせる仕事の量を減らすか、パソコンの処理能力をあげてやる(メモリ増設や高速なHDDへの置換、パソコンまるごと高性能なものに交換など)してやらなければなりません

 

以下、蛇足です

データベースで足かせになるのは、HDDとのやりとりになりますので、Linuxのようにファイルキャッシュなど調整できるOSであれば調整をすることで劇的に改善する場合もあります(Windowsの場合は細かいメモリの利用割り当てなどは出来ませんので次に進みます)

 

OSの設定のような難しいことをせずとも、OS/MySQL共にデフォルトの設定でもまぁまぁの性能はでるようになってますので、インデックスを適切に設定したり、SQLはなるべく簡単な処理を行うようにして、さらには取得するレコード数を絞ったりするなどといった工夫をするだけで段違いな性能を示すようになります。難しいことを考えずシンプルなデータベースの構造とSQLを作成することを心がけてみてください

id:MrB

丁寧な回答ありがとうございます。

昼間は瞬間的に高いだけなのですが、夜の21時~24時くらいまでは高い数値が続いたりします。

自分ではシンプルなSQLを書いているつもりですが、もういちどSQLなどを見直してみます。

2011/02/06 18:17:47
id:iQuest No.2

iQuest回答回数66ベストアンサー獲得回数52011/02/06 14:29:58

ポイント30pt

状況が分からないのですが、topコマンドと言うことはLinuxをご利用ですよね。

  1. そのMySQLサーバはインターネットに公開しているのでしょうか?
  2. そのMySQLサーバに同時接続しているクライアント数はどのくらいなのでしょうか?

ご確認ください。


MySQLの負荷状況を調べるには、mysqladmin コマンドを利用し

mysqladmin status -u ユーザー名 -p

を実行してみてください。

MySQLサーバの細かいステータスが表示されます。各々のパラメータの読み方は、「ステータス変数」を参考にしてください。

とくに、Connectionsの数と、Aborted_clients が発生していないかどうかご確認ください。

id:MrB

ご回答ありがとうございます。

インターネットに公開していて、サイトを利用しているユーザーが3万人程度います。

statusを見ると、Connectionsは747584、Aborted_clientsは0、Max_used_connectionsは21となっています。

2011/02/07 23:24:18
id:taroe No.3

taroe回答回数1099ベストアンサー獲得回数1322011/02/06 16:12:37

ポイント10pt

analyze table を試してみては?

インデックスが効果的に使われてないのかもしれません。

高負荷になってるときに、どのようなSQL文は実行されてるのかとかわかるともっと詳細がわかるようになると思います。

id:MrB

ご回答ありがとうございます。

analyze tableを試したのですが、あまり変わらなかったです。

再度、SQLの見直しをしてみます。

2011/02/07 23:25:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません