使用 bcc 工具观测 MySQL:1)dbstat功能:将 MySQL/PostgreSQL 的查询延迟汇总为直方图
语法:
dbstat [-h] [-v] [-p [PID [PID ...]]] [-m THRESHOLD] [-u] [-i INTERVAL] {mysql,postgres}
选项:
{mysql,postgres} # 观测哪种数据库-h, --help # 显示帮助然后退出-v, --verbose # 显示BPF程序-p [PID [PID ...]], --pid [PID [PID ...]] # 要观测的进程号,空格分隔-m THRESHOLD, --threshold THRESHOLD # 只统计查询延迟比此阈值高的-u, --microseconds # 以微秒为时间单位来显示延迟(默认单位:毫秒)-i INTERVAL, --interval INTERVAL # 打印摘要的时间间隔(单位:秒)
示例:
# 使用 sysbench 在被观测数据库上执行 select[root@liuan tools]# dbstat mysql -p `pidof mysqld` -uTracing database queries for pids 3350 slower than 0 ms...^C[14:42:26] query latency (us)
2)dbslower
功能:跟踪 MySQL/PostgreSQL 的查询时间高于阈值
语法:
dbslower [-h] [-v] [-p [PID [PID ...]]] [-x PATH] [-m THRESHOLD] {mysql,postgres}
参数:
{mysql,postgres} # 观测哪种数据库 -h, --help # 显示帮助然后退出 -v, --verbose # 显示BPF程序 -p [PID [PID ...]], --pid [PID [PID ...]] # 要观测的进程号,空格分隔 -m THRESHOLD, --threshold THRESHOLD # 只统计查询延迟比此阈值高的 -x PATH, --exe PATH # 数据库二进制文件的位置
示例:
# 使用sysbench在被观测数据库上执行update_index [root@liuan tools]# dbslower mysql -p `pidof mysqld` -m 2 Tracing database queries for pids 3350 slower than 2 ms... TIME(s) PID MS QUERY 1.765087 3350 2.996 UPDATE sbtest1 SET k=k+1 WHERE id=963 3.187147 3350 2.069 UPDATE sbtest1 SET k=k+1 WHERE id=628 5.945987 3350 2.171 UPDATE sbtest1 SET k=k+1 WHERE id=325 7.771761 3350 3.853 UPDATE sbtest1 SET k=k+1 WHERE id=5955. 使用限制
bcc 基于 eBPF 开发(需要 Linux 3.15 及更高版本)。bcc 使用的大部分内容都需要 Linux 4.1 及更高版本。
"bcc.usdt.USDTException: failed to enable probe 'query__start'a possible cause can be that the probe requires a pid to enable" 需要 MySQL 具备 Dtrace tracepoint。
关于zabbix和MySQL分区表-
支持zabbix
2.0和2.2,mysql在有外键的表不支持分区表。在zabbix
2.0和2.2中history和trend表没有使用外键,因此是可以在这些表中做分区的。
Index
changes:
1.如果zabbix的数据库已经有了数据,更改索引可能需要一些时间,根据具体的数据量,需要的时间长短也不一样。
2.在某些版本的MySQL索引的改变会使整个表上读锁。貌似mysql
5.6没有这个限制。
所述第一步骤是修改几个索引以允许做分区,按照下面的命令:
mysql>
Alter
table
history_text
drop
primary
key,
add
index
(id),
drop
index
history_text_2,
add
index
history_text_2
(itemid,
id)
Query
OK,
0
rows
affected
(0.49
sec)
Records:
0
Duplicates:
0
Warnings:
0
mysql>
Alter
table
history_log
drop
primary
key,
add
index
(id),
drop
index
history_log_2,
add
index
history_log_2
(itemid,
id)
Query
OK,
0
rows
affected
(2.71
sec)
Records:
0
Duplicates:
0
Warnings:
0
Stored
Procedures:
下面开始填写存储过程,需要执行下面的几个存储过程语句,只要能看到"Query
OK,
0
rows
affected
(0.00
sec)"只能就没有什么问题了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)