database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10517 게시물 읽기
No. 10517
WAL 공부중인데 이게 정상인 상황인지 궁금합니다
작성자
박선웅
작성일
2025-02-26 16:02
조회수
125

DB 크래시 이후에 WAL을 사용해서 복구를 진행하는 경우에 commit된 데이터까지만 복구가 되는 것으로 알고있습니다.


그런데 아래와 같은 테스트 케이스에서 제가 이해하고있는 방식으로 동작을 하지 않아 정상적인 과정인지 문의드리고 싶습니다.


1) create table A(a int);

2) insert into A values(generate_series(1,10000000));

3) 인서트 진행중에 kill -9 pid 사용 DB 정지

4) DB 재기동 (복구) 후 select count(*) from A;

-> 1000만건 조회됨


몇번 테스트해도 동일하길래 kill -9로 마스터 프로세스 죽인 이후에 확인해보니 아래와 같은 프로세스가 계속해서 동작중이었습니다.

postgres    11100       1  8 15:40 ?        00:00:03 postgres: postgres postgres [local] INSERT


조금 찾아보니 kill -9 으로 프로세스를 종료하게되면 하위 프로세스에 종료 시그널을 보내지 못하여 해당 프로세스가 계속 살아있는 것 같은데

복구 시점에서는 롤백처리가 되어야 하는게 아닌가 싶어서요.


만약 복제가 진행중인 상황이었다고 하면 복제서버는 walsender가 종료되었으니 해당 데이터를 수신하지 못했을 것이라고 생각합니다.

그러면 이 상황에서는 복제서버의 데이터를 기준으로 해야하는건지, 아니면 비정상 종료가 되었지만 계속 데이터 삽입을 진행한 원본 서버를 기준으로 해야하는 건지도 애매합니다.


postgresql이 의도한대로 WAL데이터 기록등이 다 된 것으로 보아야 할까요?

그리고 APP단에서 보면 원본 서버가 요청에 대한 응답을 진행하지 않은 상황으로 보고 다시 요청을 날리게되면 데이터 자체가 틀어지게 될건데, 혹시 이런 경우에는 어떤 데이터를 기준으로 해야하는지도 궁금합니다.

이 글에 대한 댓글이 총 1건 있습니다.

인터넷으로 학습된 답변은 이렇네요. 


https://chatgpt.com/share/67bf1a13-9274-8000-a68e-5cf33b4bcc30


chatgpt는 좀 더 postgresql 초창기 개발 그룹 메일링을 읽어서 공부해야 할 것 같네요. 


시작이

postmaster가 죽어도 현재 작업 중인 프로세스가 충분히 작업을 끝낼 수 있다고 판단하면, 

그 프로세스는 살아남아 작업을 계속합니다. 

이게 postgresql 초창기 기본 생각이었습니다. 그래서, 개별 backend 세션이 자기 체크포인트도 하고, 자기가 wal 파일 기록까지도 합니다. 

아주 초기부터 아마도 6.x 버전부터도 이런 특성으로 만들어졌습니다. (제가 기억하기로 xlog 도입 이전부터 그랬던 걸로 기억합니다. -  물론 틀렸을 수도 있습니다. 저는 gpt가 아니라서)


그 뒤, wal 내용을 실시간으로 전달해서 복제본을 만들겠다는 생각은 한 참 뒤에 나왔습니다. 


여기서 지금과 같은 상황일 때 자료 정합성 문제는 어떻게 할래?라는 논의가 있었고, 

복제 노드에서도 주 노드의 상황과 완전 같아야 한다고 생각되면 동기식 복제를 쓰고, 

그렇지 않다면, 비동기식 복제를 쓰면 된다는 정책을 정했습니다. 


지금과 같은 상황이고, 비동기식 복제 방식을 사용한다면,

주 노드가 다시 정상 작동을 하게 된다면

그때 insert 자료들이 왕창 복제 노드로 전달되겠죠. 

어떻게든 그 자료를 전달할 것이니까요. 


동기식 방식이라면,

아마 insert 작업하고 있는 backend 프로세스가 insert 작업을 진행하다가 멈출 것 같습니다. 테스트는 안해봤습니다. 이 프로세스가 존비로 남을지, 중간에 멈춰 rollback할지, 아니면, 자기혼자 commit해 버릴지 저도 궁금하기는 합니다. 


이런 개발 역사적 흐름(이렇게 쓰니까 뭔가 거창해 보이기는 하지만)을 알게 되면, PostgreSQL이라는 놈이 참 손때묻은 소프트웨어구나 하실겁니다. 

 

김상기(ioseph)님이 2025-02-26 22:55에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10518오라클의 통계정보관련 기능이 PostgreSQL에서 구현이 가능할까요? [1]
dba
2025-03-14
72
10517WAL 공부중인데 이게 정상인 상황인지 궁금합니다 [1]
박선웅
2025-02-26
125
10513link 오류 [2]
한만호
2025-02-12
131
10512archive_mode에서 on과 always의 차이가 무엇일까요? [1]
새내기
2025-02-11
119
10511PostgreSQL15에서의 DB 백업 문제... [2]
이창규
2025-02-04
200
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.012초, 이곳 서비스는
	PostgreSQL v17.4로 자료를 관리합니다