温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

采集MySQL数据库运行状态数据的方法

发布时间:2021-08-19 20:26:04 来源:亿速云 阅读:197 作者:chen 栏目:数据库

这篇文章主要介绍“采集MySQL数据库运行状态数据的方法”,在日常操作中,相信很多人在采集MySQL数据库运行状态数据的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”采集MySQL数据库运行状态数据的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!


  状态数据项
  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 — 记录INSERT INTO TABLE tablename VALUES(…)…语句执行的次数;
  Com_insert_select — 记录INSERT INTO TABLE tablename SELECT …语句执行的次数;
  Com_delete — 记录DELETE [FROM] tablename…语句执行的次数;
  Com_delete_multi — 记录DELETE [FROM] tablename1,tablename2…语句执行的次数;
  Com_select — 记录SELECT …FROM tablename1…语句执行的次数;
  Com_update — 记录UPDATE tablename1 SET …语句执行的次数;
  Com_update_multi — 记录UPDATE tablename1,tabkename2 … SET …语句执行的次数;
  2) 查询缓存
  Qcache_hits — 查询语句命中查询缓存的次数;
  Qcache_inserts — 查询语句及记录集加入到查询缓存的数量;
  Qcache_lowmem_prunes — 因查询缓内存容量不足,而不得不从查询缓存中删除的缓存记录数;
  Qcache_not_cached — 从查询缓存中没有找到对应缓存SQL语句的SELECT查询语句数量;
  Qcache_queries_in_cache — 有多少查询语句正缓存在查询缓存中;
  3) MyISAM引擎
  Key_blocks_used — 索引缓存区内块使用量,通过记录历史数据可以找出内存块使用情况;
  Key_blocks_unused — 索引缓存区内存未使用的量,可以推断出有索引缓存区的使用率;
  Key_read_requests — 直接通过索引缓存区获得相应的数据,也即数据库逻辑读IO的量;
  Key_reads — 无法通过索引缓存区获得相应的数据,必须读文件系统或磁盘上的数据,也
  即数据库物理读的量;
  Key_write_requests —直接通过修改索引缓存区中的索引值的逻辑写IO量;
  Key_writes — 无法通过直接修改索引缓存区中的索引值完成,必须直接修改文件系统或磁
  盘上数据的物理写IO量;
  4) InnoDB引擎
  Innodb_buffer_pool_read_ahead_rnd — InnoDB引擎后台读线程随机性读而产生的IO数量,一般发生在扫描一个表数据,以随机性的方式;
  Innodb_buffer_pool_read_ahead_seq — InnoDB引擎后台读线程顺序读而产生的IO数量,一般发生在顺序全表扫描;
  Innodb_buffer_pool_read_requests — InnoDB引擎数据的逻辑读IO量;
  Innodb_buffer_pool_reads — InnoDB引擎数据的物理读IO量;
  Innodb_buffer_pool_wait_free — 当Innodb_buffer_pool中无可用的空闲内存块,且需要读或创建一个内存块,则需要刷新一页,再分配给需要的线程
  进行写操作,这个时候就会发生等待而计数。因为InnoDB引擎表的数据都都是在InnoDB内存缓存区中进行读写操作,
  然后由后台线程负责把数据写到磁盘上。
  Innodb_buffer_pool_write_requests — InnoDB引擎数据写向InnoDB_buffer_pool_size的逻辑写IO量;
  Innodb_rows_deleted — InnoDB引擎表数据被删除的行数;
  Innodb_rows_inserted — 向InnoDB引擎表增加的记录行数;
  Innodb_rows_updated — InnoDB引擎表数据被修改的行数;
  Innodb_rows_read — 读取InnoDB引擎表中数据的行数,UPDATE、DELETE、OPTIMIZE等会对数据表对象有数据读取的操作,都被计算在其内;
  5) 事务相关
  Com_commit — 支持事务的引擎,进行的事务提交次数;
  Com_rollback — 支持事务的引擎,进行的事务回滚次数;
  6) 临时表或文件
  Created_tmp_files — MySQL系统创建的临时文件数量总和,不包含显示创建的临时表,另外临时文件转换成临时表的话,则不一定一一对应,
  也不一定是三分之一的关系。若是系统隐患创建的临时表,则都是MyISAM格式的,所以会有三个临时文件;若是指定
  临时表存储引擎为heap,则是一个临时文件;
  Created_tmp_disk_tables — MySQL系统创建基于磁盘上的临时表数量,临时默认创建都是基于内存中,若是超过tmp_table_size或
  max_heap_table_size的大小,则会转化成基于磁盘的临时表;
  Created_tmp_tables — MySQL系统创建的不管基于磁盘的,还是基于内存的,该值都增加;
  7) 其他
  Bytes_sent — MySQL服务器端发送给客户端的字节数;
  Bytes_received — 所有客户端发送给MySQL服务器端的字节数;
  Slow_queries — SQL语句执行时间大于long_query_time值的数量;
  Sort_range — SQL语句使用范围排序的数量;
  Sort_rows — SQL语句引起数据排序的总行数;
  Sort_scan — 要进行数据排序而对表扫描的SQL执行次数;
  Aborted_connects — 客户端异常崩溃而没有正常关闭数据库连接线程的数量;
  Connections — 客户端尝试与MySQL服务器端建立连接的次数,失败的次数也算在其内;
  Uptime — mysqld服务进程运行的时长,单位秒;
  数据采集方式
  状态性能数据的采集,不管用何办法都是执行SHOW GLOBAL STATUS;然后再对需要的数据项,通过shell脚本的方式获得;
  或者

双击代码全选
1SELECT VARIABLE_NAME, VARIABLE_VALUE FROM information_schema. GLOBAL_STATUS WHERE VARIABLE_NAME IN (…);

  采集到的数据,我们还需要进行分类对待,一类数据项只为某个时间点的状态值,另外一类数据项为累计的值

  数据展示分析
  针对脚本程序自动采集的数据,作部分数据截图展示,以及把部分参数数据导成CVS格式,然后在Windows环境下绘制曲线图的方式,以便直观地对比分析,另外也可以自己开发一套程序或者借助其他绘图工具的方式绘制趋势图。
   针对采集的数据,对部分参数(三个参数:Com_update、Innodb_buffer_pool_reads、 Innodb_buffer_pool_read_requests)做一个图形化分析的效果展示,我们可以通过SQL语句生成cvs格式的数据,比如针 对Com_update数据每秒平均执行次数的数据导出SQL语句:

双击代码全选
1 2 3 4 5 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数据库运行状态数据的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI