ITPub博客

首页 > 数据库 > > 25.1 性能方案 快速开始

25.1 性能方案 快速开始

作者:飘絮絮絮丶 时间:2020-05-11 11:02:57 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma


MySQL性能方案是一种用于在低级别监控MySQL服务器执行的功能。 性能方案具有以下特征:


  • 性能方案提供了一种在运行时检查服务器内部执行的方法。 它使用PERFORMANCE_SCHEMA存储引擎和performance_schema数据库实现。 性能方案主要关注性能数据。 这与INFORMATION_SCHEMA不同,后者用于检查元数据。


  • 性能模式监视服务器事件。 “事件”是服务器任何花费时间所做的,并且已经过检测的,这样时间信息的任何事件可以被收集。 通常,事件可以是函数调用,操作系统的等待,SQL语句执行的阶段(例如解析或排序),或整个语句或语句组。 事件集合提供对服务器访问的信息,关于多个存储引擎的同步调用(例如互斥锁)文件和表I / O,表锁等


  • 性能方案事件与写入服务器的二进制日志(描述数据修改)和事件调度程序(存储程序)的事件不同。


  • 性能方案事件特定于MySQL服务器的给定实例。 性能方案表被视为服务器的本地表,对它们的更改不会复制或写入二进制日志。


  • 可以获得当前事件,以及事件历史和摘要。 这使您可以确定已执行的活动的次数以及执行的时间。 事件信息可用于显示特定线程的活动,或与特定对象(如互斥锁或文件)关联的活动。


  • PERFORMANCE_SCHEMA存储引擎使用服务器源代码中的“检测点”收集事件数据。


  • 收集的事件存储在performance_schema数据库的表中。 可以使用SELECT语句和其他表一样查询这些表。


  • 可以通过SQL语句更新performance_schema数据库中的表来动态修改性能方案配置。 配置更改会立即影响数据收集。


  • 性能方案中的表是内存表,不使用持久性磁盘存储。 从服务器启动开始重新填充内容,并在服务器关闭时丢弃。
  • 数据收集是通过修改服务器源代码增加实现的。 与其他功能(如复制或事件计划程序)不同,没有与Performance Schema关联的单独线程。


性能方案旨在提供对服务器执行的有用的访问信息,同时对服务器性能的影响最小。 实现遵循以下设计目标:

  • 激活性能模式不会导致服务器行为发生任何变化。例如,它不会导致线程调度发生更改,并且不会导致查询执行计划(如EXPLAIN所示)发生更改。
  • 服务器监控连续且不明显地发生,只需很少的开销。激活性能架构不会使服务器无法使用。
  • 解析器没有变化。没有新的关键字或语句。
  • 即使性能模式在内部失败,服务器代码的执行也会正常进行。
  • 添加新的检测点很容易。
  • 检测是版本化的。如果检测实现发生更改,则先前已检测的代码将继续工作。这有利于第三方插件的开发人员,因为没有必要升级每个插件以与最新的性能方案更改保持同步。


注意:

MySQL sys架构是一组对象,可以方便地访问Performance Schema收集的数据。 默认情况下安装sys模式

默认情况下启用性能方案。 要显式启用或禁用它,请启动服务器,并将performance_schema变量设置为适当的值。 例如,在服务器my.cnf文件中使用以下行:


[mysqld]

performance_schema=ON


当服务器启动时,它会看到performance_schema并尝试初始化Performance Schema。 要验证成功初始化,请使用以下语句:


mysql> SHOW VARIABLES LIKE 'performance_schema';

+--------------------+-------+

| Variable_name | Value |

+--------------------+-------+

| performance_schema | ON |

+--------------------+-------+


值为ON表示性能模式已成功初始化并可以使用。 值OFF表示发生了一些错误。 检查服务器错误日志以获取有关错误的信息。


性能方案作为存储引擎被实现。 如果此引擎可用(您之前应该已经检查过),则应在INFORMATION_SCHEMA.ENGINES表或SHOW ENGINES语句的输出中看到它的SUPPORT值为YES:

SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='PERFORMANCE_SCHEMA'\G

PERFORMANCE_SCHEMA存储引擎对performance_schema数据库中的表进行操作。 您可以将performance_schema设置为默认数据库,以便不需要使用数据库名称限定对其表的引用:

mysql> USE performance_schema;


性能方案表存储在performance_schema数据库中。 通过从INFORMATION_SCHEMA数据库中选择或使用SHOW语句,可以获得有关此数据库及其表的结构的信息,以及任何其他数据库。 例如,使用这些语句中的任何一个来查看存在哪些Performance Schema表:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema';


SHOW TABLES FROM performance_schema;

--随着时间的推进,会逐渐增加

performance_schema数据库的名称是小写的,其中的表名称也是如此。 查询应以小写形式指定名称。

要查看各个表的结构,请使用SHOW CREATE TABLE:


SHOW CREATE TABLE performance_schema.setup_consumers\G


通过从诸如INFORMATION_SCHEMA.COLUMNS之类的表中选择或使用诸如SHOW COLUMNS之类的语句,也可以使用表结构。

performance_schema数据库中的表可以根据其中的信息类型进行分组:当前事件,事件历史和摘要,对象实例和设置(配置)信息。 以下示例说明了这些表的一些用法。


最初,并非所有检测和消费者都已启用,因此性能模式不会收集所有事件。 要打开所有这些并启用事件计时,请执行两个语句(行计数可能因MySQL版本而异):


mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES';

Query OK, 560 rows affected (0.04 sec)

mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';

Query OK, 10 rows affected (0.00 sec)

要查看服务器当前正在执行的操作,请检查events_waits_current表。 它每个线程包含一行,显示每个线程最近监视的事件:


SELECT * FROM performance_schema.events_waits_current\G


历史记录表包含与当前事件表相同的行,但是有更多行并显示服务器“最近”而不是“当前”正在执行的操作.events_waits_history和events_waits_history_long表包含每个线程的最近10个事件和 最近的10,000个事件。 例如,要查看线程13生成的最近事件的信息,请执行以下操作:

SELECT EVENT_ID, EVENT_NAME, TIMER_WAIT FROM performance_schema.events_waits_history WHERE THREAD_ID = 13 ORDER BY EVENT_ID;


当新事件添加到历史记录表时,如果表已满,则会丢弃旧事件。


汇总表提供了一段时间内所有事件的汇总信息。 该组中的表以不同方式汇总事件数据。 要查看哪些仪器执行次数最多或者等待时间最长,请对events_waits_summary_global_by_event_name表上的COUNT_STAR或SUM_TIMER_WAIT列进行排序,分别对应于所有事件计算的COUNT(*)或SUM(TIMER_WAIT)值:


SELECT EVENT_NAME, COUNT_STAR FROM performance_schema.events_waits_summary_global_by_event_name ORDER BY COUNT_STAR DESC LIMIT 10;


SELECT EVENT_NAME, SUM_TIMER_WAIT FROM performance_schema.events_waits_summary_global_by_event_name ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;


实例表说明了检测的对象类型。 当由服务器使用时,检测对象产生事件。 这些表提供事件名称和解释性说明或状态信息。 例如,file_instances表列出了文件I / O操作及其相关文件的检测实例:


SELECT * FROM performance_schema.file_instances\G

设置表用于配置和显示监视特征。 例如,setup_instruments列出了可以收集事件的检测集,并显示了哪些已启用:

SELECT * FROM performance_schema.setup_instruments;

要控制是否为检测收集事件,请将其ENABLED值设置为YES或NO。 例如:

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'NO' WHERE NAME = 'wait/synch/mutex/sql/LOCK_mysql_create_db';

性能模式使用收集的事件来更新performance_schema数据库中的表,这些表充当事件信息的“使用者”。 setup_consumers表列出了可用的使用者以及哪些已启用:


SELECT * FROM performance_schema.setup_consumers;

要控制性能方案是否将其维护为事件信息的目标,请设置其ENABLED值。


有一些杂项表不属于任何以前的组。 例如,performance_timers列出了可用的事件计时器及其特征。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3152198/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42164