Bàn bận rộn không được hút bụi


11

Chúng tôi đang sử dụng Postgres 9.2 trên Windows để lưu trữ dữ liệu thời gian tần số thấp: chúng tôi đang chèn khoảng 2000 hàng mỗi giây mỗi 24 giờ, 7 ngày một tuần mà không có thời gian chết. Có một DELETEcái chạy trên bàn cứ sau 10 phút hoặc lâu hơn để giữ độ dài của bàn đến một số ngày cố định. Điều này kết thúc là một 900 triệu hàng khá ổn định. (Đối với những người quan tâm, SELECT, INSERT, DELETEđều performant).

Như vậy DELETE, trong khi xóa các hàng không giải phóng không gian đĩa. Cho rằng chúng ta cần VACUUMphải chạy.

Tôi đã truy vấn pg_stat_user_tablesVACUUMdường như chưa từng chạy.

Những gì tôi hiểu từ các tài liệu khác nhau ( http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html ):

  • chúng tôi dường như có chế độ hút bụi tự động và nó đang chạy trên các bảng khác.
  • chân không tự động không chạy FULLvà không cần khóa độc quyền trên bàn.

Có ai có bất kỳ suy nghĩ tại sao tự động chân không không chạy? Đây có phải là hoàn toàn bởi vì bảng liên tục bận rộn?

Và nó có đáng để chạy VACUUMsau mỗi DELETEtrong trường hợp này (chạy cứ sau 10 phút)?

Biên tập:

Truy vấn bằng SQL từ liên kết SO bên dưới:

-[ RECORD 2 ]---+---------------------------
schemaname      | stats
relname         | statistic_values_by_sec
last_vacuum     |
last_autovacuum |
n_tup           |    932,315,264
dead_tup        |    940,727,818
av_threshold    |    186,463,103
expect_av       | *

và đầu ra thô:

-[ RECORD 3 ]-----+---------------------------
relid             | 501908
schemaname        | stats
relname           | statistic_values_by_sec
seq_scan          | 12
seq_tup_read      | 4526762064
idx_scan          | 29643
idx_tup_fetch     | 2544206912
n_tup_ins         | 1573896877
n_tup_upd         | 0
n_tup_del         | 941176496
n_tup_hot_upd     | 0
n_live_tup        | 688858417
n_dead_tup        | 940727818
last_vacuum       |
last_autovacuum   |
last_analyze      |
last_autoanalyze  | 2014-08-09 01:36:21.703+01
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 69

4
Xem Tự động xâm lấn trên PostgreSQL . Ngoài ra, sẽ rất thú vị khi có select * from pg_stat_user_tablesbảng này (sử dụng \xtrong psql cho đầu ra được định dạng độc đáo)
Daniel Vérité

2
Liên kết đó rất hữu ích và có lẽ trả lời câu hỏi - bảng quá bận để máy hút bụi tự động hoạt động. @ DanielVérité Tôi đã cập nhật câu hỏi với đầu ra mà bạn yêu cầu.
Barry

3
Đó là rất nhiều tuple chết! Nếu có thể, hãy xem xét phân vùng bảng bằng dấu thời gian và bỏ các phân vùng cũ thay vì xóa. Sự cảnh báo chính là chỉ mục duy nhất trên các phân vùng không được hỗ trợ.
Daniel Vérité

1
Tệp nhật ký có thông báo về tự động lưu trên bảng này bị hủy không?
jjanes

@jjanes Không - không có dấu hiệu nào trong nhật ký mà autovacuum từng bắt đầu.
Barry

Câu trả lời:


2

Tôi sẽ xem xét phân vùng . Nếu được phân vùng theo ngày, bạn có thể bỏ toàn bộ phân vùng một khi nó quá cũ. Bạn thậm chí có thể không còn phải hút bụi.

Ngoài ra, hiệu suất tổng thể có thể tăng, vì bạn không chèn vào nơi bạn đang xóa. Bạn chỉ cần viết mã để tạo phân vùng mới và xóa phân vùng cũ.

Đây chính xác là những gì phân vùng dành cho.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.