2008年11月18日

Let's Postgres

 日本PostgreSQLユーザ会が中心となって、PostgreSQLを広く啓蒙するポータルサイト「Let's Postgres」が公開されました。

 実は、委員会の説明会には参加したのですが、とりあえずウチから一人でてればよいかと言うことで、オヤジを送り込んでおきました。がんばってくらさいー。というわけで、読み物的なナイスなサイトに仕上がっていますので、PostgreSQLのみならずRDBMSに興味がある方は是非ご覧下さい。

Let's Postgres

投稿者 ymkx : 2008年11月18日 | コメント (0) | トラックバック

2008年9月 7日

テストテストテスト

vacuumdb -a

ってやったらなんか変化があるかテスト。

結論、あんまり変化無し。

このブログを動かしてるMTについてはエントリが8000を越えているからかもしれないけど、サーバ移転しても重さは相変わらず。なんちゅーか、どんだけ速いサーバにしたらええねん、ってかんじ?

なんで、日曜日にこんなことしてるんだ? おれ。

投稿者 ymkx : 2008年9月 7日 | コメント (0) | トラックバック

2008年7月23日

やっぱ、114 of 114 tests failed, 1 of these failures ignored.

 例のデータベースのバージョンアップ作業が終わりました。

114 of 114 tests failed, 1 of these failures ignored.
All 114 tests passed.

こんな話しがあったので、身構えてコンパイルしてみたわけですが、postmasterを止めても

114 of 114 tests failed, 1 of these failures ignored.

は変わらず、、、。一瞬思案しましたが、とりあえずインストールをしてしまえ! というわけで、あっさりインストール完了。PostgreSQLの8.2から8.3へのバージョンアップと言うこともあり、若干PHP側で修正が必要となりましたが、結局DB周りでのトラブルは一切発生しませんでした、ぷへー。結局、何が原因だったのかわからずじまい、、、。

投稿者 ymkx : 2008年7月23日 | コメント (0) | トラックバック

All 114 tests passed.

 先ほどの 114 of 114 tests failed, 1 of these failures ignored. の件ですが、postgresユーザじゃなくって自分のアカウントでコンパイルして make check してみたら、

=======================
All 114 tests passed.
=======================

わーい! やったー! っていうか、これって、なんか今Postmasterが起動してるから、とか系? 試しに、自分のホームディレクトリでpostgresアカウントで make check してみると

=======================================================
114 of 114 tests failed, 1 of these failures ignored.
=======================================================

だぁね。たぶん、postgresユーザでやってることが問題なんじゃないのかなぁ。ロックがかかってて、正常にテストが出来ていないとか。そんな感じー、と推測。午後の本番では当然PostgreSQLを止めるので、それで色々判明するでしょう、そうでしょう。

投稿者 ymkx : 2008年7月23日 | コメント (0) | トラックバック

114 of 114 tests failed, 1 of these failures ignored.

 PostgreSQLのバージョンアップ(8.3.3)のための、事前にコンパイルをしてみた。コンパイルは何のエラーもなく終了。しかし、いつもはやっていない make check を行ってみると事態は急変。なんだか、穏やかじゃないメッセージが、、、

============== running regression test queries ==============
parallel group (17 tests): boolean char name varchar text int2 int8 int4 float8 float4 bit numeric txid oid money uuid enum
boolean ... FAILED
char ... FAILED
name ... FAILED
varchar ... FAILED
text ... FAILED
int2 ... FAILED
int4 ... FAILED
int8 ... FAILED
oid ... FAILED
float4 ... FAILED
float8 ... FAILED
bit ... FAILED
numeric ... FAILED
txid ... FAILED
uuid ... FAILED
enum ... FAILED
money ... FAILED
test strings ... FAILED
test numerology ... FAILED
parallel group (18 tests): point lseg box path polygon date timetz timestamptz time timestamp interval tinterval inet tstypes reltime comments circle abstime
point ... FAILED
lseg ... FAILED
box ... FAILED
path ... FAILED
polygon ... FAILED
circle ... FAILED
date ... FAILED
time ... FAILED
timetz ... FAILED
timestamp ... FAILED
timestamptz ... FAILED
interval ... FAILED
abstime ... FAILED
reltime ... FAILED
tinterval ... FAILED
inet ... FAILED
tstypes ... FAILED
comments ... FAILED
parallel group (5 tests): geometry horology oidjoins type_sanity opr_sanity
geometry ... FAILED
horology ... FAILED
oidjoins ... FAILED
type_sanity ... FAILED
opr_sanity ... FAILED
test insert ... FAILED
test create_function_1 ... FAILED
test create_type ... FAILED
test create_table ... FAILED
test create_function_2 ... FAILED
parallel group (2 tests): copy copyselect
copy ... FAILED
copyselect ... FAILED
parallel group (8 tests): constraints triggers create_operator create_misc create_aggregate inherit drop_if_exists vacuum
constraints ... FAILED
triggers ... FAILED
create_misc ... FAILED
create_aggregate ... FAILED
create_operator ... FAILED
inherit ... FAILED
vacuum ... FAILED
drop_if_exists ... FAILED
parallel group (2 tests): create_index create_view
create_index ... FAILED
create_view ... FAILED
test sanity_check ... FAILED
test errors ... FAILED
test select ... FAILED
parallel group (20 tests): select_into select_distinct select_distinct_on subselect join select_implicit aggregates select_having case union portals hash_index btree_index arrays transactions namespace random delete prepared_xacts update
select_into ... FAILED
select_distinct ... FAILED
select_distinct_on ... FAILED
select_implicit ... FAILED
select_having ... FAILED
subselect ... FAILED
union ... FAILED
case ... FAILED
join ... FAILED
aggregates ... FAILED
transactions ... FAILED
random ... failed (ignored)
portals ... FAILED
arrays ... FAILED
btree_index ... FAILED
hash_index ... FAILED
update ... FAILED
namespace ... FAILED
prepared_xacts ... FAILED
delete ... FAILED
test privileges ... FAILED
test misc ... FAILED
parallel group (10 tests): select_views foreign_key portals_p2 rules cluster guc dependency combocid tsearch tsdicts
select_views ... FAILED
portals_p2 ... FAILED
rules ... FAILED
foreign_key ... FAILED
cluster ... FAILED
dependency ... FAILED
guc ... FAILED
combocid ... FAILED
tsearch ... FAILED
tsdicts ... FAILED
parallel group (18 tests): plancache limit copy2 temp without_oid plpgsql truncate rangefuncs conversion alter_table prepare domain polymorphism rowtypes largeobject sequence returning xml
plancache ... FAILED
limit ... FAILED
plpgsql ... FAILED
copy2 ... FAILED
temp ... FAILED
domain ... FAILED
rangefuncs ... FAILED
prepare ... FAILED
without_oid ... FAILED
conversion ... FAILED
truncate ... FAILED
alter_table ... FAILED
sequence ... FAILED
polymorphism ... FAILED
rowtypes ... FAILED
returning ... FAILED
largeobject ... FAILED
xml ... FAILED
test stats ... FAILED
test tablespace ... FAILED
============== shutting down postmaster ==============
server stopped

=======================================================
114 of 114 tests failed, 1 of these failures ignored.
=======================================================

どうよ、100%だよ、100%、、、。で、試しに現行のバージョンで make check してみると、

=======================
All 103 tests passed.
=======================

んー、まいったねー。まー、案外フツーにインストールできちゃうもんだけど、やっぱ、落ち着かないなぁ。

 で、試しに他のサーバでもやってみました。同じハード構成、同じOSのサーバと、全然違うハードでOSもクローンの奴。で、結果。

同一ハード、OS

=======================
All 114 tests passed.
=======================

別ハード、クローンOS

=======================
All 114 tests passed.
=======================

おーい! どうなってるのん? なんだんこれは? んー、なんか不安になってきたぞ、さらに別の奴で実験。

別ハード、クローンOS

=======================
All 114 tests passed.
=======================

、、、やばいのかなぁ、やっぱ。意地になって、別バージョンでコンパイル、 make check してみる。

8.3.1

=======================================================
114 of 114 tests failed, 1 of these failures ignored.
=======================================================

がーん!

8.2.9

=======================
All 103 tests passed.
=======================

およ?

8.3.0

=======================================================
114 of 114 tests failed, 1 of these failures ignored.
=======================================================

がびょーん。なんか、おれ根本的に間違ってるのかなぁ? なんか8.3から変わったことがあるのかなぁ? うーん、謎だー。

投稿者 ymkx : 2008年7月23日 | コメント (0) | トラックバック

2008年6月16日

pid file found but it seems bogus. Trying to start pgpool anyway...

 ブログラのロギング用DBサーバの様子がおかしいので、ちょびっとコンフィグをいじって再起動したらpgpoolが起動しない、、。で、ログを見てみるとこんなメッセージが、、、。

pid file found but it seems bogus. Trying to start pgpool anyway...

まー、文字そのものなんだけど、そもそもpgpoolのpidファイルは設定されている(デフォルト)/tmpにいないんだよね、、、。pid file foundじゃないじゃんか。bogusってわかってるんだったら無視して起動させて欲しいところだけど、とりあえずpid file foundって言ってる瞬間からやなかんじー。ちなみに、手動でpgpoolを起動させたら大丈夫だった。別にinitdで書いてることと同じなんだけどなぁ、コマンド的には。

 で、なんだか納得いかない感じだったのでソースを覗いてみた。あ、バージョンはpgpool-3.41、pgpool-II使えよなぁ。お、main.cにあるぜ。

/*
* else if no non-switch argument remains, then it should be a start request
*/
else if (optind == argc)
{
pid = read_pid_file();
if (pid > 0)
{
if (kill(pid, 0) == 0)
{
fprintf(stderr, "pid file found. is another pgpool(%d) is running?\n", pid);
exit(1);
}
else
fprintf(stderr, "pid file found but it seems bogus. Trying to start pgpool anyway...\n");
}
}

んー、pidがセットされててそいつにkillのエラーチェックを送ってみて返値が0じゃない場合に表示されるのねん。そりゃそうだよ、だって、そのpidは死んでるもんすでに。というわけで、なんでpidがセットされちゃってるかだよなぁ。というわけで、read_pid_fileを拝見。

/*
* read the pid file
*/
static int read_pid_file(void)
{
FILE *fd;
char path[POOLMAXPATHLEN];
char pidbuf[128];

snprintf(path, sizeof(path), "%s/%s", pool_config.logdir, PID_FILE_NAME);
fd = fopen(path, "r");
if (!fd)
{
return -1;
}
if (fread(pidbuf, 1, sizeof(pidbuf), fd) <= 0)
{
pool_error("could not read pid file as %s. reason: %s",
path, strerror(errno));
fclose(fd);
return -1;
}
fclose(fd);
return(atoi(pidbuf));
}

むー、これを見ている限り、-1とか異常な値じゃ無くって何らかの数値が返ってきてるんだよなー、たびん。

fread(pidbuf, 1, sizeof(pidbuf), fd)

が読めてるんだもんな、、、。んー、謎は深まるばかり深追いしたいけど、そんな暇ネェや。

投稿者 ymkx : 2008年6月16日 | コメント (0) | トラックバック

2008年6月 6日

PostgreSQL Conference 2008

 今日はPostgreSQL Conference 2008の日でした、そうでした。会場が泉ガーデンとかすげーバブリッチな建物でPostgreSQLとはミスマッチングな感じ。午前中は色々あるので、午後からの参加予定、んーもむじゃんの話が聞きたかった。

12:40-13:30 pgpool-IIの今と今後の展望
この前もビッグサイトでかるーく聞いたけど、50minもあればもっと突っ込んだ話まで聞けそう。ブログラは未だにpgpoolをつかってます、、、敢えてIIはつかっていない

13:40-14:30 Heartbeat+DRBD+PostgreSQL構成の本番運用への適用 ? SaaS 型の輸配送管理サービス「ASPITS」の紹介
「PostgreSQLの全文検索」もすげー気になるけど、私のポジション的にはこっちかな。システム自体にも結構興味あるけど、やっぱHeartbeat+DRBD+PostgreSQLって組み合わせに興味津々。DRBDは不勉強なので勉強させて下さい、ええ

14:40-15:30 PostGIS 活用例と最新事情
「PostgreSQL を空間データベースへと拡張する PostGIS について、、、」、んー空間データベースってなんですか? これまた興味津々

15:40-16:30 PGCluster最新情報
pgpool-IIとの差異を知るべく。PostgreSQL本体に手を入れなきゃならんのが、心理的障壁。公式サイトの更新は止まっちゃってるけど、1.9でPostgreSQL8.3にも対応してるのねん

16:40-17:30 JPUG 2008年度 会員総会
何やるんだろ? 一応、賛助会員として、どんな活動でどんな風にお金がかかってるのか知っておきたい

18:00-19:30 懇親会 & クロージング
どこでやるんだろ?? ここって禁酒なんだよね確か

ちょっと仕事の案配次第では行くのが遅れるかも、、、あああpgpool-IIの話しだけは何とか聞かねば。ちなみに、この後20:00からは新宿御苑辺りでエンジニアリング的な集まりが催される模様。

投稿者 ymkx : 2008年6月 6日 | コメント (2) | トラックバック

2008年5月20日

work_mem

 ブログラの管理画面でブログを検索するときのプログラムが異常に遅いのです。そう、単純にブログ一覧からブログを検索するだけなのに、1分45秒くらいかかっちゃってる。昔から、余り速くは無かったんだけど、流石にかかりすぎだなぁと思ってとりあえずメモリを追加してみました。

 今まで1GBだったのを4倍の4GBにしてみました。これで速くなるだろー、と思ってましたけど全然速くならねぇ~。って、当然当然。PostgreSQLのチューニングって言うか調整を全くしてないからねぇ。というわけで、postgresql.confをいじってみました。

 まずはshared_buffersを32MB→128MBへ。んー、なんか全然いまいち。で、work_memを1MB→2MB、ヲヲー!激ハヤッ! 95secだったのが15secまで速くなりました、そうですかそうでしたか-。で、順番が真逆ですがマニュアルで色々確認。


17.4. 資源の消費
17.4.1. メモリ
work_mem(integer)
一時ディスクファイルに切替える前に、内部並べ替えとハッシュテーブル操作が使用するメモリ容量を指定します。値はキロバイト単位で、デフォルトは1024キロバイト(1メガバイト)です。複雑な問い合わせの場合、いくつかの並び替えもしくはハッシュ操作が並行して実行されることに注意してください。それぞれは、データを一時メモリに置く以前にこの値が指定したと同じ大きさのメモリ使用が認められます。さらに、いくつかの実行中のセッションはこれらの動作を同時に行います。したがって、使用されるメモリの合計は、work_memの数倍になります。値を選択する時には、この事実に留意することが必要です。並び替え操作はORDER BY、DISTINCT、およびマージ結合に対して使われます。ハッシュテーブルはハッシュ結合、ハッシュに基づいた集約、およびIN副問い合わせのハッシュに基づいた処理で使用されます。

了解了解、当然と言えば当然だよなぁ。「あるタイミングから激遅になった」ってのは、work_memを越える大きさになったんだろうね対象が。ちなみにですが、work_memを2MBから大きくしても検索性能に変化は現れませんでした。ってのも、ある意味当然。

 って、ホントはエンジニアに「ログを出せや!」って言われていたんだけど、先に試してみちゃった、ごめんちょ。ただ、テーブルの大きさからしてこんな単純な話しで15secかかってるのはあり得ないので、適切なindexをはってもらおう、あ、ログ出すようにしまぷ。

投稿者 ymkx : 2008年5月20日 | コメント (0) | トラックバック

2008年2月 5日

PostgreSQL 8.3

 ついにリリースです、PostgreSQL 8.3。すでに、ユーザ会のWebにも表示されていますね。本当はRCの段階で投入したかったけど、いろいろ忙しくて後回しになってしまいました。個人的にはバージョン番号が x.x.0 のアプリは正式導入しない性質ですが、今回ばかりは数日様子を見て実サービスに投入したいと思います。

投稿者 ymkx : 2008年2月 5日 | コメント (0) | トラックバック