2014-12-08 3 views
0

약 20 초가 걸리는 sql select 쿼리가 있는데 결과를 신속하게 얻을 수 있도록 캐시 캐시에 mysql 캐시를 사용하고 싶습니다.web.py mysql query cache

my.cnf에서 일부 구성을 수행 한 후 Linux mysql 클라이언트 콘솔에서 select 쿼리를 실행할 때 성공합니다.

의 my.cnf에 추가 된 라인은 다음과 같습니다

query_cache_size = 268435456 
query_cache_type = 1 
query_cache_limit = 1048576 

을하지만 web.py 코드에서 쿼리를 실행할 때. 캐시 기능이 작동하지 않는 것처럼 보입니다. 즉, 실행 시간이 이전보다 짧지 않습니다.

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

내가 캐시를 사용하려면 모든 매개 변수를 추가해야합니까 : 아래

은 web.py 코드?

쿼리를 실행하기 전에 SET autocommit = 1을 실행하여이 문제를 해결했습니다. 이제 코드는 다음과 같습니다 당신이 my.cnf 파일을 변경 한 후

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 서버를 다시 시작 했습니까?

1.Make 확실히 쿼리 캐시가 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 필드는 표시기입니다. 캐시

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해야 하나의 상태 2.check

, 그렇지 않으면 not_cached해야 하나.

캐시가 ON이고 어떻게 든 당신이 캐시 된 결과를 얻을 수 없습니다 3.If는, 당신은 MySQL을 캐시 작동 방법에 대해 배울 필요가 있습니다 http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html

참고 : 당신은 당신의 web.py를 사용하여 이러한 SQL을 실행 할 수 있습니다 환경 및 MySQL 콘솔. 결과가 다르면 캐시 된 관련 설정이 다를 수 있습니다. 왜? 이러한 SQL은 다른 세션에서 실행되므로 MySQL은 세션 수준에서 일부 구성을 설정할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 mysql 서버를 다시 시작했다. 하지만 캐시 쿼리는 Linux mysql 클라이언트 콘솔에서 쿼리를 실행할 때만 작동합니다. 앞에서 말한 것처럼 web.py SQL 쿼리는 다른 세션에서 실행될 수 있으며 구성에 약간의 차이가있을 수 있습니다. 그래서 내 web.py 코드에서 코드가 누락 된 것 같지만 누락 된 부분이 없습니다 – lzy9059

+0

이러한 SQL을 실행하여 캐시 상태를 검사하고 캐시가 꺼져 있다고보고 한 경우 다른 SQL을 실행 해보십시오 SQL은'set session query_cache_type = ON'을 사용하여 도움이되는지 확인합니다. – xiaowl