qudoで一日にjobが何件ぐらい投入されたか計測する
jobが一日あたり何件ぐらい投入されているのか、お手軽に確認できるようにするのに、MySQLのtriggerを使ってみるとどうだろ、ということでやってみた。
まず普段のqudoのschemaに加え、以下のようなテーブルを追加します。
CREATE TABLE `job_counter` ( `enqueued_on` date NOT NULL, `count` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`enqueued_on`) ) ENGINE=InnoDB
で、以下のようなtriggerを追加します。
delimiter / CREATE TRIGGER job_counter ON AFTER INSERT job BEGIN INSERT INTO job_counter (enqueued_on, count) VALUES (CURDATE(), 1) ON DUPLICATE UPDATE count=count+1; END / delimiter ;
これで、jobをenqueueすると、その日のjob_counterが+1されるようになるようだ。
なければ追加しつつあるカラムをインクリメントするようなSQLは、INSERT INTO xxx () VALUES ON DUPLICATE UPDATE 〜という構文を使うらしい。
CURDATE()を使っているので、レプリケーション構成をつくるときに、Rowベースレプリケーションにとかにしてないと、Master/Slaveがズレるのかなと思いつつ、ステートメントベースの設定の状態で、mysqlbinlogでバイナリログを見てみた感じだと、トリガに関してのbinlogは吐かれていないようなので、masterでもslaveでも各々triggerが実行される、という形になるっぽいのでよろしくないのかもしれない。ちょっと自信がないな。
http://dev.mysql.com/doc/refman/5.1/ja/stored-procedure-logging.html