inosisibeyan's diary

inosisibeyanの日常をカキコ

珍しく残業

年に1度の、報告書の作成をやった。PCその他が最新機器になっているので、思った以上に時間節約出来た。去年は2時間ほど、その前は2X2で4時間だった。
今日は30分と残業が減少している。
やっている事は、あまり変化していないが全体での待ちが減っているから、時間がかからないことに繋がっている。
私は、今までやっていたベンチマークテストと言えば、各クエリの実行時間を測定してチューニングの掛ける必要性を何年も探っていたことがあった。
当時の導いた結論は、1秒以上処理が掛かっているものが、突然時間が何分もかかる事。
逆に各クエリの処理を1秒以内に収められたら、数十個もある処理でも1分以内に終わることが出来る事。
更新を自動ですることが、案外時間を使うことになる。これは、更新1回と設定変更して時間を削ることが出来た。
バックで動いているプログラム、サービスを削るのも忘れなかった。ディスクの圧縮も馬鹿にならない時間節約術だ。
考えられる事は、1秒というのがどうやらメモリー上での処理の限界でそれ以上は、HDDのスワップファイルが利用されるから時間が極端に増加したように思う。
クエリでの注意点は、テーブル一つではそれ程時間が掛からないが、2つ3つとテーブルが増える毎にテーブルの容量xテーブルの容量分の時間が掛かってしまうようだ。件数と、フィールドの長さと数を減らせられるだけ減らせば、その分容量の掛け合わせた結果も減少するので、時間も自ずと減少する事になる。
クエリは、途中は出来るだけシンプルな形で実行して行き結果で詳細が必要になるなら、その詳細だけ別で作成して最終的に連結する。少々複雑な処理に変わるが、高速処理だけは保証されたクエリ。それが私の得意技だ。
そんなチューニングされたクエリだったことも有り、最新のPCではあっと言う間に処理が終わってしまう。
今では、何秒で最適なクエリなのか計りようが無いぐらい高速だ。accessとMySQLで昔は約5倍の時間差があったが、現在はどれぐらいの差になっているのか?こちらも計っていないので不明だ。最近のMySQLは多機能になっているので速度がどれだけ維持出来ているのか?いくつかのベンチマークをやって見ないことには分からないだろう。

この前の質問で、メモリー上にMySQLのテーブルを持って処理すると言うものがあったが、全体のバランスが悪くなったらそれ程最適化されないという事を付け加えるのを忘れていた。贅沢にメモリーを積んでいないのなら、普通にテーブルを最適化したり、処理を分割したり、時間差で実行するなどしたら全体的に速い処理が可能になる。ただ、ちょっとした手間の掛かる。それはいた仕方ない。