Hatena::Diary

かみぽのメモ

2010-07-13

Muninのグラフを動的生成にする

| 02:57 | はてなブックマーク - Muninのグラフを動的生成にする - かみぽのメモ

通常だとMuninは5分毎に対象ホストの全てのグラフを生成するんだけど、Debianにはmunin-cgi-graphというCGIが付いていて、オンデマンドに参照してるグラフだけを生成することができる。

やり方はmunin.confに

graph_strategy cgi

と書くとバッチ処理で生成されるhtmlのグラフのパスがCGIになり、バッチ処理でグラフが生成されないようになる。


あとはapacheを使ってるならhttpd.confに

ScriptAlias /cgi-bin/munin-cgi-graph /usr/lib/cgi-bin/munin-cgi-graph

と書けば参照時にCGIでグラフが生成されるようになる。


CGIのためだけにapache使いたくない自分のためにCGIコピペしてPSGI化したのでここに置いておきますね!

参考

2010-06-29

Spiderをバイナリパッケージからインストール

| 04:07 | はてなブックマーク - Spiderをバイナリパッケージからインストール - かみぽのメモ

今日はDeNA Technology Seminar #2ですが、皆さんSpiderの予習復習は大丈夫でしょうか。

Spiderのチュートリアルといえば@さんのエントリーを見るのが一番だと思いますが、ちょっと試してみたいときにmysqlコンパイルから始めるのは大変なので、linux用のバイナリパッケージでさくっと環境構築しちゃいましょう。


mkdir -p ~/local/src
cd ~/local/src

wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.44-linux-x86_64-glibc23.tar.gz
wget http://launchpad.net/spiderformysql/spider-2.x/2.21-for-5.1.44/+download/spider-2.21-for-mysql-5.1.44-linux-x86_64-glibc23.tgz
wget http://launchpad.net/vpformysql/trunk/0.10-for-5.1.44/+download/vp-0.10-for-mysql-5.1.44-linux-x86_64-glibc23.tgz

tar zxvf mysql-5.1.44-linux-x86_64-glibc23.tar.gz
tar zxvf spider-2.21-for-mysql-5.1.44-linux-x86_64-glibc23.tgz -C mysql-5.1.44-linux-x86_64-glibc23/lib/plugin/
tar zxvf vp-0.10-for-mysql-5.1.44-linux-x86_64-glibc23.tgz -C mysql-5.1.44-linux-x86_64-glibc23/lib/plugin/

wget -O - http://cpanmin.us/ | perl - --sudo -v MySQL::Sandbox

mkdir -p ~/opt/mysql
ln -s ~/local/src/mysql-5.1.44-linux-x86_64-glibc23 ~/opt/mysql/5.1.44

make_multiple_sandbox --how_many_nodes=8 5.1.44

インストールできたらもうここには用はないので@さんのブログを見ればいいと思います!


それでは、エンジョイ!


お帰りはコチラ

2010-06-15

phpの論理演算子と三項演算子

| 17:02 | はてなブックマーク - phpの論理演算子と三項演算子 - かみぽのメモ

社内IRCでphpの論理演算子の話題が出てたので、phpで僕が嫌いな論理演算子と三項演算子の挙動について。

% perl -e 'print("hoge" || "fuga");'
hoge
% ruby -e 'print("hoge" || "fuga");'
hoge
% python -c 'print("hoge" or "fuga");'
hoge
% js -e 'print("hoge" || "fuga");'
hoge
% php -r 'print("hoge" || "fuga");'
1

phpは論理演算子の返り値はboolにキャストされてしまうようです。

% perl -e 'print(1 ? 2 : 3 ? 4 : 5);'
2
% ruby -e 'print(1 ? 2 : 3 ? 4 : 5);'
2
% js -e 'print(1 ? 2 : 3 ? 4 : 5);'
2
% php -r 'print(1 ? 2 : 3 ? 4 : 5);'
4

phpの三項演算子は左結合するようです。


どうしてこうなった…。

2010-05-26

mysqlでクエリのコメントがshow full processlistに表示されないときの対処法

| 18:06 | はてなブックマーク - mysqlでクエリのコメントがshow full processlistに表示されないときの対処法 - かみぽのメモ

人力検索twitterで聞いたらすぐ解決しました。

# mysql --help|grep comments
  -c, --comments      Preserve comments. Send comments to the server. The
                      default is --skip-comments (discard comments), enable
                      with --comments
comments                          FALSE

ぜんぜん知らなかった…。

どうやらコメントが捨てられるのはshellからmysqlコマンドを使ったときだけで

perlとrubyのDBIと、phpのmysql、mysqli、pdoから試したところコメントは表示されてました。

id:kazuhooku++ id:sh2++

2010-01-28

InnoDBでCOUNTしたくないとき

| 22:17 | はてなブックマーク - InnoDBでCOUNTしたくないとき - かみぽのメモ

たとえば、MySQL を使ったお手軽メッセージキュー実装 - ドワンゴ 研究開発ブログに出てくるようなInnoDBをメッセージキューのように使っているときに、キューにどれだけメッセージが溜まってるかを確認したいとき、普通に考えるとCOUNTすると思う。

SELECT COUNT(*) AS count FROM test_queue;

この軽い気持ちでしたCOUNTが、もしうっかりキューに100万レコードぐらいあったりするとInnoDBだとPRIMARYキー総なめとかしちゃってレスポンスにかかる0.1秒ぐらいのあいだ罪悪感に苛まれることでしょう。

このとき冷静に考えると、もしキューが1件も処理されていなければ、idはauto_incrementなので特に細工していなければ

SELECT MAX(id) AS count FROM test_queue;

これも全体のレコード数に等しいでしょう。

キューが既に何件か処理されている場合でも、idが小さいほうから順番に処理されていくので

SELECT MAX(id) - MIN(id) + 1 AS count FROM test_queue;

これでも全体のレコード数に等しくなるはずです。

EXPLAINを見ても

EXPLAIN SELECT MAX(id) - MIN(id) + 1 AS count FROM test_queue\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: NULL
         type: NULL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
        Extra: Select tables optimized away
1 row in set (0.01 sec)

Select tables optimized awayと出てるだけあってレコード数が増えても一瞬でレスポンスが返ってきます。


こういうユースケースは実際ないかもしれないけど、とりあえずメモ。