热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql优化:Key_buffer_size

在mysql数据库中,mysqlkey_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面就将对mysqlKey_buffer_size参数的设置进行详细介绍
在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面就将对mysql Key_buffer_size参数的设置进行详细介绍。

下面为一台以MyISAM为主要存储引擎服务器的配置:

mysql> show variables like 'key_buffer_size';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| key_buffer_size | 72454144 |
+-----------------+----------+
1 row in set (0.25 sec)
分配了约70MB内存给mysql key_buffer_size,我们再看一下key_buffer_size的使用情况:


mysql> show global status like 'key_read%';
+-------------------+----------+
| Variable_name     | Value    |
+-------------------+----------+
| Key_read_requests | 39393115 |
| Key_reads         | 174565   |
+-------------------+----------+
2 rows in set (0.23 sec)
上面有2个结果值,这里解释一下它们各代表什么意思:


Key_read_requests:表示从缓存读取索引的请求次数

Key_reads:从磁盘读取索引的请求次数
知道了这2个参数各代表什么意思了,我们可以看到:一共有39393115个请求从缓存读取索引,174565个请求从磁盘读取索引。


让我们来计算一下索引未命中缓存的概率:

key_cache_miss_rate = Key_reads / Key_read_requests * 100%
通过上面的公式我们计算上面数据索引为命中缓存的概率值为:0.4431%,约250个索引读取请求就有一个直接读硬盘,这个值好像不是很理想。key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),所以理论来上来说,这个比值越小越好,但过小的话,难免造成内存浪费。


key_cache_miss_rate 的值固然能一部分的说明key_buffer_size是否合理,但仅仅以此就说明该值设置的合理的话,就过于片面了。因为这里忽略了两个问题:

1、比例并不显示数量的绝对值大小

2、计数器并没有考虑时间因素

虽说Key_read_requests大比小好,但是对于系统调优而言,更有意义的应该是单位时间内的Key_reads,即:

Key_reads / Uptime
具体查看方法:


[root@li411-195 ~]# /usr/local/mysql/bin/mysqladmin ext -uroot -p -ri10 | grep Key_reads
Enter password: 
| Key_reads                      | 174983       |
| Key_reads                      | 10           |
| Key_reads                      | 0            |
| Key_reads                      | 4            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
| Key_reads                      | 21           |
| Key_reads                      | 0            |
| Key_reads                      | 0            |
注:命令里的mysqladmin ext其实就是mysqladmin extended-status,你甚至可以简写成mysqladmin e。


其中第一行表示的是汇总数值,所以这里不必考虑,下面的每行数值都表示10秒内的数据变化。

为啥数据按10秒取样,而不是直接按1秒取样?由于时间段过小,数据变化比较剧烈,不容易直观估计大小,所以通常数据按照10秒或者60秒之类的时间段来取样是更好的。

对于我这个小站来说,流量小,这个数据结果值并不能说明什么问题。

除些之外,我们还可以参考下key_blocks_*参数:

mysql> show global status like 'key_blocks_u%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_blocks_unused | 28271 |
| Key_blocks_used   | 34395 |
+-------------------+-------+
Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数。从上面的数据可以看到Key_blocks_unused 并没有被完全使用,如果Key_blocks_unused 值为0,说明缓存都被使用了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:


Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%
根据以上公式,上面数据的计算结果值大概为55%,说明这里设置也不是很合理。其实这里的值也存在一些问题,就是没有考虑到时间问题,这个数据可能是访问量少的时候获取的,如果访问量大的时候数据结果值可能就又不一样了,所以也不能仅凭这个结果值来判断key_buffer_size值设置是否合理。
推荐阅读
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了MySQL数据库服务器(mysqld)和客户端(mysql)的区别,并提供了多种启动和关闭MySQL服务器的方法。通过这些方法,您可以更好地管理和维护MySQL数据库。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 赠书活动:《Oracle DBA工作笔记》签名版
    为了回馈读者,特此举办《Oracle DBA工作笔记》签名版赠书活动。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 操作系统如何通过进程控制块管理进程
    本文详细介绍了操作系统如何通过进程控制块(PCB)来管理和控制进程。PCB是操作系统感知进程存在的重要数据结构,包含了进程的标识符、状态、资源清单等关键信息。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文介绍了 Linux 系统中用于定期执行任务的 cron 服务及其配置方法。通过 crond 和 crontab 命令,用户可以轻松地安排系统和用户级别的周期性任务。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 本文介绍了如何在GitHub上设置多个SSH Key,以解决原有Key失效的问题,并确保不同项目使用不同的私钥进行安全访问。 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • Redis 脑裂现象及其应对策略
    本文探讨了 Redis 集群中的脑裂现象及其解决方案,包括脑裂的成因、影响以及如何通过配置项防止脑裂的发生。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
author-avatar
布尔熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有