PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Các truy vấn postgres trong sản xuất dẫn đến I / O đọc đĩa cao bất thường

Truy vấn này không tạo ra bất kỳ I / O đĩa nào - tất cả các khối đều được đọc từ bộ đệm được chia sẻ. Nhưng vì truy vấn đọc 73424 khối (khoảng 574 MB), nó sẽ tạo ra tải I / O đáng kể khi bảng không được lưu vào bộ nhớ đệm.

Nhưng có hai điều có thể được cải thiện.

  • Bạn có kết quả khớp khối mất mát trong quá trình quét đống. Điều đó có nghĩa là work_mem không đủ lớn để chứa một bitmap với một bit trên mỗi hàng trong bảng và thay vào đó, 26592 bit ánh xạ một khối bảng. Tất cả các hàng phải được kiểm tra lại và 86733 hàng bị loại bỏ, hầu hết trong số đó là dương tính giả từ các kết quả khớp khối bị mất.

    Nếu bạn tăng work_mem , một bitmap với một bit trên mỗi hàng trong bảng sẽ vừa với bộ nhớ và con số này sẽ thu nhỏ lại, làm giảm công việc trong quá trình quét đống.

  • 190108 hàng bị loại bỏ vì chúng không phù hợp với điều kiện bộ lọc bổ sung trong quá trình quét đống bitmap. Đây có lẽ là nơi mà hầu hết thời gian được sử dụng. Nếu bạn có thể giảm số tiền đó, bạn sẽ thắng.

    Các chỉ mục lý tưởng cho truy vấn này sẽ là:

    CREATE INDEX ON map_listing(transaction_type, la);
    CREATE INDEX ON map_listing(transaction_type, lo);
    

    Nếu transaction_type không có tính chọn lọc cao (tức là hầu hết các hàng đều có giá trị Sale ), bạn có thể bỏ qua cột đó.

CHỈNH SỬA:

Kiểm tra vmstatiostat cho thấy cả CPU và hệ thống con I / O đang bị quá tải lớn:tất cả tài nguyên CPU được sử dụng cho I / O chờ và thời gian đánh cắp VM. Bạn cần một hệ thống I / O tốt hơn và một hệ thống máy chủ có nhiều tài nguyên CPU miễn phí hơn. Tăng migjt RAM làm giảm bớt sự cố I / O, nhưng chỉ đối với các lần đọc đĩa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tuple to List - Kiểu trả về Python / PostgreSQL của Bản ghi SETOF

  2. SQL đã tham gia vào ngày cuối cùng

  3. ver.2 LỖI PyGreSQL:from _pg import * ImportError:DLL load failed:Không tìm thấy mô-đun được chỉ định

  4. Cách lọc kết quả truy vấn trong PostgreSQL

  5. Vòng PostgreSQL (v số, s int)