2014-12-08 98 views
0

我有一個SQL選擇查詢大約需要20秒,我想用mysql緩存來緩存結果,所以我可以很快得到結果。web.py 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); 
+0

你做了什麼使結果緩存在mysql客戶端控制檯? – xiaowl 2014-12-08 07:00:33

+0

我向my.cnf添加以下行:query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 – lzy9059 2014-12-08 07:12:09

回答

0

您是否在更改my.cnf文件後重新啓動了mysql服務器?

下面是一個簡單的過程,它可以幫助你找出問題出在哪裏:

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.檢查緩存

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運行這些SQLS環境和mysql控制檯。如果您看到不同的結果,則某些緩存的相關設置可能會有所不同。爲什麼?由於這些SQL在不同的會話中執行,因此MySQL可以在會話級別設置一些配置。

+0

感謝您的回答。我已經重啓了mysql服務器。但是,只有在Linux mysql客戶端控制檯中運行查詢時,緩存查詢纔有效。就像你說的,web.py sql查詢可能會在不同的會話中執行,並且可能存在一些配置差異。所以我猜可能在我的web.py代碼中缺少一些代碼,但我不會錯過 – lzy9059 2014-12-09 02:15:21

+0

如果您運行了用於檢查緩存狀態的這些SQL,並且它確實報告緩存爲OFF,那麼您可能需要嘗試運行另一個SQL'set session query_cache_type = ON'來查看它是否有幫助。 – xiaowl 2014-12-09 03:14:10