mysql-性能监控、日志

本文详细讲解了MySQL性能监控工具如showprofiles和Performanceschema的使用,涉及SQL执行分析、索引监控、日志(redolog、undolog和binlog)、慢查询日志设置。还介绍了如何通过Performance_schema获取各类SQL执行统计,以及关键性能指标的监控方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

性能监控

show profiles

show profile默认是关闭的,并且开启后只存活于当前会话,也就说每次使用前都需要开启
使用前开启:set profiling=1
再使用show profiles所有语句以及对应的执行时间
在这里插入图片描述
查看某条语句具体执行的所有信息:show profile all for query query_id
all:所有信息(cpu,block…)

show processlist

查看数据库的连接信息
在这里插入图片描述

在这里插入图片描述

Performance schema

默认是开启的 mysql系统会创建名为performance_schema的数据库,用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况
在这里插入图片描述
其中包含87张表,表中的数据不会存入磁盘而是在内存中存储,这些表大概可以分为以下几类:
show tables like '%statement%';
语句事件记录表,这些表记录了语句事件信息,当前语句事件表events_statements_current、历史语句事件表events_statements_history和长语句历史事件表events_statements_history_long、以及聚合后的摘要表summary,其中,summary表还可以根据帐号(account),主机(host),程序(program),线程(thread),用户(user)和全局(global)再进行细分)
show tables like '%wait%';
等待事件记录表,与语句事件类型的相关记录表类似:

show tables like '%stage%';
–阶段事件记录表,记录语句执行的阶段事件的表

show tables like '%transaction%';
–事务事件记录表,记录事务相关的事件的表

show tables like '%file%';
–监控文件系统层调用的表

show tables like '%memory%';
–监视内存使用的表

show tables like '%setup%';
–动态对performance_schema进行配置的配置表

实践

–1、哪类的SQL执行最多?


SELECT DIGEST_TEXT,COUNT_STAR,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–2、哪类SQL的平均响应时间最多?

SELECT DIGEST_TEXT,AVG_TIMER_WAIT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–3、哪类SQL排序记录数最多?

SELECT DIGEST_TEXT,SUM_SORT_ROWS FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–4、哪类SQL扫描记录数最多?

SELECT DIGEST_TEXT,SUM_ROWS_EXAMINED FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–5、哪类SQL使用临时表最多?

SELECT DIGEST_TEXT,SUM_CREATED_TMP_TABLES,SUM_CREATED_TMP_DISK_TABLES FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–6、哪类SQL返回结果集最多?

SELECT DIGEST_TEXT,SUM_ROWS_SENT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC

–7、哪个表物理IO最多?

SELECT file_name,event_name,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE FROM file_summary_by_instance ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC

–8、哪个表逻辑IO最多?

SELECT object_name,COUNT_READ,COUNT_WRITE,COUNT_FETCH,SUM_TIMER_WAIT FROM table_io_waits_summary_by_table ORDER BY sum_timer_wait DESC

–9、哪个索引访问最多?

SELECT OBJECT_NAME,INDEX_NAME,COUNT_FETCH,COUNT_INSERT,COUNT_UPDATE,COUNT_DELETE FROM table_io_waits_summary_by_index_usage ORDER BY SUM_TIMER_WAIT DESC

–10、哪个索引从来没有用过?

SELECT OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME FROM table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NOT NULL AND COUNT_STAR = 0 AND OBJECT_SCHEMA <> 'mysql' ORDER BY OBJECT_SCHEMA,OBJECT_NAME;

–11、哪个等待事件消耗时间最多?

SELECT EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT,AVG_TIMER_WAIT FROM events_waits_summary_global_by_event_name WHERE event_name != 'idle' ORDER BY SUM_TIMER_WAIT DESC

–12-1、剖析某条SQL的执行情况,包括statement信息,stege信息,wait信息

SELECT EVENT_ID,sql_text FROM events_statements_history WHERE sql_text LIKE '%count(*)%';

–12-2、查看每个阶段的时间消耗

SELECT event_id,EVENT_NAME,SOURCE,TIMER_END - TIMER_START FROM events_stages_history_long WHERE NESTING_EVENT_ID = 1553;

–12-3、查看每个阶段的锁等待情况

SELECT event_id,event_name,source,timer_wait,object_name,index_name,operation,nesting_event_id FROM events_waits_history_longWHERE nesting_event_id = 1553;

索引监控

show status like '%handler_read%'

Handler_read_first		8	#通过index获取索引的次数
Handler_read_key		10	#读取索引第一个条目的次数
Handler_read_last		0	#读取索引最后一个条目的次数
Handler_read_next		96	#通过索引读取下一条数据的次数
Handler_read_prev		0	#通过索引读取上一条数据的次数
Handler_read_rnd		5	#从固定位置读取数据的次数
Handler_read_rnd_next	4306#从数据节点读取下一条数据的次数

Handler_read_key和Handler_read_rnd_next的值越高越好

日志

redolog、undolog

这两个日志是innodb引擎独有的,就是能够支持事务
redolog:记录的是对数据的修改(增删改)操作;保证事务的持久性(事务提交后还没落盘就宕机,重启后根据redolog重新落盘)
循环写:读写文件都是先写进日志缓冲区、再写入内核缓冲区、最后写入磁盘中;当磁盘文件写满后会覆盖之前的信息,以便于写入最新的日志记录

redoLog贺=和binLog保证数据持久性
1、事务开启后DML语句更新数据到内存
2、开始写入redoLog写入磁盘,将状态设为prepare
3、写binLog文件到磁盘
4、事务提交后将redoLog状态改为commit

undolog:当有数据被修改时(增删改),会做一个备份;保证事务的原子性,做回滚;
也是将数据先写入内存缓冲区再写入磁盘中
使用undolog实现多版本并发控制(MVCC)
innodb_flush_log_at_trx_commit:innodb将log buffer数据写入文件并flush到磁盘中的时间点
innodb_log_buffer_size:日志文件内存缓冲区大小
innodb_log_file_size:日志文件大小 m为单位

binlog

binlog是数据库server层的,不管是用什么数据库引擎都会有
记录的是对数据的修改(增删改)的全量数据,以二进制方式存储,当超过设定binlog文件大小会自动生成一个新的binlog文件
默认是关闭的
可以配置成指定的数据库开启binlog
log_bin:参数指定binlog文件存放位置+名称
使用
数据备份、主从复制

慢查询日志

当sql语句的执行时间超过设定的值视为慢查询语句,开启后会记录慢查询语句
查看设定的慢查询时间值

show variables like 'long_query_time
#开启慢查询
set slow_query_log=on

在这里插入图片描述
mysql配置文件参数:
slow_query_log:是否开启慢查询日志记录
slow_query_log_file:指定慢查询日志记录文件名
long_query_time:设定慢查询时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值