暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【ACDU翻译】MySQL PMM MySQL 实例总结

原创 由迪 2021-11-25
651



图片


MySQL 连接

最大连接数

Max Connections 是允许的最大并发客户端连接数。默认情况下,这是 151。增加此值会增加所需的文件描述符数量mysqld。如果所需的描述符数量不可用,则服务器会降低 Max Connections 的值。

mysqld实际上允许 Max Connections + 1 个客户端进行连接。额外的连接保留供具有 SUPER 权限的帐户使用,例如 root。

Max Used Connections 是自服务器启动以来同时使用的最大连接数。

Connections 是连接到 MySQL 服务器的尝试次数(成功与否)。

MySQL 中止连接

中止的连接

当给定的主机连接到 MySQL 并且连接在中间中断(例如由于错误的凭据)时,MySQL 将该信息保存在系统表中(从 5.6 开始,该表在 中公开performance_schema)。

如果没有成功连接的失败请求数量达到 的值max_connect_errors,则mysqld假定出现问题并阻止主机进一步连接。

要再次允许来自该主机的连接,您需要发出该FLUSH HOSTS语句。

MySQL 客户端线程活动

MySQL 活动线程

Threads Connected 是打开的连接数,而 Threads Running 是未休眠的线程数。

MySQL 线程缓存

MySQL 线程缓存

thread_cache_size变量设置服务器应缓存以重用的线程数。当客户端断开连接时,如果缓存未满,客户端的线程将放入缓存中。它在 MySQL 5.6.8 及更高版本中自动调整大小(上限为 100)。如果可能,通过重用从缓存中获取的线程来满足对线程的请求,并且仅当缓存为空时才创建新线程。

  • threads_created:为处理连接而创建的线程数。
  • threads_cached:线程缓存中的线程数。

MySQL 慢查询

MySQL 慢查询

慢查询被定义为比long_query_time设置慢的查询。例如,如果您已long_query_time设置为 3,则完成时间超过 3 秒的所有查询都将显示在此图表上。

MySQL 选择类型

MySQL 选择类型

与大多数关系数据库一样,基于索引的选择比扫描整个表的数据更有效。在这里,我们看到了未使用索引完成的选择的计数器。

  • Select Scan是导致全表扫描的查询数量,其中必须读取表中的所有数据,然后丢弃或返回。
  • Select Range是有多少查询使用了范围扫描,这意味着 MySQL 扫描了给定范围内的所有行。
  • Select Full Join是未加入索引的连接数,这通常会造成巨大的性能损失。

MySQL 排序

MySQL 排序

由于查询的结构、顺序或其他要求,MySQL 在返回行之前对行进行排序。例如,如果表按 1 到 10 排序,但您希望结果反转,则 MySQL 必须对行进行排序以返回 10 到 1。

该图还显示了排序必须扫描整个表或表的给定范围以返回结果以及无法通过索引进行排序的情况。

MySQL 表锁

表锁

MySQL 由于不同的原因采用了许多不同的锁。在此图中,我们可以看到 MySQL 从存储引擎请求了多少表级锁。在 InnoDB 的情况下,很多时候锁实际上可能是行锁,因为它只在少数特定情况下使用表级锁。

比较 Locks Immediate 和 Locks Waited 是最有用的。如果等待的锁数上升,则意味着您有锁争用。否则,锁定立即上升和下降是正常活动。

MySQL 问题

MySQL 问题

服务器执行的语句数。与 QPS 计算中使用的查询不同,这仅包括客户端发送到服务器的语句,而不包括在存储程序中执行的语句。

此变量不计算以下命令:

  • COM_PING
  • COM_STATISTICS
  • COM_STMT_PREPARE
  • COM_STMT_CLOSE
  • COM_STMT_RESET

MySQL 网络流量

MySQL 网络流量

在这里我们可以看到 MySQL 产生了多少网络流量。出站是从 MySQL 发送的网络流量,入站是 MySQL 收到的网络流量。

每小时 MySQL 网络使用量

每小时 MySQL 网络使用量

在这里我们可以看到 MySQL 每小时产生多少网络流量。您可以使用条形图来比较 MySQL 发送的数据和 MySQL 接收的数据。

MySQL 内部内存概述

系统内存系统的总内存。

InnoDB Buffer Pool Data:InnoDB 维护一个称为缓冲池的存储区域,用于在内存中缓存数据和索引。

TokuDB 缓存大小:与 InnoDB 缓冲池的功能类似,TokuDB 将为自己的缓存分配已安装 RAM 的 50%。

Key Buffer Size:MyISAM 表的索引块被缓冲并被所有线程共享。key_buffer_size是用于索引块的缓冲区的大小。

自适应哈希索引大小:当 InnoDB 注意到某些索引值被非常频繁地访问时,它会在内存中的 B 树索引之上为它们构建一个哈希索引。

查询缓存大小:查询缓存存储 SELECT 语句的文本以及发送到客户端的相应结果。查询缓存存在巨大的可扩展性问题,因为只有一个线程可以同时在查询缓存中进行操作。

InnoDB 字典大小:数据字典是 InnoDB 的内部表目录。InnoDB 将数据字典存储在磁盘上,并在服务器运行时将条目加载到内存中。

InnoDB 日志缓冲区大小:MySQL InnoDB 日志缓冲区允许事务运行,而无需在事务提交之前将日志写入磁盘。

顶部命令计数器

顶部命令计数器

Com_xxx声明计数器变量指示次,每次数量xxx语句已被执行。每种类型的语句都有一个状态变量。例如,Com_deleteCom_update计数DELETEUPDATE语句,分别。Com_delete_multiCom_update_multi类似,但适用于使用多表语法的DELETEUPDATE语句。

每小时最高命令计数器

每小时最高命令计数器

Com_xxx声明计数器变量指示次,每次数量xxx语句已被执行。每种类型的语句都有一个状态变量。例如,Com_deleteCom_update计数DELETEUPDATE语句,分别。Com_delete_multiCom_update_multi类似,但适用于使用多表语法的DELETEUPDATE语句。

MySQL 处理程序

MySQL 处理程序

处理程序统计信息是关于 MySQL 如何选择、更新、插入和修改行、表和索引的内部统计信息。

这实际上是存储引擎和 MySQL 之间的层。

  • read_rnd_next 当服务器执行全表扫描时递增,这是一个您真的不希望看到具有高值的计数器。
  • read_key 当使用索引完成读取时递增。
  • read_next当存储引擎被要求“读取下一个索引条目”时增加。高值意味着正在执行大量索引扫描。

MySQL 查询缓存内存

MySQL 查询缓存内存

查询缓存存在巨大的可扩展性问题,因为只有一个线程可以同时在查询缓存中进行操作。这种序列化不仅适用于 SELECT,也适用于 INSERT/UPDATE/DELETE。

这也意味着query_cache_size设置越大,这些操作变得越慢。在并发环境中,MySQL Query Cache 很快成为争用点,从而降低性能。MariaDB 和 AWS Aurora 已完成工作,尝试消除其 MySQL 版本中的查询缓存争用,而 MySQL 8.0 已消除查询缓存功能。

大多数环境的推荐设置是:

  • query_cache_type=0
  • query_cache_size=0

提示

虽然您可以动态更改这些值,但要完全删除争用点,您必须重新启动数据库。

MySQL 查询缓存活动

MySQL 查询缓存活动

查询缓存存在巨大的可扩展性问题,因为只有一个线程可以同时在查询缓存中进行操作。这种序列化不仅适用于 SELECT,也适用于 INSERT/UPDATE/DELETE。

这也意味着query_cache_size设置越大,这些操作变得越慢。在并发环境中,MySQL Query Cache 很快成为争用点,从而降低性能。MariaDB 和 AWS Aurora 已完成工作,尝试消除其 MySQL 版本中的查询缓存争用,而 MySQL 8.0 已消除查询缓存功能。

大多数环境的推荐设置是:

  • query_cache_type=0
  • query_cache_size=0

提示

虽然您可以动态更改这些值,但要完全删除争用点,您必须重新启动数据库。

MySQL 表打开缓存状态

MySQL 表打开缓存状态

建议将 设置为table_open_cache_instances与虚拟 CPU 的松散关联,请记住,更多实例意味着缓存被拆分更多次。如果您将缓存设置为 500,但它有 10 个实例,则每个缓存将仅缓存 50 个。

table_definition_cachetable_open_cache他们是自动调整大小的MySQL 5.6及以上(即,不要将它们设置为任意值)可以保留为默认值。

MySQL 打开表

MySQL 打开表

建议将 设置为table_open_cache_instances与虚拟 CPU 的松散关联,请记住,更多实例意味着缓存被拆分更多次。如果您将缓存设置为 500,但它有 10 个实例,则每个缓存将仅缓存 50 个。

table_definition_cachetable_open_cache他们是自动调整大小的MySQL 5.6及以上(即,不要将它们设置为任意值)可以保留为默认值。

MySQL 表定义缓存

MySQL 表定义缓存

建议将 设置为table_open_cache_instances与虚拟 CPU 的松散关联,请记住,更多实例意味着缓存被拆分更多次。如果您将缓存设置为 500,但它有 10 个实例,则每个缓存将仅缓存 50 个。

table_definition_cachetable_open_cache他们是自动调整大小的MySQL 5.6及以上(即,不要将它们设置为任意值)可以保留为默认值。

  •  页面更新 2021-06-25


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论