안녕하세요.
invalid page in block~ 오류 관련해서 문의 드립니다.
현상
- 특정 테이블 조회 시 invalid page in block xxxx of relation base/~ 오류 발생
대응
1) 아래 쿼리 실행 후, 조회되는 pk 와 인덱스에 대해 reindex index 'pk명'/'인덱스명' 진행
SELECT pg_class.relfilenode, pg_namespace.nspname as schema_name, pg_class.relname, pg_class.relkind
FROM pg_class
JOIN pg_namespace on pg_class.relnamespace = pg_namespace.oid
WHERE pg_class.relfilenode = 361204
1)번 진행 후, 정상적으로 진행되는 경우도 있으나 문제되는 내역이 테이블인 경우에는
- 해당 테이블에 존재하는 pk, index 에 대해 reindex index >> 오류 발생
- vacuum full 테이블 >> 오류 발생
위 작업을 진행해도 invalid page in block~ 오류가 계속해서 발생합니다.
2)
테이블에서 발생한 경우에는 SET zero_damaged_pages = on; 설정 후 vacuum full 테이블 진행
하면 다음과 같은 경고메세지가 뜬 후 vacuum 완료되며, 데이터도 조회가 됩니다.
"warinng: invalid page in block 18 of relation base/16395/361204; zeroing out page"
물론.. 데이터 손실이 발생합니다..
질문1.
invalid page in block xxxx~ 오류는 왜 발생하는 건가요?
질문2.
테이블에서 invalid page in block~ 이 발생했을 때, 데이터 손실 없이 복구하는 방법이 있을까요?
질문3.
invalid page in block~ 오류가 처음에는 한두곳에서 발생했는데, 점차 다른 테이블/인덱스 등으로 퍼져?나가는 것 같습니다.
다른 DBMS 같은 경우에는 DB가 깨졌을 경우, unload/reload 작업을 하고 나면 정상적으로 운영이 되는 것 같은데,
PostgreSQL 에서는 어떤 방법으로 대응을 해야하나요?
부가정보)
OS환경: Windows 11 Home
버전: PostgreSQL 14
DBSize: 약 15GB
답변 부탁 드립니다.
감사합니다.
|