Tôi có nên thủ công VACUUM cơ sở dữ liệu PostgreQuery của mình nếu bật chế độ tự động không?


15

Tôi sử dụng phần mềm tạo ra một cơ sở dữ liệu PostgreQuery lớn (có một bảng có hàng triệu hàng trong đó) và các nhà phát triển nói rằng tôi nên VACUUMANALYZEđịnh kỳ. Nhưng mặc định cơ sở dữ liệu PostgreSQL được autovacuumbật.

Tôi có nên hút bụi / phân tích gì không? Những lợi ích là gì? Sự khác biệt giữa chân không tự động và thủ công

Ví dụ, trong PGadmin3, tôi có điều này:
nhập mô tả hình ảnh ở đây

Câu trả lời:


12

Tôi đồng ý với ETL rằng không có câu trả lời ngắn. Kích thước không phải là vấn đề duy nhất - chúng tôi chạy Cơ sở dữ liệu OLTP PostgreQuery khá lớn (với một số bảng> 100.000.000 hàng) dưới tải nặng và hiện tại chúng tôi chỉ dựa vào tự động lưu.

Tuy nhiên, hai điều có vẻ quan trọng đối với tôi:

  • Dường như có một sự đồng thuận, không bao giờ nên tự động tắt, trừ khi bạn có khối lượng công việc được xác định rất rõ trên cơ sở dữ liệu của bạn và bạn biết chính xác những gì bạn đang làm. Nhưng, một cách tự nhiên, bạn có thể thực hiện bổ sung VACUUMvà / hoặc ANALYZEchạy.

  • Trước khi xem xét các VACUUMlần chạy bổ sung , tôi sẽ kiểm tra cách tự động theo kịp. Bạn có thể kiểm tra xem có bảng nào vượt quá ngưỡng tự động hay không bằng cách truy vấn pg_stat_user_tablespg_class. Tôi đã đăng một truy vấn như vậy trên một chủ đề khác, có thể được quan tâm: Tự động xâm nhập trên PostgreQuery .

    Thật không may, hiện tại không dễ dàng (nghĩa là không thể thực hiện được) để thực hiện kiểm tra tương tự cho các ngưỡng tự động. Tuy nhiên, autoanalyze đá trong thời gian dài trước khi autovacuum theo mặc định và nó rẻ hơn nhiều. Vì vậy, về cơ bản nếu cơ sở dữ liệu của bạn có thể theo kịp với autovacuum, có lẽ nó cũng sẽ ổn với tính năng tự động hóa. Ngày tự động cuối cùng cũng có thể được truy vấn pg_stat_user_tables.

Một số phần của tài liệu PostgreSQL (xuất sắc nhất) mà tôi thấy hữu ích:


7

Autovacuum sẽ bao gồm khá tốt, trừ khi bạn cấu hình sai một cái gì đó. Những câu trả lời khác đã bao gồm.

Có một trường hợp được xác định rõ ràng cho hướng dẫn sử dụng VACUUM (và quan trọng hơn là: thủ công ANALYZE) mặc dù: các bảng tạm thời , chúng không được xem xét bởi con quỷ tự động. Tôi trích dẫn hướng dẫn CREATE TABLEở đây :

Trình nền tự động không thể truy cập và do đó không thể hút bụi hoặc phân tích các bảng tạm thời. Vì lý do này, các hoạt động phân tích và chân không thích hợp nên được thực hiện thông qua các lệnh SQL phiên. Ví dụ: nếu một bảng tạm thời sẽ được sử dụng trong các truy vấn phức tạp, thì nên chạy ANALYZEtrên bảng tạm thời sau khi nó được điền.


4

Không có câu trả lời ngắn cho điều đó vì nó phụ thuộc vào rất nhiều yếu tố. Hệ thống có chậm không? Là chân không tự động thực sự chạm vào bảng này? Vân vân.

Dưới đây là một số liên kết tốt về chủ đề này:

Để đưa ra quyết định rõ ràng đòi hỏi sự hiểu biết về chính cơ sở dữ liệu và biết thêm chi tiết về những gì đang diễn ra.


1

Tôi không nghĩ rằng bạn cần hút bụi bằng tay, trừ khi bạn bắt đầu thấy sự suy giảm hiệu suất. Tuy nhiên, tôi thực sự khuyên bạn nên xem lại cài đặt chân không và tự động của bạn và điều chỉnh nó theo nhu cầu của bạn

Để xem các cài đặt hiện tại của bạn, hãy chạy truy vấn này:

SELECT *
FROM pg_settings 
WHERE name LIKE '%vacuum%'

Hầu hết các lĩnh vực là tự giải thích, nhưng đây là tài liệu về chúng: https://www.postgresql.org/docs/civerse/static/r nb-config-autovacuum.html

Tôi có thể nói, mục tiêu của bạn là cấu hình autovacuum để dọn rác một cách nhất quán, nhưng đừng chạy autovacuum liên tục

Các cài đặt quan trọng nhất là:

  • autovacuum_vacuum_scale_factor - xác định tỷ lệ phần trăm của bộ dữ liệu có thể bị chết trước khi dọn dẹp được kích hoạt. Giá trị mặc định = 0,2
  • autovacuum_vacuum_thr Ngưỡng - số lượng tuple chết tối thiểu trước khi dọn dẹp được kích hoạt. Giá trị mặc định = 50

Ngưỡng giúp ngăn quá trình dọn dẹp được kích hoạt quá thường xuyên đối với các bảng nhỏ.

Cài đặt mặc định hoạt động ổn, trừ khi bạn có các bảng rất lớn. Nói một cách đơn giản, nếu bạn tình cờ có bảng mất 100 GB, bạn sẽ tích lũy được 20 GB rác, trước khi chế độ tự động sẽ được kích hoạt. Vì vậy, tôi thường khuyên bạn nên đặt hệ số tỷ lệ thấp. Làm thế nào thấp bạn nên xác định cho chính mình. Tôi sử dụng 0,05 cho dự án hiện tại của tôi

Ngưỡng cũng có thể được tăng lên. Nhiều ứng dụng có một vài bảng, thường xuyên được cập nhật và 50 bộ dữ liệu không nhiều. Tăng lên 1000 không dẫn đến bất kỳ vấn đề nào, nhưng tất nhiên, bạn nên xem xét trường hợp của riêng mình

Bạn cũng có thể tinh chỉnh autovacuum và có các cài đặt khác nhau cho một số bảng của bạn

ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);

Nếu bạn định cấu hình scale_factor và ngưỡng, bạn sẽ ổn. Bạn cũng có thể tăng autovacuum_vacuum_cost_limit, theo mặc định là bằng vacuum_cost_limit, được đặt thành 200. Đây là một tính năng rất quan trọng của chân không, không cho phép nó ăn hết tài nguyên và cho phép ứng dụng của bạn hoạt động với dữ liệu ngay cả trong quá trình hút bụi , nhưng giá trị mặc định là quá thấp. Tăng nó lên 1000 không dẫn đến bất kỳ sự chậm trễ đáng kể nào, nhưng sẽ cho phép quá trình chân không kết thúc nhanh hơn nhiều

Tất nhiên, bạn cũng có thể chạy chân không bằng tay. Trong trường hợp đơn giản nhất, bạn có thể có một công việc định kỳ đơn giản, công việc này sẽ dọn dẹp hoàn toàn mỗi đêm, khi DB của bạn không được truy cập thường xuyên

Mong rằng sẽ giúp!

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.