こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

phpからpostgresにSQLを投げるとエラー

お世話になります。

phpで作成したある機能から、postgresに対してupdate文を投げると以下のようなエラーが返ります。

server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

update文は非常に簡単なものです。
UPDATE [table_name] SET column1 = 'value1', column2 = 'value2', upd_date = 'yyyy-mm-dd hh:mm:ss' WHERE column_key = 'key'

このエラーがでると、該当機能で発行するそれ以降のクエリは全て同様のエラーで失敗しますが、DBが落ちるなどの現象はありません。
他の機能から別トランザクションでアクセスした場合は、正常にアクセスできます。

システムログを確認したところ、同時間帯に以下のようなエラーがでました。
kernel: postmaster[11273]: segfault at 0000002a9e866000 rip 000000000057e4c8 rsp 0000007fbfffccb0 error 6

しかし、このエラーは毎回でるわけではなく、成功する場合もあります。

vacuumdb -U postgres [db_name] -t [table_name] -z
を行うとそのエラーは出なくなります。※table_nameは同一。
ただ、バキューム後、2~3時間たつとまた同じ個所で同様のエラーがでます。

該当の機能は1時間に1回動作する機能なのですが、DBの負荷を考えると1時間に1回バキュームをかけるのも忍びないです。
現在は、深夜、朝、夕の計3回バキュームをかけています。
※一応、実運用レベルではなんとかごまかしている状態です。

データセンターに問い合わせたところ、とくにディスク障害等は出ていないようです。
(どのような調査をおこなって、障害なしと判断しているかまでは、ちょっとわかりません。)
セグメンテーション違反とでているので、ハードはあまり関係ないような気がしますし。

ここ、1週間くらいからいきなり出だしたエラーで困っております。
よろしくお願いいたします。

PHP Version 4.3.9
PostgreSQL 7.4.29
CentOS release 4.8 (Final)

投稿日時 - 2011-12-21 17:47:53

QNo.7202221

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

OSもPostgreSQL、PHPもバージョンが古すぎる気がします。
「セグメンテーション違反」は基本的にアクセスしてはいけないメモリ領域にアクセスしたということです。メモリ不足を起こしているような可能性もありますし、潜在的なバグの可能性もあります。
もう少し、何年前から稼動しているシステムなのかとか、メモリ・CPUなどのハード要件も含めて補足してください。

投稿日時 - 2011-12-27 16:28:45

補足

システムは10年くらい前から稼働しているとのことです。詳しくはわかりません。
システム自体の機能拡張などはその間ずっと続けています。
サーバは、何度か移行しています。

メモリ、CPUは以下です。
cpu:Intel(R) Core(TM)2 Quad CPU Q9000 @ 2.00GHz
mem:4GB

とりあえず、現状、postgresの詳細ログを出すために、confを書き換え、postgresを再起動したところ、現象が発生しなくなりました。
postgres側のメモリ使用がおかしくなったのではないかと。
根本的な解決にはなっていませんが、一端様子をみることになりました。

投稿日時 - 2011-12-28 14:49:27

あなたにオススメの質問