主にプログラミングやサーバーの設定などで困った時のメモ
処理時間の増加に関してです。
詳細は以下から...
5000件ほどデータが入ったテーブルを5分起きに全件UPDATEしていたんですけど、たかが5000件をUPDATEするのに10秒以上かかっていました。他に特に重い処理をしていないのにもかかわらずこのスコアは明らかに何かがおかしい。
しかも、それを決定付けるものが見つかりました。そうです。毎回UPDATEにかかる時間が増加していたんです。ちなみに、UPDATEをするプログラム自体はcronで5分起きに起動させています。プロセスもきちんと切れているみたいで、メモリの増加も見られません。なので、プログラム的な何かが溜まって・・・ということは無いだろうと自分の中で調べていると、テーブル定義で不必要な部分を発見しました。
■UPDATE対象のテーブル定義
timestamp NOT NULL TIMESTAMP
user_id INTEGER NOT NULL AUTO_INCREMENT
last_date NOT NULL TIMESTAMP
UNIQUE KEY `unique_index_1` (`timestamp`, `user_id`);
大体こんな感じです。
>UNIQUE KEY `unique_index_1` (`timestamp`, `user_id`);
ここが直感的におかしいと思ったので、
PRIMARY KEY (`user_id`)
と言う風に修正しました。
すると、処理時間の増加も起きなくなり、大体1s〜2sの間でUPDATE処理を終えています。
結果として、解決はされましたが、原因に関してはDBのことに関しては詳しく知らないのでなんとも言えません^^;
どなたか、DBのスペシャリストの方がいましたら教えていただけるととてもありがたいです。
DB インストール コマンド MySQL 自作ユーティリティ デバッグ フリーソフト SQL パフォーマンス XML scp ftp 暗号化 シェアウェア プログラミング 丸め誤差 浮動小数点 ResultSet Date Timestamp バージョン管理 リストア ダンプ JKL.ParseXML JSON GIGAZINE Eclipse ハッキング 置換 固定小数点 CVS SQL開発環境 SQLRelay textarea form HTML 日付 plugin 命名規則,スクリプティング言語 チューニング メモリ プラグイン, Java Eclipse, iBatis フレームワーク firefox Fedora7 階層構造 Jash XMLSchema Windows Spring PAR ブラウザ FireBug RPM ダウンロード 処理時間 インデックス テーブル定義 コネクションプール
コメントの投稿