2014-12-08 3 views
0

У меня есть запрос на выбор sql, который занимает около 20 секунд, я хочу использовать кеш mysql для кэширования результата, чтобы я мог быстро получить результаты.web.py mysql cache cache

После выполнения некоторой конфигурации в my.cnf мне удалось добиться этого, выполнив запрос выбора в клиентской консоли mysql Linux.

добавленные строки в my.cnf является:

query_cache_size = 268435456 
query_cache_type = 1 
query_cache_limit = 1048576 

Но когда я выполнить запрос из web.py кода. Функция кеша кажется неработоспособной, то есть время выполнения не короче, чем раньше.

Ниже приведен код web.py:

import web  
db = web.database(dbn='mysql', db='RLCM', user='guest', pw='guest') 
sql = "SELECT xxx from xx" 
results = db.query(sql); 

мне нужно добавить какие-либо параметры для того, чтобы кэш делать?

Я решил эту проблему, исключив SET autocommit = 1 перед запуском запроса. Теперь код:

import web  
db = web.database(dbn='mysql', db='RLCM', user='guest', pw='guest') 

sql = "SET autocommit=1;" 
db.query(sql); 

sql = "SELECT xxx from xx" 
results = db.query(sql); 
+0

Что вы сделали, чтобы сделать результат кэшированным в клиентской консоли mysql? – xiaowl

+0

Я добавляю следующие строки в my.cnf: query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 – lzy9059

ответ

0

перезагрузки вы сервер MySQL после изменения файла my.cnf?

Вот краткий процесс, который может помочь вам определить, где проблема:

1.Убедитесь кэш запросов ON.

sql> show variables like '%query_cache%' 
have_query_cache  YES 
query_cache_limit 1048576 
query_cache_min_res_unit 4096 
query_cache_size  1048576 
query_cache_type  ON 
query_cache_wlock_invalidate  OFF 

По http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html Вы всегда получите have_query_cache YES используя стандартный бинарный файл. но поле query_cache_type является индикатором.

2.check состояния кэша

sql> show status like 'Qcache%' 

enter code here 
Qcache_free_blocks 1 
Qcache_free_memory 1026208 
Qcache_hits 1 
Qcache_inserts 1 
Qcache_lowmem_prunes 0 
Qcache_not_cached 2 
Qcache_queries_in_cache 1 
Qcache_total_blocks 4 

Каждый раз, когда вы посылаете запрос, если кэш работает, то Qcache_hits должен +1, в противном случае not_cached должен +1.

3.Если кэш включен, и как-то вы не можете получить результат из кэша, вам может понадобиться, чтобы узнать о том, как кэш MySQL работает: http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html

Примечание: Вы можете запустить эти SQLs с помощью web.py окружение и консоль mysql. Если вы видите разные результаты, некоторые связанные с кешем настройки могут отличаться. Зачем? Поскольку эти SQL-запросы выполняются в разных сеансах, MySQL может устанавливать некоторые конфигурации на уровне сеанса.

+0

Благодарим вас за ответ. Я перезапустил сервер mysql. Но кеш-запрос работает только при запуске запроса в клиентской консоли mysql Linux. Так же, как вы сказали, запрос web.py sql может выполняться в другой сессии и, возможно, некоторые различия в конфигурации. Поэтому я предполагаю, что в моем web.py-коде может отсутствовать код, но я не пропустил – lzy9059

+0

Если вы запустили эти SQL-запросы, используемые для проверки состояния кеша, и он сообщил, что кеш выключен, вам может понадобиться попробовать запустить другой SQL 'set session query_cache_type = ON', чтобы узнать, помогает ли это. – xiaowl