読者です 読者をやめる 読者になる 読者になる

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