提示
如果缺少指标,请尝试SET GLOBAL innodb_monitor_enable=all;
在 MySQL 客户端中运行:。
Rows Written Per Transactions 修改行。与查看没有进行任何写入的所有事务相比,这是事务写入大小的更好指标。
事务回滚百分比(作为读写事务的一部分)。
每行访问的缓冲池请求数。这里的高数字表示经历了很长的撤销链、深树和其他低效的数据访问。由于从单页读取多行,它可能小于零。
记录每个事务的 Fsync。
此图允许您查看发生了哪些操作以及每个操作影响的行数。像 Queries Per Second 这样的图表可以让您了解查询,但一个查询可能会影响数百万行。
此图允许您查看发生了哪些操作以及每个操作影响的行数。像 Queries Per Second 这样的图表可以让您了解查询,但一个查询可能会影响数百万行。
InnoDB 事务信息图显示有关最近事务的详细信息。Transaction IDs Assigned 表示 InnoDB 发起的事务总数。RW Transaction Commits 是非只读事务的数量。插入更新事务提交是撤消条目上的事务。非锁定 RO 事务提交是在自动提交模式下从 select 语句提交的事务或以“启动事务只读”显式启动的事务。
额外的 InnoDB 事务信息
当前数据库中 InnoDB 表的数量
缓冲池大小作为数据的一部分
每行数据量
每行索引大小显示了我们为每行基础上的索引使用了多少空间
分配的空间总量。可能与文件系统上使用的空间量不完全匹配,但提供了很好的指导。
所有 InnoDB 表中使用的空间。报告的分配空间减少可用空间。
数据使用的空间(包括主键)。
二级索引使用的空间。
InnoDB 存储引擎中的估计行数。它不是准确的值,并且会随着信息的更新而突然变化。
与数据相比,索引需要多少。
有多少空间是免费的。太高的值会浪费磁盘空间。
数据或索引当前未使用的已分配空间。
如果启用,默认情况下每个表将有自己的表空间表示为自己的.idb
文件,而不是存储在单个系统表空间中的所有表。
由于行写入和数据写入的时间不同,该值可能会在短时间间隔内产生误导。
InnoDB 输入/输出
fsync()
调用频率受innodb_flush_method
配置选项设置的影响。InnoDB 输入/输出
fsync()
操作数。fsync()
调用频率受innodb_flush_method
配置选项设置的影响。当增长 InnoDB 系统表空间时,将它扩展到这个大小。
是否启用 InnoDB 双写缓冲区。这样做会使 InnoDB 必须对存储执行的写入量增加一倍,但需要在大多数存储子系统崩溃期间避免潜在的数据损坏。
Fast Shutdown 意味着 InnoDB 在关机时不会执行完整的 Undo Space 和 Change Buffer 清理,这样速度更快,但可能会干扰某些主要的升级操作。
允许使用 InnoDB 的最大文件数。
允许使用的 InnoDB 打开文件的部分。
写入负载 包括写入和 fsync(称为 misc)。
InnoDB 缓冲池大小
InnoDB 维护一个称为缓冲池的存储区域,用于在内存中缓存数据和索引。了解 InnoDB 缓冲池的工作原理,并利用它将经常访问的数据保存在内存中,是 MySQL 调优最重要的方面之一。目标是将工作集保存在内存中。在大多数情况下,这应该是专用数据库主机上可用内存的 60%-90%,但这取决于许多因素。
InnoDB 缓冲池大小占总 RAM 的百分比
InnoDB 维护一个称为缓冲池的存储区域,用于在内存中缓存数据和索引。了解 InnoDB 缓冲池的工作原理,并利用它将经常访问的数据保存在内存中,是 MySQL 调优最重要的方面之一。目标是将工作集保存在内存中。在大多数情况下,这应该是专用数据库主机上可用内存的 60%-90%,但这取决于许多因素。
在 NUMA 区域之间交错缓冲池以更好地支持 NUMA 系统。
缓冲池读取和写入请求的组合值。
缓存数据占用的缓冲池百分比。
脏数据的百分比。
缓冲池读取请求必须从磁盘读取的频率。保持较低的百分比以获得良好的性能。
每个逻辑写入对缓冲池的逻辑写入数。
缓冲池分配的“块”大小。缓冲池的分配将按此数字四舍五入。它还影响在线缓冲池调整大小的性能影响。
缓冲池实例数。较高的值允许减少争用,但也会增加开销。
InnoDB 预读引起的读取百分比。
通过预读获取的页面百分比在没有访问权限的情况下被逐出。
较大的部分会增加转储/加载时间,但会获得更多的原始缓冲池内容,因此可能会减少预热时间。
何时在崩溃核心转储中包含缓冲池。这样做可能会显着增加核心转储文件的重启速度减慢。只有在启用崩溃时核心转储时才会有所作为。
为“旧块”保留的缓冲池百分比 - 在一段时间内反复触及。
块的多次触摸之间必须经过的时间才能使其成为旧块。
是否启用了 InnoDB 随机预读。
触发线性预读的阈值(以页为单位)。
用于调度读取的线程数。
用于调度写入的线程数。
是否启用本地异步 IO。强烈推荐以获得最佳性能。
InnoDB LRU 扫描深度
此变量定义每个缓冲池的 InnoDB 空闲页面目标。当空闲页面的数量低于这个数字时,这个数量的页面清理器将释放所需数量的页面,根据需要从 LRU 的尾部刷新或驱逐页面。
读取(或创建)页面时,需要在缓冲池中分配页面。
获得干净页面的最有效方法是从空闲列表中获取一个。但是,如果空闲列表中没有可用的页面,则需要执行 LRU 扫描。
如果空闲列表为空,则将执行 LRU 获取空闲循环。它可能会执行 LRU 扫描,也可能会使用其他一些启发式方法和快捷方式来获取空闲页面。
如果 Page 找不到任何 Free 列表并且其他快捷方式不起作用,则将通过扫描 LRU 链来搜索空闲页面,效率不高。
执行 LRU 扫描时每秒扫描的页面数。如果此值很大(数千),则意味着浪费了大量资源。
平均每次 LRU 扫描扫描的页数。大量扫描会消耗大量资源,并且还会为查询带来显着的附加延迟。
如果 InnoDB 在 LRU 列表中找不到空闲页面而不得不休眠。应该为零。
从“刷新列表”刷新的页数 这结合了通过自适应刷新和背景刷新刷新的页数。
InnoDB 刷新周期通常以 1 秒的间隔运行。如果与此数字相差太远,则可能表明存在问题。
每批次刷新多少页。大批量可以“扼杀” IO 子系统并使其他需要发生的 IO 饿死。
Neighbor Flushing 针对旋转媒体进行了优化,除非您正在运行旋转磁盘,否则您应该禁用它。
InnoDB 检查点时代
最大检查点年龄由所有事务日志文件 ( innodb_log_file_size
)的总长度决定。
当检查点年龄达到最大检查点年龄时,同步刷新块。经验法则是在这些日志中保留一小时的流量,并让检查点尽可能顺利地执行其工作。如果您不这样做,InnoDB 将在最糟糕的时间(即您最忙的时候)进行同步刷新。
自适应刷新根据提前检查点的需要(由重做生成率驱动)和将脏页数保持在设定的限制内,从刷新列表中刷新页面。
每个自适应批次刷新的页面。
为了优化旋转媒体的 IO,InnoDB 可能会刷新邻居页面。它可能会导致闪存存储的大量 IO 浪费。通常对于闪存,您应该运行,innodb_flush_neighbors=0
否则这会显示您浪费了多少 IO。
当数据不适合缓冲池时,需要从 LRU 列表的尾部进行刷新,以保留随时可用的空闲页面以供新数据读取。
每个邻居刷新的页面。
由于 LSN 年龄而刷新页面的目标。
从 Flush List 和 LRU List Combined 刷新的邻居页面数(如果启用了邻居刷新)。
每个邻居刷新的页面。
如果 InnoDB 跟不上 Checkpoint Flushing 并且不得不触发 Sync flush。这不应该发生。
后台刷新的页面刷新,当服务器被认为是空闲时激活。
每个后台批次刷新的页面。
创建 LSN(重做)的速率。由于块大小舍入,它可能与写入日志文件的数据量不匹配。
这对应于从 LRU 缓冲区尾部驱逐(释放)的干净页面的数量。
单页刷新在极少数情况下发生,然后在 LRU 列表中找不到干净的页面。对于大多数工作负载,它应该为零。
估计存储系统可以提供多少IOPS。用于缩放后台活动。请勿将其设置为实际存储容量。
InnoDB IO 落后时使用的 IO 容量,需要赶上 Flushing。
InnoDB 日志文件的数量乘以其大小。
InnoDB 日志缓冲区大小
InnoDB 用于缓冲写入日志文件的缓冲区大小。
在事务提交时如何处理日志文件。什么都不做,等待超时从日志缓冲区刷新数据,将其刷新到操作系统缓存,但不是 FSYNC 或仅刷新。
每指定的秒数刷新事务日志。
这个变量可以看作是 InnoDB 将用于重做日志文件的最小 IO 对齐。高值会导致浪费,低值会降低 IO 效率。
与生成的重做量相比,放大了对日志的写入量。
每个写入事务生成的重做量。这是交易规模的一个很好的指标。
每小时 InnoDB 日志文件使用情况
与缓冲池大小一起,innodb_log_file_size
是我们使用 InnoDB 时最重要的设置。该图显示了每小时有多少数据写入 InnoDB 的重做日志。当 InnoDB 日志文件已满时,InnoDB 需要将修改后的页面从内存刷新到磁盘。
经验法则是在这些日志中保留一小时的流量,并让检查点尽可能顺利地执行其工作。如果您不这样做,InnoDB 将在最糟糕的时间(即您最忙的时候)进行同步刷新。
此图可以帮助指导您设置正确的innodb_log_file_size
.
写入的日志填充量。
InnoDB 重做日志文件的数量。
创建 LSN(重做)的速率。由于块大小舍入,它可能与写入日志文件的数据量不匹配。
InnoDB Group Commit Batch Size 图显示每次尝试写入 InnoDB 日志文件的字节数。如果多个线程同时提交,其中一个将写入所有等待线程的日志条目并刷新文件。这样的过程减少了所需的磁盘操作数量并扩大了批量大小。
InnoDB 锁等待超时
超时前等待行锁的时间。
如果禁用 InnoDB 将不会检测死锁而是依赖超时。
将定义使用自动增量列将产生多少锁定。
何时在超时或仅回滚最后一条语句时回滚所有事务。
由于等待 InnoDB 行锁而被阻塞的活动部分的百分比。
Rows Written Per Transactions 修改行。与查看没有进行任何写入的所有事务相比,这是事务写入大小的更好指标。
事务回滚百分比(作为读写事务的一部分)。
由于等待行级锁而被阻止进行的平均会话数。
未清除事务的最大数量,如果此数量超过延迟,将引入传入的 DDL 语句。
由于清除线程无法跟上清除进度而注入的延迟。
InnoDB 清除性能图显示有关页面清除过程的指标。清除过程从历史列表中删除了撤消条目,并清理了旧版本修改行的页面,并有效地删除了已删除的行。
InnoDB Undo Space Usage 图显示了 Undo 段使用的空间量。如果空间量增长太多,请查找持有在 InnoDB 状态下打开的读取视图的长时间运行的事务。
每个撤消日志页面处理多少撤消操作。
调用清除操作的频率。
Home 许多清除操作是在每个调用中完成的。
使用的撤消槽数。
InnoDB 页面拆分图显示了与拆分和合并页面相关的 InnoDB 页面维护活动。当 InnoDB 页面(除了最顶部的叶页面)有太多数据无法接受行更新或行插入时,必须将其拆分为两部分。类似地,如果 InnoDB 页面在行更新或删除操作后最终未满一半,则会尝试将该页面与相邻页面合并。如果生成的页面大小大于 InnoDB 页面大小,则操作失败。如果您的工作负载导致大量页面拆分,请尝试降低innodb_fill_factor
变量 (5.7+)。
InnoDB Page Reorgs 图显示了有关页面重组操作的信息。当页面接收到影响页面中其他行偏移的更新或插入时,需要进行重组。如果重组过程发现页面中没有足够的空间,页面将被拆分。页面重组只能对压缩页面失败。
InnoDB Page Reorgs 图显示了有关页面重组操作的信息。当页面接收到影响页面中其他行偏移的更新或插入时,需要进行重组。如果重组过程发现页面中没有足够的空间,页面将被拆分。页面重组只能对压缩页面失败。
要填充的页面部分然后进行排序索引构建。降低此值会降低空间利用率,但会减少在索引中插入新数据时拆分页面的需要。
自适应哈希索引有助于优化索引查找,但对于某些工作负载可能是严重的热点。
用于自适应哈希索引的分区数量(以减少争用)。
添加到 AHI 的页数与添加到缓冲池的页数。
无法通过 AHI 解决的搜索百分比。
需要添加到 AHI 的每个页面“散列”的行数。
每个行维护操作执行多少次使用 AHI 的成功搜索。
InnoDB AHI Usage 图显示了对 InnoDB 自适应哈希索引的搜索操作及其效率。自适应哈希索引是一种搜索哈希,旨在加快对内存中 InnoDB 页面的访问。如果命中率很小,工作数据集大于缓冲池,则 AHI 可能会被禁用。
更改缓冲区的最大大小(作为缓冲池大小的百分比)。
更改缓冲区的最大大小(字节)。
正在进行的活动合并缓冲区操作的平均数。
如果启用同时限制 InnoDB 内核中允许的线程数。
如果启用限制了在提交阶段同时允许在 InnoDB 内核中的线程数。
如果高争用,线程在重新进入 InnoDB 内核之前将休眠的时间。
如果设置为非零值 InnoDB 线程睡眠延迟将根据负载自动调整到此变量指定的值。
InnoDB 进入 InnoDB 内核后,在强制退出并让步给另一个等待的线程之前可以执行的低级操作数。
InnoDB 争用 - 操作系统等待图显示了等待获取锁时需要操作系统等待操作的时间。一旦旋转回合用完,就会发生这种情况。
InnoDB 争用 - 自旋轮图显示了为获取锁而执行的自旋轮数。旋转轮是快速重试以获取循环中的锁定。
InnoDB 主线程利用率图显示了 InnoDB 主线程在各种任务上花费的时间部分。
InnoDB 活动图显示了 InnoDB 线程活动的度量。
InnoDB 自动针对专用服务器环境进行了优化(自动缩放缓存和一些其他变量)。
此缓冲区用于使用排序算法构建 InnoDB 索引。
当元数据查询SHOW TABLE STATUS
或INFORMATION_SCHEMA
查询时刷新 InnoDB 统计信息。如果启用会导致严重的性能问题。
索引条件下推 (ICP) 是针对 MySQL 使用索引从表中检索行的情况的优化。在没有 ICP 的情况下,存储引擎遍历索引以定位基表中的行并将它们返回给 MySQL 服务器,该服务器评估这些行的 WHERE 条件。启用 ICP 后,如果 WHERE 条件的一部分可以仅使用索引中的列进行评估,则 MySQL 服务器会将 WHERE 条件的这部分下推到存储引擎。然后,存储引擎使用索引条目评估推送的索引条件,并且仅当满足该条件时才从表中读取行。ICP可以减少存储引擎访问基表的次数和MySQL服务器访问存储引擎的次数。
如果启用持久统计,要采样的页数。
如果禁用持久统计,要采样的页数。
InnoDB 碎片整理图显示了与 MariaDB 的 InnoDB 在线碎片整理功能相关的状态信息,用于优化表命令。要启用此功能,innodb-defragment
必须在配置文件中将该变量设置为 1。
目前仅在 MariaDB 服务器上可用。
InnoDB 在线 DDL 图显示了 InnoDB 中在线 DDL(更改表)操作的状态。进度度量是对在线 DDL 处理的行的百分比的估计。
目前仅在 MariaDB 服务器上可用。
MySQL 正常运行时间
自上次重新启动 MySQL 服务器进程以来的时间量。
当前 QPS
根据 MySQL 的SHOW STATUS
命令上报的查询数,是服务器在最后一秒内执行的语句数。与 Questions 变量不同,此变量包括在存储程序中执行的语句。它不计数COM_PING
或COM_STATISTICS
命令。
最大连接数
Max Connections 是允许的最大并发客户端连接数。默认情况下,这是 151。增加这个值会增加 mysqld 需要的文件描述符的数量。如果所需的描述符数量不可用,则服务器会降低 Max Connections 的值。
mysqld 实际上允许 Max Connections + 1 个客户端进行连接。额外的连接保留供具有 SUPER 权限的帐户使用,例如 root。
Max Used Connections 是自服务器启动以来同时使用的最大连接数。
Connections 是连接到 MySQL 服务器的尝试次数(成功与否)。
MySQL 活动线程
Threads Connected 是打开的连接数,而 Threads Running 是未休眠的线程数。
MySQL 处理程序
处理程序统计信息是关于 MySQL 如何选择、更新、插入和修改行、表和索引的内部统计信息。
这实际上是存储引擎和 MySQL 之间的层。
read_rnd_next
当服务器执行全表扫描时递增,这是一个您真的不希望看到具有高值的计数器。read_key
当使用索引完成读取时递增。read_next
当存储引擎被要求“读取下一个索引条目”时增加。高值意味着正在执行大量索引扫描。顶部命令计数器
该Com_
声明计数器变量指示次,每次数量xxx
语句已被执行。每种类型的语句都有一个状态变量。例如,分别为Com_delete
and Com_update
countDELETE
和UPDATE
statements。Com_delete_multi
andCom_update_multi
类似,但适用于使用多表语法的DELETE
andUPDATE
语句。
MySQL 网络流量
在这里我们可以看到 MySQL 产生了多少网络流量。出站是从 MySQL 发送的网络流量,入站是 MySQL 收到的网络流量。
该参数显示系统在没有关闭或重新启动的情况下已启动和运行的时间。
系统负载是系统正在执行的计算工作的度量。每个正在使用或等待 CPU 资源的正在运行的进程将负载增加 1。
RAM(随机存取存储器)是计算设备中的硬件,其中保存了当前使用的操作系统、应用程序和数据,以便设备的处理器可以快速访问它们。
可用内存百分比
在现代 Linux 内核上,可供应用程序使用的内存量与 Free+Cached+Buffers 不同。
内存 + 交换
所有分区上的磁盘空间总和。
在某些安装中,它可能被严重高估。
可用磁盘空间的最低百分比。
CPU 时间以时钟滴答或秒为单位测量。以 CPU 容量的百分比来衡量 CPU 时间很有用,这称为 CPU 使用率。
当系统以最大 CPU 利用率运行时,发送和接收线程必须共享可用的 CPU。这会导致数据更频繁地排队以应对 CPU 不足的情况。CPU 饱和度可以通过等待队列的长度或等待队列所花费的时间来衡量。
磁盘 I/O 包括涉及物理磁盘的读或写或输入/输出操作。它是硬盘驱动器和 RAM 之间数据传输的速度。
交换活动是内存管理,涉及将内存部分交换到物理存储或从物理存储交换。
网络流量是指在给定时间点通过网络移动的数据量。