gpt4 book ai didi

python - web.py mysql 查询缓存

转载 作者:行者123 更新时间:2023-11-29 23:20:28 26 4
gpt4 key购买 nike

我有一个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);

最佳答案

更改 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.如果缓存打开并且不知何故无法获取缓存结果,您可能需要了解MySQL的缓存是如何工作的:http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html

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

关于python - web.py mysql 查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27352723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com