2013-01-17 43 views
6

Tôi đang làm việc với một cơ sở dữ liệu MySQL khá lớn thông qua thư viện SQLAlchemy, và tôi muốn tắt bộ nhớ đệm truy vấn của MySQL để gỡ lỗi các vấn đề về hiệu suất trên cơ sở mỗi phiên. Rất khó để gỡ lỗi các truy vấn chậm khi lặp lại chúng dẫn đến việc thực thi nhanh hơn nhiều. Với máy khách MySQL CLI, tôi có thể thực hiện SET SESSION query_cache_type = OFF; để đạt được kết quả mà tôi đang tìm kiếm và tôi muốn chạy nó trên mỗi phiên SQLAlchemy (khi tôi đang gỡ lỗi).Làm thế nào để tắt bộ nhớ cache truy vấn MySQL trong khi sử dụng SQLAlchemy?

Nhưng tôi không thể tìm ra cách cấu hình SQLAlchemy sao cho nó chạy SET SESSION query_cache_type = OFF khi nó khởi tạo một phiên cơ sở dữ liệu mới.

Tôi đã xem Engine and Connection docs, nhưng dường như không thể tìm thấy bất kỳ thứ gì.

Có điều gì rõ ràng mà tôi đang thiếu hoặc cách tốt hơn để làm điều này?

+0

http://stackoverflow.com/a/15788051/497208 có thể hữu ích –

Trả lời

5

Sử dụng một event hook ngay lập tức sau khi bạn xác định động cơ của bạn:

from sqlalchemy import event 

def disable_query_cache(conn, record): 
    conn.cursor().execute("SET SESSION query_cache_type = OFF") 


# this is probably in your Pyramid setup code 
engine = create_engine(...) 

if DEBUGGING: 
    event.listen(engine, 'connect', disable_query_cache) 

Bạn có thể làm điều này trên toàn cầu bằng cách thêm móc để lớp Pool chính nó, nhưng (a) có thể bạn muốn thiết lập Pyramid sẵn anyway vì vậy bạn có thể quyết định có hay không thêm móc, và (b) trạng thái toàn cục là xấu :)

Các vấn đề liên quan