CPAN Authorになった (Pgtoolsリリースした)
Pgtoolsというツールを作りました。
遡ること去年の夏休み、、、
はてなインターンでの課題の一部として、PostgreSQL版のPercona toolkitがあると便利!というのが始まりだった気がする。
Percona toolkitというのは海外のMySQLコンサル会社が公開している、MySQL運用のためのコマンドラインツール。
pt-xxxという便利コマンド郡で、tcpdumpやログファイルから実行されているクエリのプロファイラ結果をまとめてくれたり、オンラインでスキーマを変更してくれるツールなど、とにかくいろいろある。
これを参考に以下のコマンドを作った。
- pg_config_diff
- PGサーバを2つ以上指定して、そのサーバ間で設定の異なる部分を指摘してくれる
$ pg_config_diff "192.168.33.21,5432,postgres,," "192.168.33.22,,,," "192.168.33.23,5432,postgres,,dvdrental" <Setting Name> 192.168.33.21 192.168.33.22 192.168.33.23 -------------------------------------------------------------------------------------------- max_connections 50 100 100 shared_buffers 32768 16384 65536 tcp_keepalives_idle 8000 7200 10000 tcp_keepalives_interval 75 75 10 wal_buffers 1024 512 2048
.
- pg_kill
$ pg_kill -kill -print -mq "likes'%.*%'" "192.168.32.12,5432,postgres,,dvdrental" ------------------------------- Killed-pid: 11590 At : 2016/03/21 01:32:29 Query : SELECT * FROM actor WHERE last_name like '%a%'; Killed matched queries!
このクエリは特に危険で、他のコマンドもそうだが、このコマンドによって何らかの障害が起きても責任は取りません。と言ったシロモノである。。。
ただ正規表現で実行中のクエリを検索できるのは便利だと思っていて、-mq (match query)オプションで表示できた時は楽しかった。
- pg_fingerprint
- クエリのうち数値の部分をプレースホルダ化してくれる
$ pg_fingerprint queries_file SELECT * FROM user WHERE id = ?; SELECT * FROM user2 WHERE id = ? LIMIT ?; SELECT * FROM user2 WHERE point = ?; SELECT * FROM user2 WHERE expression IS ?;
このブログを書いていて、
そういえばpt-query-digest相当のコマンドを作ろうと当時は息巻いていたんだった
と思い出したので、もう一度できるか検討しようと思います。
pg-fingerprintでSQLの構文解析をしようと挑戦したものの、BNFのSQL版のようなアレが異常に長くて、SELECT文だけにしても心が折れたので、どうなることやら、、、
ひとまず初めてCPANに"Ship it!"できて非常に満足しています。
DBをガッツリ扱うコマンドラインツールとしてはテストが不十分だと思うので、ちょこちょこ改善しなければ(機能追加もな!)
今回はMinillaを使ってモジュールの構築からリリースまでしました。
README.mdがうまく整形できなかったり(今も)、CPANにUNAUTHORIZED RELEASEの烙印を押されたり、いろいろしたので、そのあたりの知見も理解が深まったら書くつもりです。
owari ⊂゚U┬───┬~