Tôi có một thiết lập cơ bản trong đó cơ sở dữ liệu được đọc bởi nhiều ứng dụng web và định kỳ tôi có một ứng dụng lô. Trong quá trình viết, sự thiếu hiểu biết của các ứng dụng web làm suy giảm rất nhiều (đọc cơ sở dữ liệu của họ rất chậm).Cập nhật mức độ ưu tiên thấp trên MySQL bằng JDBC - cách kiểm tra xem chúng hoạt động như thế nào
Điều khoản là MySQL db sử dụng công cụ MYISAM, ứng dụng hàng loạt là một ứng dụng Java SE, sử dụng Spring-batch và SimpleJDBCTemplate để phát hành các lệnh SQL thông qua JDBC. Tôi thấy rằng MySQL có một tham số làm giảm mức độ ưu tiên của các thao tác ghi trên động cơ MYISAM: low_priority_updates. Để trích dẫn tài liệu, trong số những tài liệu khác, bạn có thể "SET LOW_PRIORITY_UPDATES = 1 để thay đổi mức ưu tiên trong một chuỗi". Tôi đã chọn điều này vì nó dễ dàng nhất từ quan điểm cấu hình của ứng dụng của tôi. Những gì tôi đã làm được cấu hình DataSource của tôi như vậy mà nó exectutes rằng "SET ..." cho mỗi kết nối nó sẽ mở ra, như vậy:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- other props omitted -->
<property name="connectionInitSqls">
<list>
<value>SET low_priority_updates="ON"</value>
</list>
</property>
</bean>
Bây giờ câu hỏi của tôi là, làm thế nào để thực sự kiểm tra xem một SQL ban hành thông qua nguồn dữ liệu này thực sự chạy với mức độ ưu tiên thấp? Nếu tôi làm SHOW FULL PROCESSLIST
trong MySQL trong khi chèn đang xảy ra nó chỉ cho tôi biết những gì SQL họ đang thực hiện, không có gì về ưu tiên:
Nếu tôi kiểm tra các biến máy chủ low_priority_updates là "OFF", nhưng đó chỉ là biến máy chủ, nó không có gì về giá trị thread-local.
Vì vậy, một lần nữa, có cách nào thực sự để kiểm tra xem mỗi giá trị của truy vấn/luồng low_priority_updates có được tính đến không?
Đúng, nó hoạt động rất tốt. Tôi có thể sử dụng JDBC để kiểm tra xem kết nối có low_priority_value đúng không bằng cách phát hành 'select connection_id(), @@ session.low_priority_updates từ kép'. Và thực sự nó hoạt động ok, giá trị phiên của biến thay đổi theo cách tôi khởi tạo nó tại init kết nối. Cảm ơn! –