[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 メーリングリストの案内