酒日記

2002 02 19

Tue, 19 Feb 2002

モルツ (5% × 1000 ml)

日曜からの風邪が抜けきらず。症状は全くたいしたことがなく、ちょっと咳が出て、なんとなく額のあたりが熱っぽくて、頭がぼーっとして、やたらとねむい。 それだけ。寝起きの体温は36℃前後。夜帰宅して測ると36℃台後半。 とくに休むほどでもないから普通に仕事はしてるけど、調子がいまいち。

1,2 年前にもこんな風邪をしたような。37℃弱の微熱がいつまでも続くという症状。 あの時は結局数週間そんな感じで過ごした記憶が。やだなあ。

...

夜、牛スジを煮る。最初は大量のお湯で、ぐらぐら数十分。アクを取る。 長葱の青いところ、生姜、昆布、鰹節などを投入して、蓋をして弱火でことこと数時間。

スジを引き上げて小さく切り分けて、別の鍋で醤油とみりんの濃いめの味つけ。 人参、蓮根、長葱なども加えて、煮込みにする。

残っただしには大根の輪切りを入れて、じっくり弱火で。これはおでんのだしに最高だろうけど、一人おでんはかなりさみしいなあ。
#一人焼肉は何度かやったことがあるが。


出羽桜 純米吟醸 生 (15.5% × 360 ml)

MySQL vs PostgreSQL ベンチマーク対決の続き。 MySQL でトランザクションをサポートする InnoDB を組み込んで ( --with-innodb )、SRPM からリビルドしたもので再実験。 gcc-2.96 でコンパイルしちゃだめよ、とダウンロードページでも警告されている ので、コンパイラには gcc-2.95-3 (/usr/bin/gcc_2_95_3) を使用。

ベンチマークスクリプトは これ。 Perl + DBI + DBD::(mysql | Pg) で計測する。

テーブルは「英辞郎」の、892,200語が入った

CREATE TABLE eijiro (word text, trans text);

このような単純なもの。word カラムにはインデックスを設定。

$ perl bench.pl
mysql(connect 0.03092) MyISAM
'create %'      0.00771 (select:fetch=0.00480:0.00291) 198 rows
'table a%'      0.00830 (select:fetch=0.00800:0.00030) 5 rows
'%text%'        2.75875 (select:fetch=2.75073:0.00802) 612 rows
'%integer%'     2.75166 (select:fetch=2.75120:0.00046) 16 rows

mysql(connect 0.00139) MyISAM (sorted) 
'create %'      0.01085 (select:fetch=0.00798:0.00287) 198 rows
'table a%'      0.00266 (select:fetch=0.00235:0.00031) 5 rows
'%text%'        3.19451 (select:fetch=3.18637:0.00814) 612 rows
'%integer%'     3.17291 (select:fetch=3.17246:0.00045) 16 rows

mysql(connect 0.00139) InnoDB
'create %'      0.01823 (select:fetch=0.01534:0.00289) 198 rows
'table a%'      0.00402 (select:fetch=0.00371:0.00031) 5 rows
'%text%'        8.31590 (select:fetch=8.30760:0.00830) 612 rows
'%integer%'     8.30163 (select:fetch=8.30118:0.00045) 16 rows

mysql(connect 0.00141) InnoDB (sorted) 
'create %'      0.02415 (select:fetch=0.02141:0.00274) 198 rows
'table a%'      0.01066 (select:fetch=0.01036:0.00030) 5 rows
'%text%'        23.06711 (select:fetch=23.05917:0.00794) 612 rows
'%integer%'     23.53014 (select:fetch=23.52968:0.00046) 16 rows

Pg(connect 0.07262) 
'create %'      0.02140 (select:fetch=0.01822:0.00318) 195 rows
'table a%'      0.00200 (select:fetch=0.00170:0.00030) 5 rows
'%text%'        4.02334 (select:fetch=4.01500:0.00834) 573 rows
'%integer%'     4.03201 (select:fetch=4.03154:0.00047) 16 rows

Pg(connect 0.01641)  (sorted) 
'create %'      0.02060 (select:fetch=0.01762:0.00298) 195 rows
'table a%'      0.00220 (select:fetch=0.00190:0.00030) 5 rows
'%text%'        4.03156 (select:fetch=4.02310:0.00846) 573 rows
'%integer%'     4.04510 (select:fetch=4.04463:0.00047) 16 rows

発行された SQL は、

SELECT * FROM eijiro WHERE word LIKE ? [ ORDER BY word ];

? が検索語句。

結果の見方は以下のとおり。

XXXX(connect YYYY)
XXXX のドライバ (mysql=MySQL, Pg=PostgreSQL) で、connect するのに YYYY 秒
'WWWWW' TTTTT (select:fetch=SSSSS:FFFFF) RRR rows
WHERE 句の LIKE の条件が WWWWW 、SELECT して fetch するのに合計 TTTTT 秒。 そのうち、SELECT (execute メソッドが完了するまで) に SSSSS 秒、 fetch (データを配列にコピーするだけ) に FFFFF 秒。 SELECT された行数は RRR 行。
MySQL と PostgreSQL で行数が違うのは、MySQL は大文字小文字を無視してマッチ、PostgreSQL は大文字小文字を区別してマッチ、という仕様のため。
(sorted)
ORDER BY word を指定した場合。

一応、同じベンチマークを数回繰り返したので、例によってデータベース自体はファイルキャッシュに乗っかってる状態。大体の傾向として、

  • connect は MySQL が速い。PostgreSQL は 1クライアント/1サーバプロセス だが、MySQL はスレッドで処理するので、その違いか?
  • インデックスが使われる SELECT では MyISAM > InnoDB =~ PostgreSQL
    90万レコードあっても、実用上問題になるほどの違いはない。
  • インデックスが使われない(ベタサーチ) SELECT では MyISAM > PostgreSQL > InnoDB
  • InnoDB はベタサーチが遅い。更に sort すると劇的に遅い。
  • PostgreSQL はソートしてもしなくても、パフォーマンスに違いがでない < VACUUM 直後だからか?

環境は以下のとおり。


powered by blosxom