[pgsql-jp: 30732] UPDATE文をきっかけにサーバの子プロセスが全てダウン

Noriyuki TAKEI noriyuki.takei @ jalinfotec.co.jp
2003年 8月 8日 (金) 22:44:00 JST


武井です。

 PHPからクエリを発行する際に以下のような現象が出てしまいます。
解決方法をご教示いただけたら幸いです。

■環境
OS:RedHat Linux 8.0
Web Server:Apache 1.3.27
Web Application:PHP 4.3.2
DB:PostgreSQL 7.3.3

■現象
PHPからUPDATE文が発行されたのをきっかけにPostgreSQLの
子プロセスが全て死んでしまいます。親プロセスは生きていますので
再び接続に行くと正常に行きます。

ログを見た限りで権限の問題でトランザクションログをオープンできないと
ありますが、確認したら権限は問題ありませんでした。

このエラーは必ず一定時間(半日程度)動かすと発生します。その間
C言語のアプリケーションが定期的にUPDATE文をたたいています。
しかしこのエラーが発生するきっかけはPHPからのUPDATE文発行時のみです。
C言語のアプリケーションからのUPDATE文では発生しません。

■その他に発生している現象
その他に発生している現象としてメモリの使用量が徐々に増えてしまっています。
メモリは1G積んでおり、起動時は200Mほど使用しています。半日ほど経過すると
空きメモリ容量がなくなってしまい、スワップを使用する形となってしまいます。

■ソース及びログ
UPDATE文を発行するところのPHPのソースは以下のとおりです。

// ● データベースへ接続
if( !($con = pg_pconnect("host=$HOST port=$PORT dbname=$DBNAME user=$USERNAME password=$PASSWORD")) ) {
    trigger_error($SYS_ERR_MSG["db_open"],E_USER_ERROR);
}


// ● 役員の出退ステータスを変更するSQL文を生成
$sql  = "update yakuin_info set shuttai_status = '0'";
$sql .= " where window_id = '3'";

// ● クエリーの実行
if ( !($rs = pg_exec($con,$sql)) ) {
    trigger_error($SYS_ERR_MSG["query_exe"],E_USER_ERROR);
}

// ● 役員の出退ステータスを変更するSQL文を生成
$sql  = "update yakuin_info set shuttai_status = '1'";
$sql .= " where window_id = '3'";

// ● クエリーの実行
if ( !($rs = pg_exec($con,$sql)) ) {
    trigger_error($SYS_ERR_MSG["query_exe"],E_USER_ERROR);
}


// ● データベースのクローズ
if ( !pg_close($con) ) {
    trigger_error($SYS_ERR_MSG["db_close"],E_USER_ERROR);
}



そのときのログを下記に記します。

・PHPのログ(改行してありますが実際は一行です)
PHP Warning:  pg_exec(): Query failed: PANIC:  open of
/usr/local/pgsql/data/pg_xlog/0000000000000006 (log file 0, segment 6)
failed: 許可がありません server closed the connection unexpectedly^IThis
probably means the server terminated abnormally ^Ibeforeor while
processing the request. . in
/home/shuttai/www/pub/intra/shuttai_update.php on line 80

上記のshuttai_update.phpの80行目が、ソースで記載したupdate文を
発行している行です。

・PostgreSQLのログ
PANIC:  open of /usr/local/pgsql/data/pg_xlog/0000000000000006
(log file 0, segment 6) failed: 許可がありません

Message from PostgreSQL backend:
The Postmaster has informed me that some other backend
died abnormally and possibly corrupted shared memory.
I have rolled back the current transaction and am
going to terminate your database system connection and exit.
Please reconnect to the database system and repeat your query.



-- 
Noriyuki Takei <noriyuki.takei @ jalinfotec.co.jp>




pgsql-jp メーリングリストの案内