[pgsql-jp: 41742] insert 時に could not read block

TERAOKA Yoshinori y-teraoka @ m3.com
2014年 11月 5日 (水) 13:05:13 JST


寺岡と申します。

PostgreSQL 9.3 で pg_class が次のようなテーブルに行を追加しようと insert を発行したところ

ERROR:  could not read block 6755 in file "base/80518/99289": read only 0 of 8192 bytes

というエラーで insert に失敗しました。(src/backend/storage/smgr/md.c の mdread() の中)
delete & insert する batch 処理で2回実行して2度ともエラーとなりました。
block の数は1づつ増えました。

relname        | ***
relnamespace   | 80527
reltype        | 99291
reloftype      | 0
relowner       | 80519
relam          | 0
relfilenode    | 99289
reltablespace  | 0
relpages       | 6753
reltuples      | 438945
relallvisible  | 6753
reltoastrelid  | 0
reltoastidxid  | 0
relhasindex    | t
relisshared    | f
relpersistence | p
relkind        | r
relnatts       | 10
relchecks      | 0
relhasoids     | f
relhaspkey     | t
relhasrules    | f
relhastriggers | f
relhassubclass | f
relispopulated | t
relfrozenxid   | 17832108
relminmxid     | 14342
relacl         | {***}
reloptions     |

relpages を超える block を読もうとしているのかなということで、
どこかで不整合が起きているのかもしれないと vacuum full してみた
ところ insert 可能となりました。

当該テーブルのデータは消えても、ロックがかかっても問題ないという
ものだったため、なんとかなりましたが、こういった事象に対して
何か情報をお持ちの方はいらっしゃいますでしょうか。

replication から昇格したインスタンスですが、このテーブルは batch 的に
delete & insert が行われるだけのもので、昇格時周辺での更新はありません。

OS: Oracle Linux Server release 6.5
Kernel: 2.6.39-400.212.1.el6uek.x86_64
PostgreSQL: PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red
Hat 4.4.7-4), 64-bit
Data page checksum version: 1


-- 
寺岡


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