2010-07-13
Muninのグラフを動的生成にする
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をバイナリパッケージからインストール
今日はDeNA Technology Seminar #2ですが、皆さんSpiderの予習復習は大丈夫でしょうか。
Spiderのチュートリアルといえば@nippondanjiさんのエントリーを見るのが一番だと思いますが、ちょっと試してみたいときに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
インストールできたらもうここには用はないので@nippondanjiさんのブログを見ればいいと思います!
それでは、エンジョイ!
お帰りはコチラ
2010-06-15
phpの論理演算子と三項演算子
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に表示されないときの対処法
mysql | |
人力検索twitterで聞いたらすぐ解決しました。
SELECT /*!99999 helllo world */ ... というBKがありますぉ RT @kamipo: mysqlでクエリにコメント書いても show full processlist 見るとパースされて消え去ってて無念だ…。 #mysql
2010-05-26 15:39:06 via web
JDBCではコメント残ってますよ。mysqlコマンドの場合は--commentsオプションを調べてみてください RT @kamipo: mysqlでクエリにコメント書いても show full processlist 見るとパースされて消え去ってて無念だ…。
# 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したくないとき
mysql | |
たとえば、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と出てるだけあってレコード数が増えても一瞬でレスポンスが返ってきます。
こういうユースケースは実際ないかもしれないけど、とりあえずメモ。