MySQL系统库作用:performance_schema,sys,information_schema,mysql
对系统库的管理维护是是 DBA 的职责。
【performance_schema】
性能监控和状态信息。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。
按照不同的数据库对象进行分组、按照不同的事件类型进行分组,或者按照事件 类型分组之后,再进一步按照账号、主机、程序、线程、用户等进行细分。
语句事件记录表:记录语句事件信息的表,包括:
events_statements_current(当前语句事件表)、events_statements_history(历 史语句事件表)、events_statements_history_long(长语句历史事件表)以及一 些 summary 表(聚合后的摘要表)。其中,summary 表还可以根据账号(account)、 主机(host)、程 序(program)、线 程(thread)、用 户(user)和全局(global) 再进行细分。
show tables like 'events_statement%';
show tables like 'events_wait%'; 等待事件记录表:与语句事件记录表类似。
show tables like 'events_stage%'; 阶段事件记录表:记录语句执行阶段事件的表,与语句事件记录表类似。
show tables like 'events_transaction%'; 事务事件记录表:记录与事务相关的事件的表,与语句事件记录表类似。
show tables like '%file%'; 监视文件系统层调用的表:
show tables like '%memory%'; 监视内存使用的表:
show tables like '%setup%'; 动态对 performance_schema 进行配置的配置表
update setup_instruments set ENABLEd = 'YES', TIMED = 'YES' WHERE name like 'wait%'; -- 修改配置表,指定收集哪些性能指标
update setup_consumers set ENABLEd = 'YES', TIMED = 'YES' WHERE name like 'wait%'; -- 修改配置表,指定哪些表打开性能数据收集,比如events_transactions_history事务历史表
select * from 1; -- 会报1064错误
select thread_id
,EVENT_ID
,SQL_TEXT as '错误sql'
,MYSQL_ERRNO as '错误号'
,MESSAGE_TEXT as '错误信息'
,FROM_UNIXTIME(TIMER_START, '%Y-%m-%d %H:%i:%S') AS '开始执行时间'
,FROM_UNIXTIME(TIMER_END, '%Y-%m-%d %H:%i:%S') AS '结束执行时间'
,FROM_UNIXTIME(TIMER_WAIT, '%Y-%m-%d %H:%i:%S') AS 'wait等待时间'
from events_statements_history WHERE MYSQL_ERRNO = 1064 order by EVENT_ID desc; -- 查看1064报错的sql语句执行历史记录。 SQL以\G结尾,代表列转行显示结果集
【sys】
这个数据库主要是通过视图的形式把 information_schema 和 performance_schema 结合起来,让程序员可以更方便的了解 MySQL 服务器的一些性能信息。
这个库的表都是双份,两个表名的区别是另一个前缀是"x$",例如:代表按照主机进行汇总统计的文件 I/O 性能数据, 两个视图访问的数据源是相同的:
host_summary_by_file_io 该视图显示的是相关数值经过单位换算后的数据(单位是毫秒、秒、分钟、小时、 天等),
x$host_summary_by_file_io 该视图带“x$”前缀的视图显示的是原始的数据。
查看慢 SQL 语句
call sys.ps_setup_enable_instrument('wait'); 启用与等待事件相关功能
call sys.ps_setup_enable_consumer('wait'); 启用与等待事件相关功能
select sleep(30); 模拟睡眠30秒
select * from session where command = 'query' and conn_id != connection_id()\G 在模拟睡眠30秒未结束的时候,使用该SQL查询可以查到current_statement的值为select_sleep状态的SQL正在执行了几秒。
select * from schema_table_statistics_with_buffer\G; 查询表的增、删、改、查数据量和 I/O 耗时统计
SELECT * FROM `session`; 查看当前会话信息
【information_schema】
这个数据库保存着 MySQL 服务器维护的所有其他数据库的信息:表、视图、触发器、列、索引等元数据。
performance_schema=ON|OFF 在 my.cnf 中进行配置performance_schema是否启用,mysql5.7默认启用这个存储引擎
INFORMATION_SCHEMA.ENGINES 表或 show engines; 语句都可以查看PERFORMANCE_SCHEMA是support = YES,才算当前mysql版本支持这个数据库实例。
【mysql】
这个是数据库核心,它存储了 MySQL 的用户账户和权限信息,一些存储过程、 事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。
SELECT * FROM innodb_index_stats; 索引。这个表很重要,为什么有些SQL明明加了索引查询的时候却没有使用索引,就是因为这个表的一些数据使mysql判断出一些查询成本而导致的。
SELECT * FROM innodb_table_stats; 表最后更新时间、行数、索引数等