Query Cache(QC)
有如下规则,如果数据表被更改,那么和这个数据表相关的全部Cache全部都会无效,并删除之。这里“数据表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。举个例子,如果数据表posts访问频繁,那么意味着它的很多数据会被QC缓存起来,但是每一次posts数据表的更新,无论更新是不是影响到了cache的数据,都会将全部和posts表相关的cache清除。如果你的数据表更新频繁的话,那么Query Cache将会成为系统的负担。有实验表明,糟糕时,QC会降低系统13%[1]的处理能力。
Query Cache相关参数:
query_cache_size QC占用空间大小,通过将其设置为0关闭QC功能
query_cache_type 0表示关闭QC;1表示正常缓存;2表示SQL_CACHE才缓存
query_cache_limit 最大缓存结果集
query_cache_min_res_unit 手册上说,QC会按照这个值分配缓存block的大小。
Qcache_lowmem_prunes 这是一个状态变量(show status),当缓存空间不够需要
释放旧的缓存时,该值会自增。
Qcache_hits –表示sql在缓存中直接得到结果,不需要再去解析
have_query_cache –查询缓存是否可用
query_cache_limit –可缓存具体查询结果的最大值
query_cache_size –查询缓存的大小
query_cache_type –阻止或是支持查询缓存
set global query_cache_size = 600000; –设置缓存内存
set session query_cache_type = ON; –开启查询缓存
Qcache_free_blocks 缓存中相邻内存块的个数。数目大说明可能有碎片。
FLUSH QUERY CACHE 会对缓存中的碎片进行整理,从而得到一个空闲块。
Qcache_free_memory 缓存中的空闲内存。
Qcache_hits 每次查询在缓存中命中时就增大。
Qcache_inserts 每次插入一个查询时就增大。命中次数除以插入次数就是不中比率;
用1 减去这个值就是命中率。在上面这个例子中,
大约有 87% 的查询都在缓存中命中。
Qcache_lowmem_prunes 缓存出现内存不足并且必须要进行清理以便为更多查询提供空
间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就
表示可能碎片非常严重,或者内存很少。(上面的 free_blocks 和
free_memory 可以告诉您属于哪种情况)。
Qcache_not_cached 不适合进行缓存的查询的数量,通常是由于这些查询不是
SELECT 语句。
Qcache_queries_in_cache 当前缓存的查询(和响应)的数量。
Qcache_total_blocks 缓存中块的数量。
1 通过配置实现:只对“数据变动少,select多”的table开启cache功能。(这个能否通过配置实现,还需要调查,在mysql手册中似乎没有提到)
2 配置query_cache_type,同时改写程序。
query_cache_type 0 代表不使用缓冲, 1 代表使用缓冲,2 代表根据需要使用。
设置 1 代表缓冲永远有效,如果不需要缓冲,就需要使用如下语句:
SELECT SQL_NO_CACHE * FROM my_table WHERE …
如果设置为 2 ,需要开启缓冲,可以用如下语句:
SELECT SQL_CACHE * FROM my_table WHERE …
So,只要把query_cache_type设置为2,然后在需要提高select速度的地方,使用:
SELECT SQL_CACHE * FROM…
【mysql cache调试笔记】
1 可以使用下列命令开启mysql的select cache功能:
SET GLOBAL query_cache_size = 102400000;
因为当query_cache_size默认为0时,是不开启cache功能的。
2 调试:
查看cache的设置:
show variables like ‘%query_cache%’;
性能监控:
show status like ‘%Qcache%’;
3 mysql cache的清理:
可以使用FLUSH QUERY CACHE语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。
RESET QUERY CACHE语句从查询缓存中移出所有查询。FLUSH TABLES语句也执行同样的工作。
分享到:
相关推荐
它不仅支持常见的数据库系统,如MySQL、PostgreSQL、Oracle、SQL Server等,还特别强调对Cache的支持。Cache是由InterSystems公司开发的一种高性能、实时的数据库系统,广泛应用于医疗、金融和其他需要处理大量实时...
SqlDbx-new.exe工具, 可以连接各种数据库,如Oracle/Mysql/Cache等 上传给大家方便下载
MySQL的SQL优化是数据库管理中的重要环节,尤其对于有经验的开发者来说,了解并掌握这一技能可以显著提升数据库性能,减少资源消耗。SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解...
SQLDBX是一款强大的数据库管理工具,它允许用户方便地连接并操作多种类型的数据库系统,包括SQL SERVER的各种版本、Oracle的不同版本以及MYSQL等。这款软件以其高效、易用和跨平台的特点,深受数据库管理员和开发...
strcpy(insertSQL, "insert into HostCache(SessionID, ChannelID, ISPType, " "ExternalIP, ExternalPort, InternalIP, InternalPort) " "values(?, ?, ?, ?, ?, ?, ?)"); mysql_stmt_prepare(m_stInsertStmt, ...
3. **调整MySQL配置**:根据服务器硬件资源和应用需求,合理调整MySQL的配置参数,如增加缓冲池大小,优化innodb_buffer_pool_size、query_cache_size等。 4. **资源限制检查**:检查操作系统设置,确保MySQL有足够...
简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。...
### MySQL开发者SQL权威指南 附录知识点解析 #### 一、概述 《MySQL开发者SQL权威指南》这本书旨在为MySQL数据库的开发人员提供详尽的SQL语法指导与实践建议。本书的附录部分提供了额外的重要信息,包括SQL语法的...
3. 配置优化:调整MySQL服务器的配置参数,如innodb_buffer_pool_size、max_connections、query_cache_size等,以适应特定的工作负载。定期检查和调整这些设置,以保持数据库的最佳性能。 4. 硬件优化:考虑使用更...
2. 查询缓存(Query Cache):MySQL可以缓存已执行过的查询结果,但对高并发环境可能并不适用,因为维护缓存会消耗资源。 3. 锁机制:MySQL采用多种锁策略,如表锁、行锁、读写锁等,以实现并发控制和数据一致性。 ...
确保其他相关配置如`useOldSyntax`、`sqlMode`等正确设置,以便Mycat能以兼容MySQL 8.0的方式运行。 4. **重启Mycat服务**:完成修改后,在Mycat的bin目录下执行重启命令,如`./mycat start`,以使更改生效。 5. *...
本文将探讨从Oracle SQL优化到MySQL SQL优化的共性和差异,主要关注体系结构、元数据、统计信息和执行计划等方面。 首先,Oracle数据库以其强大的功能和稳定性在国内长期占据主导地位,其体系结构包括用户进程、...
- **table_cache**:用于设置缓存表的数量,对于提高多表查询的性能至关重要。默认值较小,可根据实际情况调整到更大的值(如1024)。 - **key_buffer_size**:控制索引缓存的大小,对MyISAM表的性能有显著影响。...
MySQL的核心功能包括数据存储、管理和检索,它使用SQL(结构化查询语言)进行操作,这是一种标准化的语言,用于创建、更新和查询数据库。MySQL支持多种存储引擎,如InnoDB(默认,支持事务处理)、MyISAM(不支持...
MySQL使用SQL(结构化查询语言)作为其主要的查询语言,支持多种操作系统和编程语言。 在MySQL配置中,有一些参数直接影响到SQL语句的处理和数据库的性能。以下是一些关键配置项的详细解释: 1. **back_log**:此...
MySQL的binlog(二进制日志)是数据库系统中至关重要的组件,它记录了所有对数据库进行修改的SQL语句,除了数据查询语句。binlog的主要功能在于支持数据库的主从复制和数据的增量恢复,确保数据的高可用性和一致性。...
本文将深入探讨MySQL中的两个重要配置参数:thread_cache和table_cache,它们对于数据库性能的影响及优化策略。 一、thread_cache(线程缓存) thread_cache是MySQL为了提升客户端请求创建连接时的性能而设计的一...
会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...
在这里,“SQL_CACHE”是一个MySQL的查询提示指令,用于强制MySQL在查询结果中使用内存中的缓存数据。如果启用了查询缓存,指定SQL_CACHE的查询语句可能会更快地执行,因为它直接读取内存中的缓存数据,避免了实时...