数据库Mysql性能优化详解_Mysql

在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面就将对mysql Key_buffer_size参数的设置进行详细介绍下面为一台以MyISAM为主要存储引擎服务器的配置:

mysql> show variables like 'key_buffer_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| key_buffer_size | |
+-----------------+------------+ 

分配了512MB内存给mysql key_buffer_size,我们再看一下key_buffer_size的使用情况:

mysql> show global status like 'key_read%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_read_requests | | //从缓存读取索引的请求次数。
| Key_reads | | //从磁盘读取索引的请求次数。
+------------------------+-------------+ 

一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:

key_cache_miss_rate = Key_reads / Key_read_requests * 100% 

比如上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取请求才有一个直接读硬盘,已经很BT了,key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),所以理论来上来说,这个比值越小越好,但过小的话,难免造成内存浪费。

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

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

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

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

Key_reads / Uptime

具体查看方法如下:

[root@web mysql]# mysqladmin ext -uroot -p -ri | grep Key_reads
Enter password:
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | | 

注:命令里的mysqladmin ext其实就是mysqladmin extended-status,你甚至可以简写成mysqladmin e。

其中第一行表示的是汇总数值,所以这里不必考虑,下面的每行数值都表示10秒内的数据变化,从这份数据可以看出每10秒系统大约会出现500次Key_reads访问,折合到每1秒就是50次左右,至于这个数值到底合理与否,就由服务器的磁盘能力而定了。(注:我这里之所以数据变化较大,是因为有update等语句造成了表锁而导致下个时间段内的查询数猛增。)

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

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

mysql> show global status like 'key_blocks_u%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_blocks_unused | |
| Key_blocks_used | |
+------------------------+-------------+ 

Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:

Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80% 

笔者注:

查看簇(文件系统块,block)的大小(字节数)

Centos中有以下几种方法:

#tune2fs /dev/sda1 | grep "block size"
#dumpe2fs /dev/sda1 | grep "block size"

理论上文件系统块是扇区的倍数

mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何使用mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替)了解MySQL的运行状态。

1. 使用-r/-i参数

使用mysqladmin extended-status命令可以获得所有MySQL性能指标,即show global status的输出,不过,因为多数这些指标都是累计值,如果想了解当前的状态,则需要进行一次差值计算,这就是mysqladmin extended-status的一个额外功能,非常实用。默认的,使用extended-status,看到也是累计值,但是,加上参数-r(--relative),就可以看到各个指标的差值,配合参数-i(--sleep)就可以指定刷新的频率,那么就有如下命令:

mysqladmin -uroot -r -i -pxxx extended-status
+------------------------------------------+----------------------+
| Variable_name | Value |
+------------------------------------------+----------------------+
| Aborted_clients | |
| Com_select | |
| Com_insert | |
......
| Threads_created | |
+------------------------------------------+----------------------+ 

2. 配合grep使用

配合grep使用,我们就有:

mysqladmin -uroot -r -i -pxxx extended-status \
grep "Questions\|Queries\|Innodb_rows\|Com_select \|Com_insert \|Com_update \|Com_delete "
| Com_delete | |
| Com_delete_multi | |
| Com_insert | |
| Com_select | |
| Com_update | |
| Innodb_rows_deleted | |
| Innodb_rows_inserted | |
| Innodb_rows_read | |
| Innodb_rows_updated | |
| Queries | |
| Questions | 2721 | 

当然,还可以配合awk等,笔者在这里就不一一介绍了,有情趣的朋友可以参考一下其它文档。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql优化
MySQL性能
mysql数据库性能优化、mysql数据库优化、mysql数据库优化方案、mysql数据库的优化、mysql数据库优化方法,以便于您获取更多的相关知识。

时间: 2024-08-02 08:38:12

数据库Mysql性能优化详解_Mysql的相关文章

MySQL 5.5.x my.cnf参数配置优化详解_Mysql

一直有耳闻MySQL5.5的性能非常NB,所以近期打算测试一下,方便的时候就把bbs.kaoyan.com升级到这个版本的数据库.今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下,大家在对mysql服务器进行优化的时候可以作为参考,并根据实际情况对其中的一些参数进行调整.(特别备注:以下原文中有些参数事实上不适用于mysql5.5,不知

CentOS 7.0下使用yum安装mysql的方法详解_Mysql

CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mys

19个MySQL性能优化要点解析_Mysql

以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习. 1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的.因为,我们某些查询语句会让MySQL不使用缓存.请看下面的示例: // 查询缓存不开启 $r = mysq

Mysql性能优化方案分享_Mysql

网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:mysql> show variables; 一.慢查询 m

在Linux系统安装MySql步骤截图详解_Mysql

如下是我工作中的记录,介绍的是linux系统下使用官方编译好的二进制文件进行安装MySql的安装过程和安装截屏,这种安装方式速度快,安装步骤简单! 需要的朋友可以按照如下步骤进行安装,可以快速安装MySql,希望可以帮助大家:)! 1.下载mysql的linux版本的二进制安装包: 地址:http://dev.mysql.com/downloads/mysql/ 这里我将安装包重命名为:tingyun-mysql-5.6.22.tar.gz 说明:根据自己需要可以不进行重命名操作 2.解压安装包

MySQL数据库优化详解_Mysql

mysql表复制                                                                               复制表结构+复制表数据 mysql> create table t3 like t1; mysql> insert into t3 select * from t1; mysql索引                                                                       

MySQL 5.5.49 大内存优化配置文件优化详解_Mysql

一.配置文件说明 my-small.cnf my-medium.cnf my-large.cnf my-huge.cnf my-innodb-heavy-4G.cnf  二.详解 my-innodb-heavy-4G.cnf三.配置文件优化 注:环境说明,CentO5.5 x86_64+MySQL-5.5.32 相关软件下载:http://yunpan.cn/QtaCuLHLRKzRq 一.配置文件说明 Mysql-5.5.49是Mysql5.5系列中最后一个版本,也是最后一个有配置文件的版本,

MySQL日志管理详解_Mysql

日志文件对于一个服务器来说是非常重要的,它记录着服务器的运行信息,许多操作都会写日到日志文件,通过日志文件可以监视服务器的运行状态及查看服务器的性能,还能对服务器进行排错与故障处理,MySQl中有六种不同类型的日志. 一.日志种类 ---–> 1,错误日志:记录启动.运行或停止时出现的问题,一般也会记录警告信息. ---–> 2,一般查询日志:记录建立的客户端连接和执行的语句. ---–> 3,慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询,

3步搞定纯真IP数据导入到MySQL的方法详解_Mysql

前提: 你会用vi. 很明显,本文是在Linux下测试通过的.本文用的是MySQL命令行工具,如果你不会,用phpMyAdmin应该也可以. 第1步: 下载纯真IP数据,解压存成ip.txt. 详解:这一步不用详解了吧.如果你这一步都不会,下面就不用看了. 第2步: 用vi 编辑 ip.txt. # vi ip.txt 在vi界面下输入如下命令: :%s/\s\+/;/ 一共重复输入3次. 存盘退出: :wq 详解:ip.txt有4列.分别是起始ip,结束ip,地区,说明.列之间用不等数量的空格