[pgsql-jp: 33439] select文でセグメンテーション違反

Hitoshi Taniguchi taniguchi @ chihaya-t3.co.jp
2004年 6月 30日 (水) 22:37:37 JST


初めて投稿します。谷口と申します。

大規模データの分析用にpostgresqlを使用しています。
1Gバイトのデータまでは、正常に処理できたのですが、
約5Gバイトのデータ(レコードサイズ約100バイト)でセグメンテーション違反が
発生し、処理ができなくて困っています。

プログラム上からでもpsqlからでも同様に発生します。
発生状況は、以下の通りです。
----------------------------------------------------------
SELECT * FROM table_name ORDER BY key1,key2,key3,key4;
server sent data ("D" message) without prior row description ("T" message)
server sent data ("D" message) without prior row description ("T" message)
・・・延々と続きます
セグメンテーション違反です

     以上の様にして終了します。SELECTの実行から約30分後です。
----------------------------------------------------------
共有メモリの問題であろうと考え、postgresql.confの以下の部分を変更していま
す。
 max_connections = 4
 shared_buffers = 65536
 max_fsm_relations = 200
 max_fsm_pages = 13107200
 max_locks_per_transaction = 16
 sort_mem = 31457280
 vacuum_mem = 31457280
 effective_chashe_size = 65536

カーネルの共有メモリも変更しており、/sbin/sysctlで確認しています。
kernel.shmmni = 4096
kernel.shmall = 2147483648
kernel.shmmax = 2147483648

ipcs -m -l で確認すると以下となっています。
---シェアードメモリの制限---
セグメント数の最大値 = 4096
セグメントサイズの最大(単位:KB) = 2097152
max total shared memory (kbytes) = 0    <= なぜ0なのか不明だが、ここだけ英
語表示?
最小セグメントサイズ(単位:KB) = 1

使用しているシステムは、以下で1台のマシンで使用しています。
CPU: Xeon MP * 2CPU
メモリ: 8GB
OS: Red Hat Enterprise Linux ES Version 3
PostgreSQL:Version 7.3.6

----------------------------------------------------------
/var/log/messagesには、以下のような記録があります。
LOG: pq_flush: send() failed: Connection reset by peer
LOG: pq_flush: send() failed: Broken pipe
LOG: pq_recvbuf: unexpected EOF on client connection

----------------------------------------------------------
LinuxもPostgreSQLも初心者です。調査できたのは以上の点だけです。
対処法をお教え頂けますと助かります。







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