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

Làm thế nào để PostgreSQL cache các câu lệnh và dữ liệu?

Nói chung, chỉ nội dung của các tệp bảng và chỉ mục mới được lưu vào bộ nhớ đệm trong không gian đệm dùng chung.

Các kế hoạch truy vấn được lưu vào bộ nhớ đệm trong một số trường hợp. Cách tốt nhất để đảm bảo điều này là CHUẨN BỊ truy vấn một lần, sau đó THỰC HIỆN nó mỗi lần.

Kết quả của một truy vấn không được lưu trữ tự động. Nếu bạn chạy lại cùng một truy vấn - ngay cả khi nó giống hệt nhau từng chữ cái và không có cập nhật nào được thực hiện trên DB - thì nó vẫn sẽ thực hiện toàn bộ kế hoạch. Tất nhiên, nó sẽ sử dụng bất kỳ dữ liệu bảng / chỉ mục nào đã có trong bộ đệm chia sẻ bộ đệm; vì vậy nó sẽ không nhất thiết phải đọc lại tất cả dữ liệu từ đĩa.

Cập nhật về bộ nhớ đệm kế hoạch

Bộ nhớ đệm kế hoạch thường được thực hiện mỗi phiên. Điều này có nghĩa là chỉ kết nối tạo kế hoạch mới có thể sử dụng phiên bản đã lưu trong bộ nhớ cache. Các kết nối khác phải tạo và sử dụng các phiên bản được lưu trong bộ nhớ cache của riêng chúng. Đây thực sự không phải là vấn đề về hiệu suất bởi vì dù sao thì khoản tiết kiệm bạn nhận được từ việc sử dụng lại một kế hoạch hầu như luôn rất nhỏ so với chi phí kết nối. (Trừ khi các truy vấn của bạn thực sự là phức tạp.)

không bộ nhớ cache nếu bạn sử dụng PREPARE: http://www.postgresql.org /docs/current/static/sql-prepare.html

không bộ đệm ẩn khi truy vấn nằm trong hàm PL / plSQL: http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING

không truy vấn đặc biệt vào bộ nhớ cache được nhập trong psql.

Hy vọng rằng ai đó có thể giải thích cặn kẽ về bất kỳ trường hợp nào khác của bộ nhớ đệm kế hoạch truy vấn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm nạp các hàng từ nhiều bảng với UNION ALL hay sử dụng một bảng trong sản xuất?

  2. 3 cách liệt kê tất cả các kích hoạt cho một bảng đã cho trong PostgreSQL

  3. lỗi lệnh sử dụng alembic không thể tìm thấy mã định danh

  4. Chia bản ghi do hàm trả về thành nhiều cột

  5. Lỗi postgres khi chèn - LỖI:chuỗi byte không hợp lệ để mã hóa UTF8:0x00