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

Go sql - phạm vi câu lệnh được chuẩn bị sẵn

Các câu lệnh chuẩn bị sẵn để bạn có thể thực thi các lệnh SQL lặp đi lặp lại, chẳng hạn như các lệnh này chỉ có thể khác nhau về giá trị tham số.

Chúng không có nghĩa là tồn tại "lâu" vì một câu lệnh đã chuẩn bị có thể (chúng làm được nếu được gọi từ một giao dịch) dự trữ một kết nối cơ sở dữ liệu đang hoạt động ("dài" có nghĩa là khi chúng không được sử dụng; hoàn toàn tốt nếu thực hiện lặp đi lặp lại một câu lệnh đã chuẩn bị sẵn nhiều thời gian ngay cả khi điều này sẽ mất nhiều thời gian). Kết nối là một nguồn tài nguyên đắt tiền và chỉ nên được giữ lại khi cần thiết. Chỉ bằng cách tạo một loạt các câu lệnh đã chuẩn bị sẵn và không đóng chúng, bạn có thể hết các kết nối đang hoạt động / được phép và sau đó chặn giao tiếp với máy chủ db.

Sử dụng một câu lệnh đã soạn sẵn nếu bạn muốn thực thi cùng một insert , update hoặc select câu lệnh với các tham số khác nhau nhiều lần trong một yêu cầu (HTTP). Không sử dụng câu lệnh đã soạn sẵn để tồn tại các yêu cầu (HTTP).

Trong một số triển khai trình điều khiển và máy chủ cơ sở dữ liệu, các câu lệnh được chuẩn bị sẵn cũng có thể liên quan đến tài nguyên được phân bổ trên chính máy chủ DB (không phải trong ứng dụng Go). Ví dụ, một câu lệnh đã chuẩn bị có thể được biên dịch trước trên máy chủ DB và máy chủ có thể chuẩn bị kế hoạch thực thi truy vấn, cấp phát một số tài nguyên nhất định như bộ nhớ cho nó. Chúng có thể được bảo lưu vĩnh viễn cho đến khi bản sao kê đã chuẩn bị được đóng lại.

Có một bài báo (được đăng bởi Myles McDonnell trong nhận xét bên dưới) đi sâu vào chi tiết triển khai của Tuyên bố chuẩn bị trong cờ vây. Nó đề cập rằng nếu các câu lệnh đã chuẩn bị không được tạo từ các giao dịch, chúng sẽ giải phóng kết nối trở lại nhóm kết nối, nhưng khi cần, chúng cố gắng sử dụng lại chính những gì chúng đã được chuẩn bị (vì nếu máy chủ db hỗ trợ / cũng đóng một vai trò tích cực trong câu lệnh đã chuẩn bị, nó được liên kết với kết nối ở phía máy chủ). Nếu không, họ sẽ chuẩn bị lại chúng trên một kết nối mới (gây ra chi phí hiệu suất không mong muốn).

Nhìn chung, những gì bạn mô tả là một mô hình hoạt động và nếu bạn có số lượng câu lệnh chuẩn bị cần thiết / thực thi trong nhiều yêu cầu tiếp theo thấp, chúng có thể có nghĩa là thời gian phản hồi ngắn hơn. Nhưng nó cũng có nghĩa là mặt khác về lâu dài, chúng có thể dẫn đến việc tất cả các báo cáo đã chuẩn bị của bạn sẽ được chuẩn bị trên tất cả các kết nối của nhóm. Quyết định xem điều này có được chấp nhận trong trường hợp của bạn hay không.

Nói chung, điều này nên tránh (và câu lệnh đã chuẩn bị được đóng trước khi kết thúc yêu cầu HTTP), nhưng nếu bạn chỉ có một vài trong số chúng và bạn cần chúng trong nhiều yêu cầu theo sau nhau, bạn có thể chuyển chúng ra khỏi phạm vi yêu cầu .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi trong Dữ liệu mùa xuân JPA:Dữ liệu mùa xuân trả về Danh sách <BigInteger> thay vì Danh sách <Dài>

  2. Hàm PostgreSQL do người dùng định nghĩa trong phương ngữ ngủ đông ném ngoại lệ

  3. Làm thế nào để sao lưu cơ sở dữ liệu postgresql từ bên trong psql?

  4. Postgresql - Làm thế nào để tăng tốc độ cập nhật bảng khổng lồ (100 triệu hàng)?

  5. Cách xác định khóa chính tự động tăng dần trong PostgreSQL