mysql 查询脚本_mysql查询命中率查询脚本

2ff34e647e2e3cdfd8dca593e17d9b0a.png

当一个mysql的查询量很高时候,有很多种优化方案。

分库分表,主从分离等都是不错的选择。

主从分离情况下,我们怎么权衡一个DB够不够优秀呢?

通常我们会选择查询缓存命中率来作为读库的一个指标。

由于现在DB引擎都是Innodb居多。

所以下面都是以Innodb的角度来说。

MySql 缓存命中率是什么?

MySql查询读取磁盘的代价是很高的。

所以我们希望MySql尽可能的读取缓存。

缓存命中就是查询MySql的时候,直接从内存中得到结果返回。

计算公式 缓存命中率 = 读内存次数 / 查询总数。

一般来说。我们希望读库的缓存命中率达到 99.95% 以上。

MySql 缓存参数配置

查看当前缓存配置大小show variables like ‘innodb_buffer_pool_size’

1

2

3

4

5+-------------------------+------------+

| Variable_name | Value |

+-------------------------+------------+

| innodb_buffer_pool_size | 6442450944 |

+-------------------------+------------+

控制面板修改缓存大小SET GLOBAL innodb_buffer_pool_size=6442450944;

修改缓存大小方案修改mysql配置文档并重启mysql

在mysql控制面板修改配置,同时修改配置,不用重启

还有其他参数我们用不到

缓存命中率计算

根据公式 缓存命中率 = 读内存次数 / 查询总数 我们很容易算出命中率

读内存次数 = “Innodb_buffer_pool_reads”

查询总次数 = “Innodb_buffer_pool_read_requests”show status like ‘%pool_read%’

1

2

3

4

5

6+---------------------------------------+-------------+

| Variable_name | Value |

+---------------------------------------+-------------+

| Innodb_buffer_pool_read_requests | 42766114022 |

| Innodb_buffer_pool_reads | 566498466 |

+---------------------------------------+-------------+

但是这两个值是总的数量,并不是一段时间内的,参考价值不大,所以我们要取一段时间内的差值来算

命中率 = (第二次读内存次数 - 第一次读内存次数) / (第二次查询总数 - 第一次查询总数)

算了好多次,都是重复性的,有点繁琐,所以写了个脚本来算1

2

3

4

5

6

7

8

9

10

11MYSQL缓存命中查询脚本

请输入 mysql 用户/root xxx

请输入 mysql 密码/'' xxx

请输入 mysql 域名/localhost

请输入 mysql 端口/3306

请输入 间隔/60s 10

开始提取打点信息

第一次打点信息 请求数: 42766927561, 读磁盘数: 566510284

休眠10s

第二次打点信息 请求数: 42767040750, 读磁盘数: 566511295

命中率: 99.1068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值