跳到主要内容

01-性能监控

查询剖析工具 - show profile

  • 默认禁用,使用 set profiling = 1 在会话级别动态修改,设置完成后,服务器上执行的所有语句都会 测量其耗费的时间其他一些查询执行状态变更的数据 使用 show profiles 查看具体的执行时间,在 MySQL 的命令行模式下,时间只能显示两位小数
    show profiles
    执行 show profile for query 1 可以查询详细的每个步骤的时间
    show profile for query 1
  • Type
    show profile type
    • all: 显示所有信息,show profile all for query n
    • block io: 显示块 io 操作的次数,show profile block io for query n
    • context switches: 显示上下文切换次数,主动和被动,show profile context switches for query n
    • cpu: 显示用户 CPU 时间、系统 CPU 时间,show profile cpu for query n
    • IPC:显示发送和接受的消息数量,show profile ipc for query n
    • Memory:暂未实现
    • page faults:显示页错误数量,show profile page faults for query n
    • source:显示源码中的函数名称和位置,show profile source for query n
    • swaps:显示 swap 的次数,show profile swaps for query n

performance schema

  • 用于监控 MySQL server 在一个较低级别的运行过程中的资源消耗、资源等待等情况
  • 特点
    1. 提供了一种在数据库运行时实时检查 server 的内部执行情况的方法,performance_schema 数据库中的表使用 performance_schema 存储引擎
      该数据库主要关注数据库运行过程中 性能相关 的数据(information_schema 主要关注 server 运行过程中的元数据信息)
    2. performance_schema 通过监视 server 的事件实现监视 server 内部运行情况,事件 指 server 内部活动中所做的 任何事情以及对应的时间消耗,利用这些信息判断 server 中相关的资源消耗在哪里
      一般来说事件可以是 函数调用、操作系统的等待、SQL 语句执行的阶段(如 parsing、sorting 阶段),或者整个 SQL 语句与 SQL 语句集合
      事件采集可以方便的提供 server 中的相关存储引擎对磁盘文件、表 I/O、表锁等资源的同步调用信息
    3. performance_schema 中的事件和写入二进制日志中的事件(描述数据修改的 events)、事件计划调度程序(一种存储程序)的事件不同,performance_schema 事件记录的是 server 执行某些活动对某些资源的消耗、耗时、这些活动执行的次数等情况
    4. performance_schema 中的事件只记录在本地,这些表中的数据发生变化时不会被写入 binlog 中,也不会通过复制机制被复制到其他 server 中
    5. 当前活跃事件、历史事件和事件摘要相关的表中记录的数据,能够提供某个事件的执行次数、使用时长,进而分析某个特定线程、特定对象(如 mutex 或 file)相关联的活动
    6. performance_schema 存储引擎使用 server 源代码中的监测点来实现某个事件数据的收集,对于 performance_schema 实现机制本身的代码没有相关的单独线程来检测
    7. 收集的事件数据存储在 performance_schema 的表中,这些表可以使用 select 语句查询,也可以使用 SQL 语句更新
    8. performance_schema 表中的数据不会持久化存储在磁盘中,而是保存在内存中,一旦服务器重启,这些数据就会丢失(包括配置表在内的整个 performance_schema 的所有数据)
    9. MySQL 支持的所有平台中事件监控功能都可用,但不同平台用于统计事件事件开销的计时器类型可能会有差异

show processlist

  • 查看连接的线程个数,观察是否有大量线程处于不正常状态或者其他不正常特征
  • 属性
    • id: session ID
    • user: 操作的用户
    • host:操作的主机
    • db:操作的数据库
    • command:当前状态
    • info: 详细的 SQL 语句
    • time:相应命令的执行时间
    • state:命令执行状态