`
tw5566
  • 浏览: 448646 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

mysql查询缓存打开、设置、参数查询、性能变量意思

阅读更多

一般,我们会把 query_cache_type 设置为 ON,默认情况下应该是ON
mysql> select @@query_cache_type;
+--------------------+
| @@query_cache_type |
+--------------------+
| ON |
+--------------------+
user_name from users where user_id = '100';
这样 当我们执行 select id,name from tableName; 这样就会用到查询缓存。
①在 query_cache_type 打开的情况下,如果你不想使用缓存,需要指明
select sql_no_cache id,name from tableName;



第二: 系统变量 have_query_cache 设置查询缓存是否可用

+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
上面的显示,表示设置查询缓存是可用的。

表示查询缓存大小,也就是分配内存大小给查询缓存,如果你分配大小为0,

mysql> select @@global.query_cache_size;
+---------------------------+
| @@global.query_cache_size |
+---------------------------+
| 16777216 |
+---------------------------+
上面是 mysql6.0设置默认的,之前的版本好像默认是0的,那么就要自己设置下。

再次查看下 select @@global.query_cache_size;
+---------------------------+
| @@global.query_cache_size |
+---------------------------+
| 999424 |
+---------------------------+
显示我们设置新的大小,表示设置成功。

例如: 如果查询结果很大, 也缓存????这个明显是不可能的。
MySql 可以设置一个最大的缓存值,当你查询缓存数结果数据超过这个值就不会
进行缓存。缺省为1M,也就是超过了1M查询结果就不会缓存。

+----------------------------+
| @@global.query_cache_limit |
+----------------------------+
| 1048576 |
+----------------------------+
这个是默认的数值,如果需要修改,就像设置缓存大小一样设置,使用set
重新指定大小。
好了,通过4个步骤就可以 打开了查询缓存,具体值的大小和查询的方式 这个因不同
的情况来指定了。

mysql> show variables like '%query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 16777216 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
6 rows in set (0.00 sec)

mysql> show status like '%Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 11       |
| Qcache_free_memory      | 16610552 |
| Qcache_hits             | 10       |
| Qcache_inserts          | 155      |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 21       |
| Qcache_queries_in_cache | 111      |
| Qcache_total_blocks     | 256      |
+-------------------------+----------+
8 rows in set (0.00 sec)

Qcache_free_blocks:目前还处于空闲状态的 Query Cache 中内存 Block 数目

Qcache_hits:Query Cache 命中次数

Qcache_lowmem_prunes:当 Query Cache 内存容量不够,需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数

Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 数量



检查是否从查询缓存中受益的最简单的办法就是检查缓存命中率

的情况进行递增

mysql> show status like '%Com_select%';

| Variable_name | Value |

| Com_select    | 1     |



query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据 查询,就容易造成内存碎片和浪费。

查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%

如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。

查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%

查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且 Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。

查询缓存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%

示例服务器 查询缓存碎片率 = 20.46%,查询缓存利用率 = 62.26%,查询缓存命中率 = 1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。

引用一段前辈的话

优化提示:
如果Qcache_lowmem_prunes 值比较大,表示查询缓存区大小设置太小,需要增大。
如果Qcache_free_blocks 较多,表示内存碎片较多,需要清理,flush query cache
根据我看的 《High Performance MySQL》中所述,关于query_cache_min_res_unit大小的调优
,书中给出了一个计算公式,可以供调优设置参考:
query_cache_min_res_unit = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

 

分享到:
评论

相关推荐

    高性能MySQL(第3版).part2

    7.12.3什么情况下查询缓存能发挥作用313 7.12.4如何配置和维护查询缓存316 7.12.5InnoDB和查询缓存319 7.12.6通用查询缓存优化320 7.12.7查询缓存的替代方案321 7.13总结321 …… 第8章优化服务器设置325 第...

    MySQL高速缓存启动方法及参数详解(query_cache_size)

    会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...

    2021年MySQL高级教程视频.rar

    04.MySQL高级查询缓存配置参数.avi 05.MySQL高级查询缓存开启查询缓存.avi 06.MySQL高级查询缓存SELECT选项.avi 07.MySQL高级查询缓存失效场景.avi 08.MySQL高级内存优化优化原则.avi 09.MySQL高级内存优化MyISAM...

    解析mysql 缓存如何使用内存

    先说明2点开启缓存也会带来开销,主要表现在一下方面读取在查询...下面讲一下mysql缓存如何使用内存查询缓存的内存池被分为大小可变的块,每一个快都知道自己的大小,指向前一个和后一个逻辑块和物理块 的指针,服务

    mysql数据库my.cnf配置文件

    # MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64 # 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件...

    MySQL服务器性能优化.docx

    MySQL服务器性能优化全文共3页,当前为第1页。MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化 MySQL...

    MYSQL

    10.2.3 调节服务器参数 10.2.4 MySQL 怎样打开和关闭数据库表 10.2.5 在同一个数据库中创建大量数据库表的缺点 10.2.6 为什么有这么多打开的表? 10.2.7 MySQL 怎样使用内存 10.2.8 MySQL ...

    MYSQL v4.1中文参考手册(CHM)

    列类型与函数索引 6 MySQL 语言参考 6.1 语言结构 6.1.1 文字:怎么写字符串与数字 6.1.1.1 字符串 ...6.9.2 查询缓存设置 6.9.3 在 SELECT 中的查询缓存选项 6.9.4 查询缓存的状态和维护

    MySQL中文参考手册

    o 7.2 用户变量 o 7.3 列类型 + 7.3.1 列类型的存储要求 + 7.3.5 数字类型 + 7.3.6 日期和时间类型 # 7.3.6.1 问题和日期类型 # 7.3.6.2 DATETIME,DATE和TIMESTAMP类型 # 7.3.6.3 TIME类型 # 7.3.6.4 YEAR...

    mysql 5.7数据库免安装版

    #开启查询缓存 explicit_defaults_for_timestamp=true skip-grant-tables (3)生成data目录,DOS下mysqld --initialize-insecure --user=mysql (4)Service successfully installed注册,mysqld -install (5)运行...

    MySQL中文参考手册.chm

    10.2.3 调节服务器参数 10.2.4 MySQL 怎样打开和关闭数据库表 10.2.5 在同一个数据库中创建大量数据库表的缺点 10.2.6 为什么有这么多打开的表? 10.2.7 MySQL 怎样使用内存 10.2.8 ...

    MySQL内幕揭秘:探索MySQL调优指南,解锁MySQL的强大功能

    1、MySQL大事记 1994年:Michael Widenius...2013年:MySQL 5.7发布,加入了JSON数据类型、有效地调整排序缓存和更好的性能优化等。 2018年:MySQL 8.0发布,提供窗口函数、变量范围和原生支持多种数据类型等新特性。

    MySQL内存及虚拟内存优化设置参数

    mysql 优化调试命令   1、mysqld –verbose –help 这个命令生成所有mysqld选项和可配置变量的列表 2、通过连接它并执行这个命令,可以看到实际上使用的变量的值: mysql> SHOW VARIABLES; 还可以通过下面的语句...

    node-red-contrib-stackhero-mysql:Node-RED节点,用于读取和写入MySQL或MariaDB数据库。 兼容TLS(SSL)和“缓存SHA2密码”身份验证方法

    将查询放在topic变量中,如果有参数,请将其放在payload变量的对象中。 您将在payload输出变量中获得结果。 例子: msg . topic = 'SELECT * FROM `users` WHERE `name` = :name AND `age` > :age;' ;msg . paylo

    php、mysql、Apache三者集成的配置程序APMServ 5.2.6(1)(分两个压缩包)

    APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6、MySQL 5.1.28 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    MYSQL配置参数优化详解

    MySQL参数优化对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳的效果。 1)连接请求的变量 1、max_...

    MySQL 配置优化(多个参数)

    下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。 1. 连接请求的变量: 1) max_connections MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接...

Global site tag (gtag.js) - Google Analytics