web.py mysql查询缓存

时间:2014-12-08 06:45:59

标签: python mysql caching

我有一个sql select查询需要大约20秒,我想使用mysql缓存来缓存结果,这样我就可以快速得到结果。

在my.cnf中进行一些配置后,我在Linux mysql客户端控制台中运行select查询时成功实现了这一点。

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);

1 个答案:

答案 0 :(得分:0)

更改my.cnf文件后,您是否重新启动了mysql服务器?

这是一个简短的过程,可以帮助您确定问题所在:

1.确保查询缓存已开启。

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.检查缓存的状态

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.如果缓存为ON并且无法获得缓存结果,您可能需要了解MySQL缓存的工作原理:http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html

注意:您可能希望使用web.py环境和mysql控制台运行这些SQL。如果您看到不同的结果,则某些缓存的相关设置可能会有所不同。为什么?由于这些SQL在不同的会话中执行,因此MySQL可以在会话级别设置一些配置。