[pgsql-jp: 37961] SQL実行中に「Broken pipe」「unexpected EOF」エラー

Yumiko Izumi izumi-yumiko @ scnet.co.jp
2007年 1月 24日 (水) 11:44:53 JST


和泉と申します。業務でPostgreSQLを使っています。

PostgreSQL7.3.8環境でSQL文実行中に以下エラーが出て
きました。(2行セットで)
==============================
pq_flush: send() failed: Broken pipe
pq_recvbuf: unexpected EOF on client connection
==============================

このエラーが出る原因と回避策を教えてください。

以下に詳細情報を載せます。


<作業手順>
(1)HP-UXマシンにPostgreSQL7.3.8をインストール
(2)initdbを実行し、gyomuDBを作成
(3)gyomuDBにTABLEやFUNCTIONを作成するためのSQL文を実行
 psql -d gyomuDB -f 003.sql

<エラー内容>
Dec 19 13:50:32 gyomu01 postgres[807]: [11] LOG:  pq_flush: send() failed: Broken pipe
Dec 19 13:50:33 gyomu01 postgres[807]: [12] LOG:  pq_recvbuf: unexpected EOF on client connection

これらのエラーについて、過去のMLを検索しましたが、設定
やリソースの状態を確認するようにと回答がありました。

こちらでは複数の環境で再現していますが、当時のディスク
使用状況などを取得した結果から、リソースの逼迫が原因で
はないことがわかっています。

また、エラーが出たのはPostgreSQLインストール直後のDB作
成中であり、アクセスが多数あったり、DBサイズが大きくメ
モリが足りなかったりしたとは考えにくい状況です。

ちなみに、上記(3)ではSQL文を記載したファイルを7本連続で
実行しますが、エラーが出たのは、残っていたログから3本目
のファイルに記載された、FUNCTION実行中と思われます。
このFUNCTIONは同じデザインで名称が異なる1000のTABLEを
一括作成するものです。

なお、上記(3)はbashで書かれたスクリプト経由で実行して
いますが、このとき、そのスクリプトがシグナル16(SIGUSR1)
で終了していました。

 # ./gyomuDB_setup.com
 Signal 16

<シグナルについて>
PostgreSQLのソースや各種ドキュメントを見て、"SIGUSR1"シ
グナルに関して以下がわかりました。

・"SIGUSR1"シグナルは、DB障害発生時に復旧するためのトラ
 ンザクションログ作成タイミングを知らせるためのみに使
 用されている
・トランザクション処理は全てバックエンドである子プロセ
 スで実行されているが、トランザクションログが一定量蓄
 積されると、バックエンドからpostmasterに"SIGUSR1"シ
 グナルを送信する事により、postmasterがチェックポイン
 ト処理を実行している
 (実際はさらに子プロセスを生成して実行)

実際には、このシグナルがpostmasterではなくpsqlに送信さ
れ、psqlが停止しているように見えます。

<postgresql.conf>
--------------------------------------------------
#
#	Connection Parameters
#
#tcpip_socket = false
#ssl = false

#max_connections = 32
#superuser_reserved_connections = 2

#port = 5432 
#hostname_lookup = false
#show_source_port = false

#unix_socket_directory = ''
#unix_socket_group = ''
#unix_socket_permissions = 0777	# octal

#virtual_host = ''

#krb_server_keyfile = ''


#
#	Shared Memory Size
#
#shared_buffers = 64		# min max_connections*2 or 16, 8KB each
#max_fsm_relations = 1000	# min 10, fsm is free space map, ~40 bytes
#max_fsm_pages = 10000		# min 1000, fsm is free space map, ~6 bytes
#max_locks_per_transaction = 64	# min 10
#wal_buffers = 8		# min 4, typically 8KB each

shared_buffers = 256
max_fsm_relations = 4000
max_fsm_pages = 131072
max_locks_per_transaction = 512

#
#	Non-shared Memory Sizes
#
#sort_mem = 1024		# min 64, size in KB
#vacuum_mem = 8192		# min 1024, size in KB


#
#	Write-ahead log (WAL)
#
#checkpoint_segments = 3	# in logfile segments, min 1, 16MB each
#checkpoint_timeout = 300	# range 30-3600, in seconds
#
#commit_delay = 0		# range 0-100000, in microseconds
#commit_siblings = 5		# range 1-1000
#
#fsync = true
#wal_sync_method = fsync	# the default varies across platforms:
#				# fsync, fdatasync, open_sync, or open_datasync
#wal_debug = 0			# range 0-16


#
#	Optimizer Parameters
#
#enable_seqscan = true
#enable_indexscan = true
#enable_tidscan = true
#enable_sort = true
#enable_nestloop = true
#enable_mergejoin = true
#enable_hashjoin = true

#effective_cache_size = 1000	# typically 8KB each
#random_page_cost = 4		# units are one sequential page fetch cost
#cpu_tuple_cost = 0.01		# (same)
#cpu_index_tuple_cost = 0.001	# (same)
#cpu_operator_cost = 0.0025	# (same)

#default_statistics_target = 10	# range 1-1000

#
#	GEQO Optimizer Parameters
#
#geqo = true
#geqo_selection_bias = 2.0	# range 1.5-2.0
#geqo_threshold = 11
#geqo_pool_size = 0		# default based on tables in statement, 
				# range 128-1024
#geqo_effort = 1
#geqo_generations = 0
#geqo_random_seed = -1		# auto-compute seed


#
#	Message display
#
#server_min_messages = notice	# Values, in order of decreasing detail:
				#   debug5, debug4, debug3, debug2, debug1,
				#   info, notice, warning, error, log, fatal,
				#   panic
#client_min_messages = notice	# Values, in order of decreasing detail:
				#   debug5, debug4, debug3, debug2, debug1,
				#   log, info, notice, warning, error
#silent_mode = false

#log_connections = false
#log_pid = false
#log_statement = false
#log_duration = false
#log_timestamp = false

#log_min_error_statement = panic # Values in order of increasing severity:
				 #   debug5, debug4, debug3, debug2, debug1,
				 #   info, notice, warning, error, panic(off)

#debug_print_parse = false
#debug_print_rewritten = false
#debug_print_plan = false
#debug_pretty_print = false

#explain_pretty_print = true

# requires USE_ASSERT_CHECKING
#debug_assertions = true


#
#	Syslog
#
#syslog = 0			# range 0-2
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'


#
#	Statistics
#
#show_parser_stats = false
#show_planner_stats = false
#show_executor_stats = false
#show_statement_stats = false

# requires BTREE_BUILD_STATS
#show_btree_build_stats = false


#
#	Access statistics collection
#
#stats_start_collector = true
#stats_reset_on_server_start = true
#stats_command_string = false
#stats_row_level = false
#stats_block_level = false


#
#	Lock Tracing
#
#trace_notify = false

# requires LOCK_DEBUG
#trace_locks = false
#trace_userlocks = false
#trace_lwlocks = false
#debug_deadlocks = false
#trace_lock_oidmin = 16384
#trace_lock_table = 0


#
#	Misc
#
#autocommit = true
#dynamic_library_path = '$libdir'
#search_path = '$user,public'
#datestyle = 'iso, us'
#timezone = unknown		# actually, defaults to TZ environment setting
#australian_timezones = false
#client_encoding = sql_ascii	# actually, defaults to database encoding
#authentication_timeout = 60	# 1-600, in seconds
#deadlock_timeout = 1000	# in milliseconds
#default_transaction_isolation = 'read committed'
#max_expr_depth = 10000		# min 10
#max_files_per_process = 1000	# min 25
#password_encryption = true
#sql_inheritance = true
#transform_null_equals = false
#statement_timeout = 0		# 0 is disabled, in milliseconds
#db_user_namespace = false
 
deadlock_timeout = 10000
--------------------------------------------------


以上よろしくお願いします。





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