performance_schema
performance_schema,顾名思义,用于监控展现mysql实时性能情况的库。主要记录的是server执行某些活动对某些资源的消耗、耗时、这些活动执行的次数等情况。需要注意的是,performance_schema是库名,而不是表名。也就是说,performance_schema库里有各种表来进行各种指标的记录。
特点:
- 该表的数据只在本地记录,也就是这部分数据不会写到binlog,也不会被复制到从库。
- 数据仅保存在内存中,不会持久化到磁盘,因此服务器重启这部分数据就会丢失。
Performance Schema 表记录了以下几类信息:
- SQL 语句执行时间: 记录每个 SQL 语句的执行时间,包括解析、优化、执行等阶段。
- 线程活动: 记录每个线程的活动状态,例如正在执行的 SQL 语句、等待的锁等。
- 内存使用: 记录服务器内存的使用情况,包括各种缓存的大小和使用率。
- IO 操作: 记录服务器的磁盘 IO 操作,例如读取和写入数据的时间。
- 事件: 记录服务器发生的各种事件,例如连接建立、断开连接、锁获取、释放等。
performance_schema下的表
可以根据监视维度查询具体的表:
|
|
常用表:
| 表名 | 记录内容 | 适合排查的问题范围 |
|---|---|---|
events_statements_summary_by_digest |
SQL 语句执行摘要,包括执行次数、总执行时间、IO 操作等 | 慢查询、高 IO 操作、SQL 语句执行效率问题 |
events_statements_current |
当前正在执行的 SQL 语句信息,包括执行时间、线程 ID、SQL 语句文本等 | 正在执行的 SQL 语句分析、线程阻塞问题 |
events_waits_summary_by_instance |
线程等待事件摘要,包括等待事件类型、等待次数、总等待时间等 | 线程阻塞、锁冲突、死锁问题 |
events_waits_current |
当前正在等待的线程信息,包括等待事件类型、等待时间、线程 ID 等 | 线程阻塞、锁冲突、死锁问题 |
memory_summary_by_thread_by_event_name |
线程内存使用情况,包括内存分配、释放、使用情况等 | 内存泄漏、内存使用效率问题 |
常用sql查询
|
|
两个角色:instruments and consumers
performance_schema 有两个重要的角色(概念上的):
- instruments 数据收集者,负责收集原始数据,此部分数据只存在内存中,不会直接存到performance_schema的表中
- consumers 数据消费者,负责处理instruments收集到的数据并存储到表中,所以我们查的实际上是这部分数据
举例;假设你想要分析 SQL 语句的执行效率,你可以使用 statement_digest instrument 收集 SQL 语句的执行时间、IO 操作等信息,然后使用 statement_summary consumer 将这些数据汇总到 events_statements_summary_by_digest 表格中。最后,你可以查询 events_statements_summary_by_digest 表格,找出执行时间最长的 SQL 语句,并进行优化。
information_schema
是一个元数据数据库,保存了数据库对象的信息,包括表结构、索引、用户权限等。