性能指标
QPS
分别执行两次
show global status WHERE variable_name in (“Queries”,”uptime”)
- QPS = (Queries2 - Queries2) / (uptime2 - uptime1)
TPS
分别执行两次
show global status where variable_name in (‘com_insert’, ‘com_delete’, ‘com_update’,’uptime’);
- Tc = com_insert + com_delete + com_update
- TPS = (Tc2 - Tc1) / (time2 - time1)
db 并发数
show global status like “Threads_running”;
db 连接数
show global status like “Threads_connected”;
报警阈值
Thread_connected / max_connections > 0.8
- max_connections 是
my.cnf
配置中的
缓存命中率
show status like “innodb_buffer_pool_read_requests”; show status like “innodb_buffer_pool_reads”;
- innodb_buffer_pool_read_requests: 从缓冲池读取的次数
- innodb_buffer_pool_reads: 表示从物理磁盘读取的次数
- 命中率 = (requests - reads) / requests * 100%
可用性指标
可用性
- 周期性连接数据库,并且执行
select @@version;
堵塞
SELECT waiting_pid AS'被阻塞的线程',
waiting_query AS'被阻塞的SQL',
blocking_pid AS '阻塞线程',
blocking_query AS '阻塞SQL',
wait_age AS '阻塞时间',
sql_kill_blocking_query AS '建议操作'
FROM sys.innodb_lock_waits
WHERE (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(wait_started))>30
死锁
- 查看上一条
show engine innodb status;
- 打印死锁日志
- 打开配置时,死锁日志存放到error_log配置的文件里面
set global innodb_print_all_deadlocks=on;
- 打开配置时,死锁日志存放到error_log配置的文件里面
使用 percona toolkit 的
pt-deadlock-logger
pt-deadlock-logger u=<check_db_user>, p=<check_db_password>,h=<check_db_host> \
--create-dest-table \
--dest \
u=<save_user>,p=<save_password>,h=<save_host>,D=<save_database>,t=<save_table>
- —create-dest-table :创建指定的表。
- —dest :创建存储死锁信息的表。
- —database :-D,指定链接的数据库。
- —table :-t,指定存储的表名。
- —log :指定死锁日志信息写入到文件。
- —run-time :运行次数,默认永久
- —interval :运行间隔时间,默认30s。
- u,p,h,P :链接数据库的信息。
慢查询
- 通过慢查询日志监控
- 通过
information_schema. PROCESSLIST
表实时监控select * from information_schema.PROCESSLIST
-- where time > 60 and command <> 'Sleep';
主从延迟
- 思路
- 主库自己创建一张表,内容只有时间
- 主库周期更新数据
- 从库周期读取数据,跟自己的时间做比较,得出延迟时间
- 使用 percona toolkit 的
pt-heartbeat
主节点周期性更新监控数据
pt-heartbeat --user=xx --password=xxx -h <master_host> \
--create-table \
--database xxx \
--update \
--daemonize \
--interval=1
--database
表的创建和数据更新所在 db--update
执行 update--interval
周期时间,单位 s
从节点周期性读取监控数据,并且进行数据比较
pt-heartbeat --user=xx --password=xxx -h <slave_host>\
--database xxx \
--monitor \
--daemonize \
--log/tmp/slave_lag.log
--database
监控数据所在 db
主从状态
show slave status;
- 查看
Slave_IO_Running
是否为 YesSlave_SQL_Running
是否为 Yes- 和 错误报告
Last_Errno
、Last_Error