2013-01-17 15 views
6

Pracuję z dość dużą bazą danych MySQL za pośrednictwem biblioteki SQLAlchemy i chciałbym wyłączyć buforowanie zapytań MySQL w celu debugowania problemów z wydajnością w poszczególnych sesjach. Trudno jest debugować powolne zapytania, gdy ich powtarzanie skutkuje znacznie szybszym wykonaniem. Z klientem CLI MySQL mogę wykonać SET SESSION query_cache_type = OFF;, aby osiągnąć wynik, którego szukam, i chciałbym go uruchomić w każdej sesji SQLAlchemy (kiedy debuguję).Jak wyłączyć pamięć podręczną zapytań MySQL podczas korzystania z SQLAlchemy?

Ale nie mogę się dowiedzieć, jak skonfigurować SQLAlchemy tak, aby uruchamiał SET SESSION query_cache_type = OFF, gdy tworzy nową sesję bazy danych.

Spojrzałem na Engine and Connection docs, ale nie mogę niczego znaleźć.

Czy jest coś oczywistego, czego mi brakuje lub lepszy sposób na zrobienie tego?

+0

http://stackoverflow.com/a/15788051/497208 może być przydatny –

Odpowiedz

5

Użyć event hook natychmiast po zdefiniowaniu silnika:

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) 

Można to zrobić globalnie dodając hak do samej klasie Pool, ale (a) prawdopodobnie zechcesz ustawienia Pyramid dostępne tak więc ciebie może zdecydować, czy dodać hak, oraz (b) stan globalny jest zły :)

Powiązane problemy