共计 4186 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要介绍“采集 MySQL 数据库运行状态数据的方法”,在日常操作中,相信很多人在采集 MySQL 数据库运行状态数据的方法问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”采集 MySQL 数据库运行状态数据的方法”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
状态数据项
MySQL 数据库系统提供了数据采集的命令:SHOW STATUS; 或者直接读取虚拟数据库 informat_schema 对象 GLOBAL_STATUS(注:5.1 及以上版本) 的数据,我们队需要重点采集的数据进行一些类别划分。
1) SQL 语句执行量
(1). Queries
MySQL 服务器执行的所有 SQL 语句次数,包过存储过程执行的 SQL 语句,但是不包含命令 COM_PING 和 COM_STATISTICS 的执行次数;
(2). Questions
由客户端发送给服务器端执行的所有 SQL 语句次数,但是不包含存储过程执行的 SQL 语句,也不包含命令 COM_PING 和 COM_STATISTICS 的执行次数;
(3). Com_**** 统计
Com_insert mdash; 记录 INSERT INTO TABLE tablename VALUES(hellip;) hellip; 语句执行的次数;
Com_insert_select mdash; 记录 INSERT INTO TABLE tablename SELECT hellip; 语句执行的次数;
Com_delete mdash; 记录 DELETE [FROM] tablename hellip; 语句执行的次数;
Com_delete_multi mdash; 记录 DELETE [FROM] tablename1,tablename2 hellip; 语句执行的次数;
Com_select mdash; 记录 SELECT hellip;FROM tablename1 hellip; 语句执行的次数;
Com_update mdash; 记录 UPDATE tablename1 SET hellip; 语句执行的次数;
Com_update_multi mdash; 记录 UPDATE tablename1,tabkename2 hellip; SET hellip; 语句执行的次数;
2) 查询缓存
Qcache_hits mdash; 查询语句命中查询缓存的次数;
Qcache_inserts mdash; 查询语句及记录集加入到查询缓存的数量;
Qcache_lowmem_prunes mdash; 因查询缓内存容量不足,而不得不从查询缓存中删除的缓存记录数;
Qcache_not_cached mdash; 从查询缓存中没有找到对应缓存 SQL 语句的 SELECT 查询语句数量;
Qcache_queries_in_cache mdash; 有多少查询语句正缓存在查询缓存中;
3) MyISAM 引擎
Key_blocks_used mdash; 索引缓存区内块使用量,通过记录历史数据可以找出内存块使用情况;
Key_blocks_unused mdash; 索引缓存区内存未使用的量,可以推断出有索引缓存区的使用率;
Key_read_requests mdash; 直接通过索引缓存区获得相应的数据,也即数据库逻辑读 IO 的量;
Key_reads mdash; 无法通过索引缓存区获得相应的数据,必须读文件系统或磁盘上的数据,也
即数据库物理读的量;
Key_write_requests mdash; 直接通过修改索引缓存区中的索引值的逻辑写 IO 量;
Key_writes mdash; 无法通过直接修改索引缓存区中的索引值完成,必须直接修改文件系统或磁
盘上数据的物理写 IO 量;
4) InnoDB 引擎
Innodb_buffer_pool_read_ahead_rnd mdash; InnoDB 引擎后台读线程随机性读而产生的 IO 数量,一般发生在扫描一个表数据,以随机性的方式;
Innodb_buffer_pool_read_ahead_seq mdash; InnoDB 引擎后台读线程顺序读而产生的 IO 数量,一般发生在顺序全表扫描;
Innodb_buffer_pool_read_requests mdash; InnoDB 引擎数据的逻辑读 IO 量;
Innodb_buffer_pool_reads mdash; InnoDB 引擎数据的物理读 IO 量;
Innodb_buffer_pool_wait_free mdash; 当 Innodb_buffer_pool 中无可用的空闲内存块,且需要读或创建一个内存块,则需要刷新一页,再分配给需要的线程
进行写操作,这个时候就会发生等待而计数。因为 InnoDB 引擎表的数据都都是在 InnoDB 内存缓存区中进行读写操作,
然后由后台线程负责把数据写到磁盘上。
Innodb_buffer_pool_write_requests mdash; InnoDB 引擎数据写向 InnoDB_buffer_pool_size 的逻辑写 IO 量;
Innodb_rows_deleted mdash; InnoDB 引擎表数据被删除的行数;
Innodb_rows_inserted mdash; 向 InnoDB 引擎表增加的记录行数;
Innodb_rows_updated mdash; InnoDB 引擎表数据被修改的行数;
Innodb_rows_read mdash; 读取 InnoDB 引擎表中数据的行数,UPDATE、DELETE、OPTIMIZE 等会对数据表对象有数据读取的操作,都被计算在其内;
5) 事务相关
Com_commit mdash; 支持事务的引擎,进行的事务提交次数;
Com_rollback mdash; 支持事务的引擎,进行的事务回滚次数;
6) 临时表或文件
Created_tmp_files mdash; MySQL 系统创建的临时文件数量总和,不包含显示创建的临时表,另外临时文件转换成临时表的话,则不一定一一对应,
也不一定是三分之一的关系。若是系统隐患创建的临时表,则都是 MyISAM 格式的,所以会有三个临时文件; 若是指定
临时表存储引擎为 heap,则是一个临时文件;
Created_tmp_disk_tables mdash; MySQL 系统创建基于磁盘上的临时表数量,临时默认创建都是基于内存中,若是超过 tmp_table_size 或
max_heap_table_size 的大小,则会转化成基于磁盘的临时表;
Created_tmp_tables mdash; MySQL 系统创建的不管基于磁盘的,还是基于内存的,该值都增加;
7) 其他
Bytes_sent mdash; MySQL 服务器端发送给客户端的字节数;
Bytes_received mdash; 所有客户端发送给 MySQL 服务器端的字节数;
Slow_queries mdash; SQL 语句执行时间大于 long_query_time 值的数量;
Sort_range mdash; SQL 语句使用范围排序的数量;
Sort_rows mdash; SQL 语句引起数据排序的总行数;
Sort_scan mdash; 要进行数据排序而对表扫描的 SQL 执行次数;
Aborted_connects mdash; 客户端异常崩溃而没有正常关闭数据库连接线程的数量;
Connections mdash; 客户端尝试与 MySQL 服务器端建立连接的次数,失败的次数也算在其内;
Uptime mdash; mysqld 服务进程运行的时长,单位秒;
数据采集方式
状态性能数据的采集,不管用何办法都是执行 SHOW GLOBAL STATUS; 然后再对需要的数据项,通过 shell 脚本的方式获得;
或者
双击代码全选
1SELECT VARIABLE_NAME, VARIABLE_VALUE FROM information_schema. GLOBAL_STATUS WHERE VARIABLE_NAME IN (hellip;);
采集到的数据,我们还需要进行分类对待,一类数据项只为某个时间点的状态值,另外一类数据项为累计的值
数据展示分析
针对脚本程序自动采集的数据,作部分数据截图展示,以及把部分参数数据导成 CVS 格式,然后在 Windows 环境下绘制曲线图的方式,以便直观地对比分析,另外也可以自己开发一套程序或者借助其他绘图工具的方式绘制趋势图。
针对采集的数据,对部分参数(三个参数:Com_update、Innodb_buffer_pool_reads、Innodb_buffer_pool_read_requests) 做一个图形化分析的效果展示,我们可以通过 SQL 语句生成 cvs 格式的数据,比如针 对 Com_update 数据每秒平均执行次数的数据导出 SQL 语句:
双击代码全选
6SELECT M.CreateDate,M.total_num/N.total_num INTO OUTFILE com_update.cvs FROM performance_innodb M INNER JOIN(SELECT total_num,CreateDate FROM performance_innodb WHERE statu_item= Uptime AND CreateDate = 2011-10-12 AND CreateDate 2011-10-13 AND host_port=3308) N ON M.CreateDate=N.CreateDate WHERE host_port=3308 and statu_item= Com_update and M.CreateDate = 2011-10-12 AND M.CreateDate 2011-10-13 ;
1) Performance_innodb 表数据
2) Com_update 数据曲线图
3) Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests 曲线图
备注:
MySQL 数据库在跑热之后,且需要操作的业务数据基本都存储在内存中,为此 InnoDB 引擎表的物理 IO 读 / 每秒 相比 InnoDB 引擎表的逻辑 IO 读 / 每秒非常小,为此曲线图中看到几乎接近水平轴。
到此,关于“采集 MySQL 数据库运行状态数据的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!