2015-01-15 31 views
10

Chúng tôi có một máy chủ Postgres mạnh mẽ (64 lõi, RAM 384 GB, 16 ổ đĩa SAS 15k, RAID 10) và nhiều lần trong ngày chúng tôi xây dựng lại một số tập dữ liệu lớn. . Apache và Tomcat cũng chạy trên cùng một máy chủ.Postgres: Checkpoints thường xuất hiện quá thường xuyên

Chúng tôi đang nhận được cảnh báo này khoảng 300 lần một ngày, trong khi xây dựng lại những bộ dữ liệu, với những đoạn dài nơi các lỗi được trung bình 2-5 giây ngoài:

2015-01-15 12:32:53 EST [11403]: [10841-1] LOG: checkpoints are occurring too frequently (2 seconds apart) 
2015-01-15 12:32:56 EST [11403]: [10845-1] LOG: checkpoints are occurring too frequently (3 seconds apart) 
2015-01-15 12:32:58 EST [11403]: [10849-1] LOG: checkpoints are occurring too frequently (2 seconds apart) 
2015-01-15 12:33:01 EST [11403]: [10853-1] LOG: checkpoints are occurring too frequently (3 seconds apart) 

Đây là những cài đặt liên quan:

checkpoint_completion_target 0.7 
checkpoint_segments 64 
checkpoint_timeout 5min 
checkpoint_warning 30s 
wal_block_size 8192 
wal_buffers  4MB 
wal_keep_segments 5000 
wal_level hot_standby 
wal_receiver_status_interval 10s 
wal_segment_size 16MB 
wal_sync_method  fdatasync 
wal_writer_delay 200ms 
work_mem 96MB 
shared_buffers 24GB 
effective_cache_size 128GB 

Vì vậy, điều đó có nghĩa là chúng tôi đang viết các tệp WAL có dung lượng 1024 MB mỗi 2 - 5 giây, đôi khi được duy trì trong 15 - 30 phút.

1) Bạn có thấy bất kỳ cài đặt nào chúng tôi có thể cải thiện không? Hãy cho tôi biết nếu bạn cần các tài liệu khác được cài đặt.

2) Chúng ta có thể sử dụng "SET LOCAL synchronous_commit TO OFF;" khi bắt đầu các giao dịch ghi chuyên sâu này để cho phép những công việc WAL này diễn ra nhiều hơn một chút trong nền, có ít tác động hơn đến phần còn lại của các hoạt động?

Dữ liệu mà chúng tôi đang xây dựng lại được lưu trữ ở nơi khác, do đó, khả năng mất nguồn và bản sao lưu pin RAID không thực hiện công việc, chúng tôi sẽ không thực hiện bất kỳ điều gì sau khi tập dữ liệu được xây dựng lại.

"SET LOCAL synchronous_commit TO OFF;" gây ra bất kỳ vấn đề nếu điều này tiếp tục trong 15 - 30 phút? Hoặc gây ra bất kỳ sự cố nào với bản sao phát trực tuyến của chúng tôi, sử dụng trình gửi WAL?

Cảm ơn!

PS. Tôi hy vọng Samsung bắt đầu vận chuyển ổ SSD doanh nghiệp PCIe SM1715 3.2 TB của họ, vì tôi nghĩ rằng nó sẽ giải quyết vấn đề của chúng tôi một cách độc đáo.

+0

Nếu trạm kiểm soát xảy ra quá thường xuyên, cách khắc phục thông thường là tăng 'checkpoint_segments' (bạn cũng đang sử dụng phiên bản Postgres nào?) –

+0

Chúng tôi đang sử dụng Postgres 9.2.9, mặc dù chúng tôi đang lên kế hoạch chuyển sang 9.4 sớm . Nhìn xung quanh tôi thấy các giá trị checkpoint_segments cao tới 256 (4 GB), có thể cao hơn, điều này sẽ thay đổi 2 - 5 giây thành 8 - 20 giây (nếu tôi hiểu chính xác). Có những nhược điểm cho một giá trị cao? Tôi đã không nêu ra nó lo sợ nó sẽ làm tăng không gian đĩa được sử dụng, nhưng nhìn vào nó wal_keep_segments là dictating tổng số không gian của chúng tôi (80 GB). Cảm ơn – user1517922

Trả lời

7

Máy chủ của bạn đang tạo quá nhiều dữ liệu WAL do wal_level được đặt thành hot_standby. Tôi giả sử bạn cần điều này, vì vậy tùy chọn tốt nhất để tránh cảnh báo là tăng checkpoint_segments của bạn. Nhưng chúng chỉ là những cảnh báo - nó khá phổ biến và hoàn toàn bình thường khi thấy chúng trong quá trình cập nhật hàng loạt và tải dữ liệu. Bạn chỉ tình cờ cập nhật thường xuyên.

Thay đổi synchronous_commit không thay đổi những gì được ghi vào wal, mà đúng hơn là thời gian khi cam kết trả về để cho phép hệ điều hành đệm các ghi đó.

Nó có thể không áp dụng cho giản đồ của bạn, nhưng bạn có khả năng có thể lưu một số dữ liệu WAL bằng cách sử dụng các bảng không được yêu cầu để xây dựng lại dữ liệu của bạn. Bản sao của bạn sẽ không có quyền truy cập vào các bảng đó, nhưng sau khi xây dựng lại, bạn sẽ có thể cập nhật các bảng đã đăng nhập của bạn từ các anh chị em chưa được yêu cầu của họ.

Các vấn đề liên quan