MySQL性能突发事件问题的排查技巧有哪些呢

59次阅读
没有评论

共计 3767 个字符,预计需要花费 10 分钟才能阅读完成。

MySQL 性能突发事件问题的排查技巧有哪些呢,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

经过多年的实际经验,整理了一些材料,已 Linux 环境下 MySQL 性能突发事件问题排查技巧分享给大家。

作为 DBA 在面对性能上突发问题的时候,是否出现过束手无策,无从下手的经历。其实性能无非问题点在于存储、操作系统,应用程序,数据库 等方面。

性能分析问题 并没有想象的那么难,当了解到一些常用的 Linux 系统命令和 MySQL 的基础排查命令的时候,所有问题点都可以定位到。

先上一个 Linux 性能工具图谱图,Brendan D. Gregg 动态追踪工具 DTrace 的作者。

有点复杂,不用太 care,只要你理解了下面的常用命令和分析点,那就可以确定绝大数性能上问题。

Linux 平台基础常用的性能收集工具:

1. top mdash; Linux 系统进程监控

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。并且它也是 Linux   系统管理员经常使用的监控系统性能的工具。Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,它显示出 CPU   的使用、内存的使用、交换内存、缓存大小、缓冲区大小、过程控制、用户和更多命令。它也会显示内存和 CPU 使用率过高的正在运行的进程。

2. vmstat mdash; 虚拟内存统计

vmstat 命令是用于显示虚拟内存、内核线程、磁盘、系统进程、I/O 模块、中断、CPU 活跃状态等更多信息。

3. lsof mdash; 打开文件列表

lsof 命令对于很多 Linux/Unix   系统都可以使用,主要以列表的形式显示打开的文件和进程。打开的文件主要包括磁盘文件、网络套接字、管道、设备和进程。这个命令很容易看出哪些文件正在使用。

4. tcpdump mdash; 网络数据包分析器

tcpdump 是一种使用最广泛的命令行网络数据包分析,将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤   并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。

包可通过 tcpdump 命令解析,也可以保存成后缀为 pcap 的文件,使用 wireshark 等软件进行查看。

3. netstat mdash; 网络统计

netstat   命令是一个监控网络数据包传入和传出的统计界面的命令行工具。它对于许多系统管理员去监控网络性能和解决网络相关问题是一个非常有用的工具。

4. iostat mdash; 输入 / 输出统计

iostat 是收集和展示系统输入和输出存储设备统计的简单工具。这个工具通常用于查找存储设备性能问题,包括设备、本地磁盘、例如 NFS 远程磁盘。

除了上述 还有 其他一些 Linux 常用的工具 sar,htop,IPTraf,iotop,iftop,iptraf 等。

MySQL 常用性能突发事件分析命令:

1. SHOW PROCESSLIST; mdash; 当前 MySQL 数据库的运行的所有线程

2. INNODB_TRX; mdash; 当前运行的所有事务

## 当前运行的所有事务,还有具体的语句

3. INNODB_LOCKS; mdash; 当前出现的锁

## 当前事务出现的锁的语句信息

MySQL 性能突发事件问题的排查技巧有哪些呢

4. INNODB_LOCK_WAITS; mdash; 锁等待的对应关系计

## 锁等待的对应关系

MySQL 性能突发事件问题的排查技巧有哪些呢

5. SHOW OPEN TABLES where In_use mdash; 当前打开表

查看哪些表在使用中,In_use 列表示有多少线程正在使用某张表,Name_locked 表示表名是否被锁,这一般发生在 Drop 或 Rename 命令操作这张表时。所以这条命令不能帮助解答我们常见的问题:当前某张表是否有死锁,谁拥有表上的这个锁等。

MySQL 性能突发事件问题的排查技巧有哪些呢

下面比较重点部分,请注意!

6. SHOW ENGINE INNODB STATUS \G; mdash;Innodb 状态

显示除了大量的内部信息,输出内容比较复杂难懂, 输出内容中包含了一些平均值的统计信息,这些平均值是自上次输出结果生成以来的统计数。

MySQL 性能突发事件问题的排查技巧有哪些呢

具体分析如下:

①.Header

这部分简单的打印,输出的时间,以及自从上次输出的间隔时间。

MySQL 性能突发事件问题的排查技巧有哪些呢

②.BACKGROUND THREAD

MySQL 性能突发事件问题的排查技巧有哪些呢

MySQL 性能突发事件问题的排查技巧有哪些呢

③. SEMAPHORES 信号量

MySQL 性能突发事件问题的排查技巧有哪些呢

OS WAIT ARRAY INFO 操作系统等待数组的信息,它是一个插槽数组,innodb 使用了多少次操作系统的等待

保留统计 (reservation count) 显示了 innodb 分配插槽的频度

信号计数(signal count) 衡量的是线程通过数组得到信号的频度

RW-shared spins:# 这行显示读写的共享锁的计数器

RW-excl spins:# 这行显示读写的排他锁的计数器

RW-sx spins:# 这行显示共享排它锁计数器

* 备注:5.7.2 增加了一种新的读写锁类型称为 SX 共享排他锁

锁的拥有则可以读表中的任何数据,如果在相应的行上能够获得 X 锁,则可以修改该行。

MySQL 性能突发事件问题的排查技巧有哪些呢

④. TRANSACTIONS

包含 Innodb 事务 (transactions) 的统计信息,还有当前活动的事务列表。

MySQL 性能突发事件问题的排查技巧有哪些呢

transaction id:这个 ID 是一个系统变量随时每次新的 transaction 产生而增加。

Purge done:正在进行清空 (purge) 操作的 transaction ID。你可以通过查看第 transaction id 和第 Purge done  ID 的区别,明白没有被 purge 的事务落后的情况。

History listlength:记录了 undo spaces 内 unpurged 的事务的个数。

⑤. FILE I/O

显示了 I /O Helper thread 的状态,包括一些统计信息

MySQL 性能突发事件问题的排查技巧有哪些呢

MySQL 性能突发事件问题的排查技巧有哪些呢

pending operations, pending 的 log 和 buffer pool thread 的 fsync()调用

399 OS file:行显示了 reads, writes, and fsync()调用次数。

0.00 reads/s hellip; hellip; : 显示了每秒的统计信息

备注:“aio”表示“异步 I /O(asynchronous I/O).”

⑥. INSERT BUFFER AND ADAPTIVE HASH INDEX

MySQL 性能突发事件问题的排查技巧有哪些呢

Ibuf:insertbuffer 的一些信息,包括 free list, segment size

Hash table:显示了 hash table 的一些信息 *** 一行显示了每秒进行了多少次 hash 搜索,以及非 hash 搜索

⑦. LOG

MySQL 性能突发事件问题的排查技巧有哪些呢

Log sequence number 表示的是 redo log buffer 中的 lsn

Log flushed up to 表示的是 redo log file 中的 lsn

Pages flushed up to 表示的缓冲池最旧脏页的 lsn

Last checkpoint at 指的就是最近一个物理页刷新到磁盘时,它的 fil_page_lsn 的变量值。

⑧. BUFFER POOL AND MEMORY

当前内存使用状态

MySQL 性能突发事件问题的排查技巧有哪些呢

Pages read ahead:显示了每秒线性预读跟随机预读的次数

备注:InnoDB 提供了两种预读的方式,一种是 Linear read  ahead,由参数 innodb_read_ahead_threshold 控制,当你连续读取一个 extent 的 threshold 个 page   的时候,会触发下一个 extent 64 个 page 的预读。另外一种是 Random  read-ahead,由参数 innodb_random_read_ahead 控制,当你连续读取设定的数量的 page 后,会触发读取这个 extent 的剩余 page。InnoDB   的预读功能是使用后台线程异步完成。

⑨. ROW OPERATIONS

MySQL 性能突发事件问题的排查技巧有哪些呢

0 queries inside InnoDB, 0 queries in queue:显示了有多少线程在 Innodb 内核

read views open inside InnoDB:显示了有多少 read view 被打开了,一个 read view 是一致性保证的 MVCC  “snapshot”

备注:innodb 多版本并发 (MVCC) 通过 read view 来确定一致性读时的数据库 snapshot, innodb 的 read  view 确定一条记录能否看到,

在 RC 隔离级别下,是每个 SELECT 都会获取 *** 的 read view;

在 RR 隔离级别下,则是当事务中的 *** 个 SELECT 请求才创建 read view

7. SHOW STATUS LIKE innodb_row_lock_% mdash; 锁性能状态

查看当前锁性能状态

MySQL 性能突发事件问题的排查技巧有哪些呢

解释如下:

Innodb_row_lock_current_waits:当前等待锁的数量

Innodb_row_lock_time:系统启动到现在、锁定的总时间长度

Innodb_row_lock_time_avg:每次平均锁定的时间

Innodb_row_lock_time_max:最长一次锁定时间

Innodb_row_lock_waits:系统启动到现在、总共锁定次数

8. SQL 语句 EXPLAIN; mdash; 查询优化器

EXPLAIN 执行计划部分,略过

作为一个 DBA,问题排查技巧是每个工程师都需要掌握的核心技能。

看完上述内容,你们掌握 MySQL 性能突发事件问题的排查技巧有哪些呢的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计3767字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)