mysql:13859
From: 丸山 宏徳 <丸山 宏徳 <kutsugi@xxxxxxxxxx>>
Date: Wed, 11 Apr 2007 01:11:44 +0900
Subject: [mysql 13859] 高負荷クエリー実行への最適化
大変ご無沙汰しております。普段から参考にさせていただいてはおりますが、投 稿するのは3年ぶり位になってしまいます。改めてよろしくお願いします。 さて表題の件、MySQL4.1+Tomcat5.5というシステムで、分単位で実行時間が必 要なクエリーを実行するシステムの負荷(CPU使用率およびメモリ使用量)を何 とか削減したい、という依頼を受けました。 まぁ「まずはクエリーを見直すのが先決だろう」というご指摘はごもっともなの ですが、ソースが仕様書という案件でしたので(苦笑)、後回しになってしまい ました。とはいえテーブルの非正規化の許可も出たので、そちらはそちらで現在 作業中で、そちらではかなりのパフォーマンスの向上が見込める予定です。 とはいえ、チューニングで何とか出来る部分があればというコトで環境周りも手 を入れています。MySQL周りで一番気になったのが、InnoDBを使っているのに key_bufferとかをドカンと指定していたことですね。という事で ・替わりにinnodb_buffer_pool_sizeをスワップしない程度に目一杯 ・innodb_log_file_sizeに64M ・innodb_log_buffer_sizeに8M ・query_cache_sizeに64Mを指定して query_cache_type を1に ・join_buffer_size、read_buffer_size、read_rnd_buffer_size 、sort_buffer_size あたりに各2Mづつ なんてあたりに手を入れてみたのですが、実行時間そのものはあまり変化はあり ませんでした。メモリ関連、特にスワップはかなり減ったので、まるで無意味で はなさそうなのですが……。クエリーそのものが重い以上、実行時間については クエリーのチューニングを待つしかないのかな? あと指定するとすればinnodb_thread_concurrency あたりでしょうか? ただ、 これはあまり大きな数を指定するとパフォーマンスが落ちるという投稿を読んだ コトもありますので、デフォルトの8からどの程度増やすか、少々考えどころで すね。 というコトで、%表題%、「クエリーの数は少ないが一つ一つが時間がかかる」と いう場合の最適化の手法について、一般論で結構ですのでアドバイスを頂ければ 幸いです。「ここをいじってみろ」程度でかまいませんので、ご意見をお伺いで きればと存じます。よろしくお願いします。 丸山 宏徳 E-Mail:kutsugi@xxxxxxxxxx
-> 13859 2007-04-11 01:11 [丸山 宏徳 <kutsugi@] 高負荷クエリー実行への最適化 13860 2007-04-11 01:48 ┗[SATOH Fumiyasu <fumi] 13861 2007-04-11 10:56 ┗[丸山 宏徳 <kutsugi@]