Ví dụ output về lỗi gặp phải khi query trên Postgres:

ERROR: canceling statement due to conflict with recovery
DETAIL: User query might have needed to see row versions that must be removed.
STATEMENT: SELECT 1

Giải thích:

Lỗi này sẽ xảy ra khi standby server nhận được cập nhật data update/ delete trong WAL stream, điều này sẽ làm dữ liệu hiện đang được truy cập bởi một query đang chạy bị conflict với dữ liệu mới.

Bạn sẽ gặp lỗi này khi bạn có các câu lệnh query có thời gian xử lý lâu (long query) truy cập các bảng có sự thay đổi data đáng kể trên master server.

Giải pháp tham khảo:

Có hai cách tiếp cận để tránh việc hủy các truy vấn kiểu này:

1) Đặt hot_standby_feedback = on ở chế độ chờ. Standby server sẽ thông báo đến master server, nó sẽ biết là có một transaction đang được thực hiện và nó sẽ điều khiển VACUUM giữ lại các row cho đến khi standby đã hoàn thành các transaction này. Điều này sẽ ảnh hưởng tới master server vì VACUUM sẽ bị trì hoãn trong việc dọn dẹp data. Nếu query trên standby node không bao giờ dừng hoặc kết thúc, nó sẽ làm cho các bảng trong master server không được dọn dẹp và dữ liệu sẽ phình lên. Nhưng điều này cho phép các truy vấn trên các standby node kết thúc một cách đáng tin cậy.

2) Tăng max_standby_archive_delaymax_standby_streaming_delay, cho phép standby server tăng độ trễ để cho phép các truy vấn kết thúc trước khi cập nhật data.

Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể sử dụng phương án 1 hoặc 2.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments