Tối ưu hóa PostgreSQL cho rất nhiều bản cập nhật INSERTS và bytea


12

Những gì chúng ta có (phần mềm):

  • PostrgeSQL 9.3 với cấu hình cơ sở (không thay đổi postgresql.conf)
  • Windows 7 64 bit

Phần cứng:

  • Intel Core i7-3770 3.9 Ghz
  • RAM 32 Gb
  • Ổ đĩa WDC WD10EZRX-00L4HBAta (1000Gb, SATA III)

Vì vậy, chúng ta phải tải vào DB aprox. 100.000.000 hàng có cột bytea500.000.000 hàng đơn giản hơn (không có LOB). Có 2 varcharchỉ mục trên bảng 1 (với 13, 19 chiều dài) và 2 varcharchỉ mục trên bảng 2 (18, 10 độ dài). Ngoài ra còn có trình tự tạo thế hệ id cho mỗi bảng.

Cho đến nay, các hoạt động này đang thực hiện với 8 kết nối song song với kích thước lô 50 JDBC. Hình dưới đây cho thấy tải hệ thống: nó không tải trên postgresqlcác quy trình. Sau 24 giờ tải, chúng tôi chỉ tải được 10.000.000 hàng, kết quả rất chậm.

nhập mô tả hình ảnh ở đây

Chúng tôi đang yêu cầu trợ giúp điều chỉnh PostrgreSQLcấu hình theo mục đích:

1) để tải cực nhanh lượng dữ liệu này, nó chỉ hoạt động một lần, do đó, nó có thể là cấu hình tạm thời

2) cho chế độ sản xuất để thực hiện số lượng CHỌN vừa phải vào 2 bảng này theo chỉ mục của chúng mà không cần nối và không sắp xếp.

Câu trả lời:


14

Để biết inserthiệu suất, hãy xem tăng tốc hiệu suất chèn trong PostgreSQLchèn số lượng lớn trong PostgreSQL .

Bạn đang lãng phí thời gian với việc tạo khối JDBC cho insert. PGJDBC không làm gì hữu ích với insertcác đợt, nó chỉ chạy từng câu lệnh . <- Điều này không còn đúng trong các phiên bản PGJDBC mới hơn, giờ đây có thể xử lý các câu lệnh được chuẩn bị hàng loạt để giảm đáng kể thời gian khứ hồi. Nhưng vẫn tốt hơn để:

Sử dụng COPYthay thế; xem bản sao lô PGJDBCCopyManager. Đối với số lượng trình tải đồng thời: Nhắm vào một cặp trên mỗi đĩa, nếu các hoạt động bị ràng buộc I / O của đĩa. Tám có lẽ là thứ bạn muốn nhất.

Đối với "chế độ sản xuất" của bạn, tôi khuyên bạn nên tải một mẫu dữ liệu, thiết lập các truy vấn bạn muốn chạy và sử dụng explain analyzeđể điều tra hiệu suất. Chỉ dành cho mục đích thử nghiệm, sử dụng thông số enable_để khám phá các lựa chọn gói khác nhau. Đặt các thông số chi phí truy vấn kế hoạch ( random_page_cost, seq_page_cost, effective_cache_size, vv) một cách thích hợp cho hệ thống của bạn, và chắc chắn shared_buffersđược thiết lập một cách thích hợp. Tiếp tục theo dõi khi bạn thêm một khối lượng công việc sản xuất mô phỏng, sử dụng auto_explainmô-đun, log_min_duration_statementcài đặt, pg_stat_statementsphần mở rộng, v.v.

Để biết chi tiết, xem hướng dẫn sử dụng PostgreSQL. Tôi đề nghị bật lại ở đây khi bạn gặp vấn đề cụ thể hơn với các explain analyzechi tiết thực hiện truy vấn, v.v.


1
Đây là một câu trả lời amazaing! Cám ơn.
Jan Mares
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.