问题描述
启用所有性能模式工具后,会观察到以下一个或多个症状:
MySQL的性能比较慢。 CPU使用率高于正常水平。 InnoDB信号量等待的次数高于正常情况,尽管显示引擎INNODB状态不一定显示任何信号量等待。问题原因
这是由于启用了所有性能模式工具和使用者:
SELECT ROUND(( SELECT COUNT(*) FROM performance_schema.setup_instruments WHERE ENABLED = 'YES' )/( SELECT COUNT(*) FROM performance_schema.setup_instruments )*100, 2 ) AS 'InstrumentsEnabledPct', ROUND(( SELECT COUNT(*) FROM performance_schema.setup_instruments WHERE TIMED = 'YES' )/( SELECT COUNT(*) FROM performance_schema.setup_instruments )*100, 2 ) AS 'InstrumentsTimedPct', ROUND(( SELECT COUNT(*) FROM performance_schema.setup_consumers WHERE ENABLED = 'YES' )/( SELECT COUNT(*) FROM performance_schema.setup_consumers )*100, 2) AS 'ConsumersEnabledPct';
特别是启用互斥等待工具会导致高性能工作负载的性能显著下降。
附注:对于MySQL 5.6中的一些工作负载,在默认的性能模式设置下也会出现类似的问题。一个症状是gdb(或类似的)跟踪显示许多线程的堆栈跟踪包含:
#0 in my_timer_cycles () at my_rdtsc.c #1 in end_table_io_wait_v1 pfs.cc这个问题在MySQL 5.7中不太可能出现,在MySQL 5.7中,对于批量I/O操作(例如表或索引扫描的行提取),性能模式现在可以报告N行的单个事件,而不是报告N次单行事件。
解决方案
重置性能模式工具和使用者
sys模式
CALL sys.ps_setup_reset_to_default(FALSE);
如果您没有sys模式安装后,您可以在MySQL 5.6中使用以下查询来重置性能模式设置:
DELETE
FROM performance_schema.setup_actors
WHERE NOT (HOST = '%' AND USER = '%' AND ROLE = '%');
INSERT IGNORE INTO performance_schema.setup_actors VALUES ('%', '%', '%');
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO', TIMED = 'NO'
WHERE NAME NOT LIKE 'wait/io/file/%'
AND NAME NOT LIKE 'wait/io/table/%'
AND NAME NOT LIKE 'statement/%'
AND NAME NOT IN ('wait/lock/table/sql/handler', 'idle');
UPDATE performance_schema.setup_consumers
SET ENABLED = IF(NAME IN ('events_statements_current', 'global_instrumentation', 'thread_instrumentation', 'statements_digest'), 'YES', 'NO');
DELETE
FROM performance_schema.setup_objects
WHERE NOT (OBJECT_TYPE = 'TABLE' AND OBJECT_NAME = '%'
AND (OBJECT_SCHEMA = 'mysql'AND ENABLED = 'NO'AND TIMED = 'NO' )
OR (OBJECT_SCHEMA = 'performance_schema' AND ENABLED = 'NO'AND TIMED = 'NO' )
OR (OBJECT_SCHEMA = 'information_schema' AND ENABLED = 'NO'AND TIMED = 'NO' )
OR (OBJECT_SCHEMA = '%'AND ENABLED = 'YES' AND TIMED = 'YES'));
INSERT IGNORE INTO performance_schema.setup_objects
VALUES ('TABLE', 'mysql' , '%', 'NO' , 'NO' ),
('TABLE', 'performance_schema', '%', 'NO' , 'NO' ),
('TABLE', 'information_schema', '%', 'NO' , 'NO' ),
('TABLE', '%' , '%', 'YES', 'YES');
UPDATE performance_schema.threads
SET INSTRUMENTED = 'YES';
禁用“长历史”性能模式表
如果不想重置整个性能模式配置,至少要检查“历史长”表是否与同步对象(如互斥体和rwlocks)的性能模式工具一起使用。因为在检测同步对象时,访问性能模式的“历史长”表可能会对性能产生非常不利的影响。当实例的性能不好时,通过发出以下查询来检查它们是否已启用:
select * from performance_schema.setup_instruments where name like 'wait/sync%' and (enabled='yes' or timed='yes'); select * from performance_schema.setup_consumers where name like '%_history_long' and enabled='yes';
如果启用了它们,请尝试使用以下查询禁用它们,并监视性能:
update performance_schema.setup_instruments set enabled='no', timed='no where name like 'wait/sync%'; update performance_schema.setup_consumers set enabled='no' where name like '%_history_long';
如果您需要PS工具来进行统计分析,那么至少要考虑禁用“长历史”消费者。
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 在启用所有PS性能模式工具的情况下,性能损耗过高,怎么办
在启用所有PS性能模式工具的情况下,性能损耗过高,怎么办
26-03-01 - 备库是否有自己的统计信息?(续)
备库是否有自己的统计信息?(续)
26-03-01 - 10个大大提升MySQL效率的使用技巧
10个大大提升MySQL效率的使用技巧
26-03-01 - TiDB 7.x 源码编译之 TiDB Server 篇,及新特性详解
TiDB 7.x 源码编译之 TiDB Server 篇,及新特性详解
26-03-01 - 平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖
- mysql中一条查询语句的执行全过程是怎样的?
mysql中一条查询语句的执行全过程是怎样的?
26-03-01 - re:Invent 2023:PingCAP 荣获亚马逊云科技 2023 年度合作伙伴奖项
- 平凯星辰携手教育部教育管理信息中心,助力普惠教育数字化
平凯星辰携手教育部教育管理信息中心,助力普惠教育数字化
26-03-01 - 一文搞懂MySQL执行计划
一文搞懂MySQL执行计划
26-03-01 - PingCAP 被评为 Translytical Data Platforms 2023 全球技术领导者
