Khi sử dụng Tomcat với MySQL, mối quan hệ giữa thiết lập poolPreparedStatements trong cấu hình Tomcat DataSource (Tôi tin đến từ DBCP) và thiết lập Connector/J cachePrepStmts là gì? Cấu hình tối ưu là gì?Pooling PreparedStatement trên Tomcat với MySQL
Trả lời
poolPreparedBáo cáo là cài đặt cho nhóm kết nối JDBC Tomcat và cachePrepStmts là cài đặt cho Trình kết nối/J để thông báo cho MySQL về các câu lệnh chuẩn bị bộ nhớ cache. Hai điều hoàn toàn khác nhau. cachePrepStmts là một thiết lập kết nối, nhưng Connector/J không quan tâm đến việc nó kết nối với một pool kết nối cơ sở dữ liệu hay MySQL trực tiếp, nhưng cachePrepStmts hoạt động tốt nhất với các kết nối liên tục (ví dụ như các kết nối). Để sử dụng cachePrepStmts với một nhóm kết nối là cấu hình tối ưu. Sử dụng poolPreparedStatements trong Tomcat là để mở một hộp chứa các trình quản lý bộ nhớ (kiểm tra các tài liệu Tomcat cho thiết lập này và bạn sẽ thấy). Thực sự, tốt nhất là hãy để MySQL cache các câu lệnh đã chuẩn bị và để Tomcat kết nối các nhóm và không cố gắng để có một công việc của người khác.
Không chắc chắn nếu điều này sẽ hữu ích, nhưng hãy xem the accepted answer of this question.
Vì vậy, bạn đang đề xuất rằng Trình kết nối/J sẽ thực hiện công việc tốt hơn DBCP để tổng hợp các câu lệnh đã chuẩn bị, đúng không? Ngoài ra, tôi thấy điều này gây nhầm lẫn: "Connector/J không quan tâm chính nó với việc nó kết nối với một hồ bơi kết nối cơ sở dữ liệu hoặc MySQL trực tiếp". Trình kết nối/J ở mức thấp hơn DBCP, vì vậy nó luôn kết nối trực tiếp với MySQL, phải không? – ykaganovich
Không, MySQL sẽ thực hiện một công việc tốt hơn trong việc lưu trữ các câu lệnh chuẩn bị sẵn sàng hơn DBCP, vì vậy hãy đặt cờ cachePrepStmts trong các kết nối Connector/J của bạn và để nguyên câu lệnh chuẩn bị DBCP gộp lại một mình. Connector/J kết nối trực tiếp với các nhóm MySQL và DBCP một loạt các kết nối Connector/J. Tôi đoán nhận xét của tôi mà bạn trích dẫn đã bị cắt xén và bối rối. –