python の練習の続き。
やっている仕事の関係上、python から RDBMS、特に MySQL を触る必要があることが多い(多かった...?)のだが、練習がてら、まずは素直に python-mysqldb を使い、pgbench のMySQL移植の mysqlbench を、さらに python に移植してみた。
なお、mysqlbench のオリジナルは PostgreSQLの石井さんが作った TPC-Bライクなスタンドアロン型のベンチマークツール pgbench であることは言うまでもない。
現状版がこれ↓
で、移植元は、お名前がわからないのが残念なのだが日本の MySQL ユーザ会の有志の方が作成されたこれ↓である。
まず、移植元の mysqlbench の実行結果がこんな感じなのに対して、
(微妙にエラーが出ているのは愛嬌)
$ ~/mysqlbench-0.1/mysqlbench -U username -P password -h 192.168.1.1 -c 10 -t 1000 pgbench
starting vacuum...OPTIMIZE TABLE tellers: Commands out of sync; you can't run this command now
DELETE FROM history: Commands out of sync; you can't run this command now
OPTIMIZE TABLE history: Commands out of sync; you can't run this command now
end.
all connection OK
go
end.
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 1000
number of transactions actually processed : 10000/10000
tps (include connections establishing) . : 264.557585
tps (exclude connections establishing) . : 264.608737
今回の python 移植版はこんな感じになる。
$ python python-mysqlbench.py -U username -P password -h 192.168.1.1 -c 10 -t 1000 -D pgbench
all threads completed
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 1000
number of transactions actually processed : 10000/10000
tps (include connections establishing) . : 270.410621
tps (exclude connections establishing) . : 270.462350
だいたい誤差くらいの範囲で同じ値が出るようになったようだ。
まだエラー処理が足りない(特に SQL 発行部分をちゃんと try ~ exception にしていない部分があるの)と、コマンドラインシンタックスが微妙に違う(dbname の指定方法とか...)とか、いろいろあるのだが、それはまあぼちぼちということで。(そういうわけで、まだβ版です...)
なお、また「pep8 でエラーがでるじゃねえか」とワカモノから怒られるような気がするのだが、以下の通り移植元のURLを記載した行と、大元の石井さんのPostgreSQL用のC実装のファイルヘッダに含まれる $Id$ 行がひっかかる。
$ pep8 python-mysqlbench.py
python-mysqlbench.py:9:80: E501 line too long (112 characters)
python-mysqlbench.py:24:80: E501 line too long (86 characters)
まあ、これはしかたないよねぇ...ということで。
No comments:
Post a Comment