Percona Toolkit 神器全攻略(监控类)

十八、Percona Toolkit工具 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括:1)检查master和slave数据的一致性2)有效地对记录进行归档3)查找重复的索引4)对服务器信息进行汇总5)分析来自日志和tcpdump的查询6)当系统出问题的时候收集重要的系统信息percona-toolkit源自Maatkit和Aspersa工具,这两个工具是管理mysql的最有名的工具。 阅读详情

Percona Toolkit 神器全攻略(监控类)

file Percona Toolkit 神器全攻略系列共八篇,前文回顾:

前文回顾
Percona Toolkit 神器全攻略
Percona Toolkit 神器全攻略(实用类)
Percona Toolkit 神器全攻略(配置类)

全文约定:$为命令提示符、greatsql>为GreatSQL数据库提示符。在后续阅读中,依据此约定进行理解与操作

监控类

在Percona Toolkit中监控类共有以下工具

  • pt-deadlock-logger:提取和记录MySQL/GreatSQL死锁
  • pt-fk-error-logger:提取和记录外键信息
  • pt-mext:并行查看status样本信息
  • pt-query-digest:分析查询日志,并产生报告
  • pt-mongodb-summary:收集有关 MongoDB 集群的信息
  • pt-pg-summary:收集有关 PostgreSQL 集群的信息

pt-deadlock-logger

概要

提取和记录MySQL/GreatSQL死锁

用法

  • pt-deadlock-logger [OPTIONS] DSN

记录 MySQL/GreatSQL 死锁的信息。信息打印到 STDOUT ,也可以通过指定 --dest 保存到表中。除非指定 --run-time 或 --iterations ,否则该工具将永远运行

选项

该工具所有选项如下

参数含义
--ask-pass连接 MySQL/GreatSQL 时提示输入密码
--charset字符集
--clear-deadlocks创建一个小的死锁。利用新产生的这个死锁刷新Engine InnoDB Status中的死锁信息,间接达到清除Engine InnoDB Status中大的死锁信息的结果,表名为percona_schema.clear_deadlocks这个表一定不能存在,脚本会自动创建表并在生成死锁后删除表,建表语句CREATE TABLE percona_schema.clear_deadlocks (a INT PRIMARY KEY) ENGINE=InnoDB
--columns结果集字段
--config读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项
--create-dest-table创建--dest指定的表
--daemonize后台运行
--database连接到该数据库
--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项
--dest用DSN的格式写存储死锁的位置,至少要指定库和表
--help显示帮助
--host连接到主机
--interval检查死锁的频率,如果未指定,将默认永远运行
--iterations检查死锁的次数,默认情况下,如果没指定,则为无限次数,退出的时间由--run-time来限制
--log守护进程时将所有输出打印到此文件。
--numeric-ip将 IP 地址表示为整数。
--password用于连接的密码
--pid创建给定的 PID 文件
--port用于连接的端口号
--quiet不要死锁,仅将错误和警告打印到STDERR
--run-time退出前要跑多长时间。默认情况下永远运行,每 --interval 秒检查一次死锁。
--set-vars在这个以逗号分隔的 variable=value 对列表中设置 MySQL/GreatSQL 变量
--socket用于连接的套接字文件
--tab使用制表符而不是空格来分隔列
--user登录的用户
--version显示版本
--[no]version-check版本检查

最佳实践

如果想存储 pt-deadlock-logger 提取的有关死锁的所有信息,建议使用以下表结构:

# 可以根据--columns的字段进行调整
CREATE TABLE deadlocks (
  server char(20) NOT NULL,
  ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  thread int unsigned NOT NULL,
  txn_id bigint unsigned NOT NULL,
  txn_time smallint unsigned NOT NULL,
  user char(16) NOT NULL,
  hostname char(20) NOT NULL,
  ip char(15) NOT NULL, -- alternatively, ip int unsigned NOT NULL
  db char(64) NOT NULL,
  tbl char(64) NOT NULL,
  idx char(64) NOT NULL,
  lock_type char(16) NOT NULL,
  lock_mode char(1) NOT NULL,
  wait_hold char(1) NOT NULL,
  victim tinyint unsigned NOT NULL,
  query text NOT NULL,
  PRIMARY KEY  (server,ts,thread)
) ENGINE=InnoDB;
  • server:发生死锁的(源)服务器
  • ts:上次检测到死锁的日期和时间
  • thread:GreatSQL线程编号,和SHOW FULL PROCESSLIST中的ID一致
  • txn_id:InnoDB事务ID
  • txn_time:发生死锁时事务处于活动状态的时间
  • user:连接的数据库用户名
  • hostname:连接的主机
  • ip:连接的 IP 地址。如果指定--numeric-ip,则将转换为无符号整数
  • db:发生死锁的库
  • tbl:发生死锁的表
  • idx:发生死锁的索引
  • lock_type:导致死锁的锁上持有的事务的类型
  • lock_mode:导致死锁的锁的锁定模式
  • wait_hold:事务是在等待锁还是持有锁
  • victim:事务是否被选为死可回滚的事务并进行回滚
  • query:导致死锁的查询

首先创建上方提供的deadlocks表,也可以在命令中加入--create-dest-table自动创建表

greatsql> CREATE TABLE deadlocks (
......中间省略
Query OK, 0 rows affected (0.06 sec)

将host1主机产生的死锁信息保存在host2主机test_db库下面的deadlocks表中

$ pt-deadlock-logger h=localhost,P=3306,u=root,p='' --dest h=localhost,P=3307,u=root,p='',D=test_db,t=deadlocks

因为没有指定--run-time所以该工具会一直在当前窗口运行,如果要转到后台运行可以使用--daemonize

人为制造一个死锁

session 1session 2
START TRANSACTION;
UPDATE t1 SET c2 = 'greatsql' WHERE id = 1;START TRANSACTION;
UPDATE t1 SET c2 = 'GreatSQL' WHERE id = 2;
UPDATE t1 SET c2 = 'greatsql' WHERE id = 2;
UPDATE t1 SET c2 = 'GreatSQL' WHERE id = 1;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

查看deadlocks表

+-----------+---------------------+--------+--------+----------+------+-----------+----+---------+-----+---------+-----------+-----------+-----------+--------+--------------------------------------------+
| server    | ts                  | thread | txn_id | txn_time | user | hostname  | ip | db      | tbl | idx     | lock_type | lock_mode | wait_hold | victim | query                                      |
+-----------+---------------------+--------+--------+----------+------+-----------+----+---------+-----+---------+-----------+-----------+-----------+--------+--------------------------------------------+
| localhost | 2024-03-20 15:12:51 |   1216 |      0 |        8 | root | localhost |    | test_db | t1  | PRIMARY | RECORD    | X         | w         |      1 | UPDATE t1 SET c2 = 'GreatSQL' WHERE id = 1 |
| localhost | 2024-03-20 15:12:51 |   1230 |      0 |       11 | root | localhost |    | test_db | t1  | PRIMARY | RECORD    | X         | w         |      0 | UPDATE t1 SET c2 = 'greatsql' WHERE id = 2 |
+-----------+---------------------+--------+--------+----------+------+-----------+----+---------+-----+---------+-----------+-----------+-----------+--------+--------------------------------------------+
2 rows in set (0.00 sec)

deadlocks表中记录了锁的细节、类型、SQL语句,比起直接看SHOW ENGINE INNODB STATUS方便

pt-fk-error-logger

概要

pt-fk-error-logger工具的作用和pt-deadlock-logger差不多,pt-fk-error-logger是记录MySQL/GreatSQL外键错误信息。

用法

  • pt-fk-error-logger [OPTIONS] [DSN]

记录有关给定 DSN 上的外键错误的信息。信息打印到 STDOUT ,也可以通过指定 --dest 保存到表中。除非指定 --run-time 或 --iterations ,否则该工具将永远运行。

选项

该工具所有选项如下

参数含义
--ask-pass连接 MySQL/GreatSQL 时提示输入密码
--charset字符集
--config读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项
--daemonize后台运行
--database连接到该数据库
--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项
--dest用DSN的格式写存储死锁的位置,至少要指定库和表
--help显示帮助
--host连接到主机
--interval检查死锁的频率,如果未指定,将默认永远运行
--iterations检查死锁的次数,默认情况下,如果没指定,则为无限次数,退出的时间由--run-time来限制
--log守护进程时将所有输出打印到此文件。
--password用于连接的密码
--pid创建给定的 PID 文件
--port用于连接的端口号
--quiet不要死锁,仅将错误和警告打印到STDERR
--run-time退出前要跑多长时间。默认情况下永远运行,每 --interval 秒检查一次死锁。
--set-vars在这个以逗号分隔的 variable=value 对列表中设置 MySQL/GreatSQL 变量
--socket用于连接的套接字文件
--user登录的用户
--version显示版本
--[no]version-check版本检查

最佳实践

如果想存储 pt-fk-error-logger 可以提取的有关死锁的所有信息,建议使用以下表结构:

CREATE TABLE foreign_key_errors (
  ts datetime NOT NULL,
  error text NOT NULL,
  PRIMARY KEY (ts)
);
  • ts:记录时间
  • error:错误描述

将host1主机产生的违反外键约束信息保存在host2主机test_db库下面的foreign_key_errors表中

$ pt-fk-error-logger h=localhost,P=3306,u=root,p='',S=/data/GreatSQL01/mysql.sock --dest h=localhost,P=3307,u=root,p='',S=/data/GreatSQL02/mysql.sock,D=test_db,t=foreign_key_errors

人为创建违反索引约束

# 建t_fk1表
CREATE TABLE `t_fk1` (  
  `id` int unsigned NOT NULL AUTO_INCREMENT,  
  `k` int unsigned NOT NULL DEFAULT '0',  
  `c` char(20) NOT NULL DEFAULT '',  
  `pad` char(20) NOT NULL DEFAULT '',  
  PRIMARY KEY (`id`),  
  KEY `k_2` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 建t_fk2表
CREATE TABLE `t_fk2` (  
  `id1` int unsigned NOT NULL AUTO_INCREMENT,  
  `id2` int unsigned NOT NULL,  
  PRIMARY KEY (`id1`),  
  KEY `id2` (`id2`),  
  CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id2`) REFERENCES `t1` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

往t_fk1表插入数据

greatsql> insert into t_fk1 values(1,1,'a','a');
greatsql> insert into t_fk1 values(2,2,'b','b');
greatsql> insert into t_fk1 values(3,3,'c','c');

往t_fk2表插入数据

greatsql> insert into t_fk2 values(5,5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test_db`.`t_fk2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id2`) REFERENCES `t1` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE)

查看foreign_key_errors表

greatsql> select * from foreign_key_errors\G
*************************** 1. row ***************************
   ts: 2024-03-20 16:21:51
error: 140628737369792 Transaction:
TRANSACTION 21974, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1128, 1 row lock(s), undo log entries 1
MySQL thread id 1235, OS thread handle 140628737369792, query id 90865 localhost root update
insert into t_fk2 values(5,5)
Foreign key constraint fails for table `test_db`.`t_fk2`:
,
  CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id2`) REFERENCES `t1` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
Trying to add in child table, in index id2 tuple:
DATA TUPLE: 2 fields;
 0: len 4; hex 00000005; asc     ;;
 1: len 4; hex 00000005; asc     ;;

But in parent table `test_db`.`t1`, in index PRIMARY,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 5; compact format; info bits 0
 0: len 4; hex 00000006; asc     ;;
 1: len 6; hex 000000004339; asc     C9;;
 2: len 7; hex 82000003cb0110; asc        ;;
 3: len 4; hex 000f5bcd; asc   [ ;;
 4: len 17; hex 3139323639362e36393136393235323433; asc 192696.6916925243;;

1 row in set (0.00 sec)

该表中很清晰的记录了在t_fk2表的id2字段中尝试插入值5,但是根据外键约束t2_ibfk_1,这个值必须在t1表的id字段中存在。

pt-mext

概要

并排查看 MySQL/GreatSQL SHOW GLOBAL STATUS 的例子

用法

  • pt-mext [OPTIONS] -- COMMAND

选项

该工具所有选项如下

参数含义
--help显示帮助
--relative从前一列中减去每一列
--version显示版本

最佳实践

$ pt-mext -r -- mysqladmin ext -i10 -c3

Aborted_clients                              84                    0
Aborted_connects                             18                    0
Acl_cache_items_count                         0                    0
Binlog_cache_disk_use                        15                    0
Binlog_cache_use                            118                    0
······下方省略
  • -i10:采集间隔

  • -c5:采集次数

  • -r:相对的

上述命令中会有三次迭代,但只会输出第一次的结果,第二次和第一次相差的结果。意味着这会详细的列出每个变量在这一阶段的一个初始值(第一列)以及每两个采样点的差异值。

上面例子中Aborted_clients中的84是采样的初始值,后面的0是每两个采样点的差异值。

pt-query-digest

概要

pt-query-digest是用于分析 MySQL/GreatSQL 慢查询的一个工具,它可以分析Binlog、General log、Slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的 MySQL/GreatSQL 协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

用法

  • pt-query-digest [OPTIONS] [FILES] [DSN]

选项

该工具所有选项如下

参数含义
--ask-pass连接 MySQL/GreatSQL 时提示输入密码
--attribute-aliases属性列表别名等
--attribute-value-limit属性值的健全限制
--charset字符集
--config读取这个逗号分隔的配置文件列表,如果指定,这必须是命令行上的第一个选项
--[no]continue-on-error即使出现错误也继续解析
--[no]create-history-table如果 --history 表不存在,则创建
--[no]create-review-table如果 --review 表不存在,则创建它
--daemonize后台运行
--database连接到该数据库
--defaults-file只从给定文件中读取 MySQL/GreatSQL 选项
--embedded-attributes两个Perl正则表达式模式,用于捕获查询中嵌入的伪属性
--expected-range当数量多于或少于预期时解释项目(默认值为5,10)
--explain使用此 DSN 运行示例查询的 EXPLAIN 并打印结果
--filter丢弃此Perl代码未返回true的事件
--group-by按事件的哪个属性进行分组
--help显示帮助
--history在给定表中保存每个查询类的指标
--host连接到主机
--ignore-attributes不要聚合这些属性
--inherit-attributes如果缺少,则从具有这些属性的最后一个事件继承这些属性
--interval检查的频率
--iterations迭代收集和报告周期的次数。如果没指定,则为无限次数,退出的时间由--run-time来限制
--limit限制输出结果百分比或数量,默认值是20,即输出最慢的20条语句
--log守护进程时将所有输出打印到此文件
--max-hostname-length将报告中的主机名删减至此长度
--max-line-length将行设置长度
--order-by按此属性和聚合函数对事件进行排序
--outliers按属性报告异常值
--output如何格式化并打印查询分析结果
--password用于连接的密码
--pid创建给定的 PID 文件
--port用于连接的端口号
--preserve-embedded-numbers加密查询时保留数据库/表名称中的数字
--processlist轮询此 DSN 的进程列表以进行查询,其间有 --interval 睡眠
--progress将进度报告打印到 STDERR
--read-timeout等待来自输入的事件这么长时间; 0 永远等待
--[no]report打印每个 --group-by 属性的查询分析报告
--report-all报告所有查询,甚至是已经审核过的查询
--report-format打印查询分析报告的这些部分(rusage,date,hostname,files,header,profile,query_report,prepared)
--report-histogram绘制该属性值的分布图
--resume将最后一个文件偏移量(如果有)写入给定的文件名
--review保存查询类以供以后查看,并且不要报告已查看的类
--run-time每个 --iterations 运行多长时间,默认永远执行
--run-time-mode设置 --run-time 值的作用对象
--sample过滤掉除每个查询的前 N 个出现之外的所有查询
--slave-user设置用于连接从库的用户
--slave-password设置用于连接从库的密码
--set-vars以逗号分隔的 variable=value 对列表中设置 MySQL/GreatSQL 变量
--show-all显示这些属性的所有值
--since仅解析比该值更新的查询(解析自该日期以来的查询)
--socket用于连接的套接字文件
--timeline显示事件的时间表
--type要解析的输入类型
--until截止时间,配合since可以分析一段时间内的慢查询
--user登陆的用户
--variations报告这些属性值的变化数量
--version显示版本
--[no]version-check版本检查
--[no]vertical-format垂直输出SQL结果
--watch-server在解析 tcpdump 时要监视哪个服务器 IP 地址和端口(如“10.0.0.1:3306”)(对于 --type tcpdump);所有其他服务器都将被忽略

最佳实践

直接分析慢查询日志
$ pt-query-digest ./slow.log

第一部分

# 用户时间,系统时间,物理内存占用大小,虚拟内存占用大小
170ms user time, 0 system time, 29.88M rss, 38.17M vsz
# 执行工具的时间
Current date: Thu Mar 21 10:13:18 2024
# 主机名
Hostname: myarch
# 被分析的文件名字
Files: ./slow.log
# 语句总数量,唯一的语句数量,QPS,并发数
Overall: 119 total, 18 unique, 0.00 QPS, 0.00x concurrency _____________
# 日志记录时间范围
Time range: 2024-03-08T09:52:08 to 2024-03-20T14:37:23
# 属性              总计     最小     最大     平均     95%    标准   中位数
Attribute          total     min     max     avg     95%  stddev  median
============     ======= ======= ======= ======= ======= ======= =======
Exec time           122s   189us     44s      1s      1s      6s   384us
Lock time          489us       0   198us     4us     6us    17us     1us
Rows sent          1.10M       0 535.35k   9.44k   1.26k  68.78k   97.36
Rows examine      97.56M     102  35.09M 839.55k 961.27k   4.59M   97.36
Rows affecte           0       0       0       0       0       0       0
Bytes sent       285.10M      56 202.68M   2.40M   9.76M  18.45M   5.45k
Query size        15.50k      30     250  133.39  202.40   52.84  143.84
......下方省略
  • unique:唯一查询数量,即对查询条件进行参数化以后,总共有多少个不同的查询
  • 95%:把所有值从小到大排列,位置位于95%的那个数
  • median:中位数,把所有值从小到大排列,位置位于中间那个数

如果没有命令hostname可能会导致报错error: Can't exec "hostname"此时下载inetutils即可,因本文使用arch系统,该系统比较干净,所以导致报错。

第二部分

Profile
Rank Query ID                            Response time Calls R/Call  V/M   Item
==== =================================== ============= ===== ======= ====  ========
   1 0x4029831C8032DEE4724E42576E2C52A6  83.1656 68.2%     2 41.5828  0.37 SELECT tpch.lineitem
   2 0x6472467F1FD96D847221959F021B8110  22.8429 18.7%     1 22.8429  0.00 SELECT xxl_job_log
   3 0x34BC467D466B794E79C020BEF3BFFE95   6.3289  5.2%     7  0.9041  1.17 SELECT test_index
   4 0x14810CF629251E9A8950ED961EA04448   4.3492  3.6%     6  0.7249  0.06 SELECT test_db.xxl_job_log

这部分对查询进行参数化并分组,然后对各类查询的执行情况进行分析,结果按总执行时长,从大到小排序。

  • Response:总响应时间
  • time:该查询在本次分析中总的时间占比
  • Calls:执行次数,即本次分析总共有多少条这种类型的查询语句
  • R/Call:平均每次执行的响应时间
  • V/M:响应时间Variance-to-mean的比率
  • Item:查询对象

第三部分

此部分列出了第一个查询的详细统计结果,列出了执行次数、最大、最小、平均、95%、标准、中位数的统计

Query 1: 0.02 QPS, 0.92x concurrency, ID 0x4029831C8032DEE4724E42576E2C52A6 at byte 1789
This item is included in the report because it matches --limit.
Scores: V/M = 0.37
Time range: 2024-03-08T09:53:37 to 2024-03-08T09:55:07
Attribute    pct   total     min     max     avg     95%  stddev  median
============ === ======= ======= ======= ======= ======= ======= =======
Count          1       2
Exec time     68     83s     39s     44s     42s     44s      4s     42s
Lock time      2    11us     5us     6us     5us     6us       0     5us
Rows sent      0     273     133     140  136.50     140    4.95  136.50
Rows examine  71  70.19M  35.09M  35.09M  35.09M  35.09M       0  35.09M
Rows affecte   0       0       0       0       0       0       0       0
Bytes sent     0  38.41k  18.81k  19.60k  19.20k  19.60k  567.10  19.20k
Query size     0      98      49      49      49      49       0      49
String:
Databases    test_db
End          2024-03-08... (1/50%), 2024-03-08... (1/50%)
Hosts        localhost
Start        2024-03-08... (1/50%), 2024-03-08... (1/50%)
Users        root
Query_time distribution
  1us
 10us
100us
  1ms
 10ms
100ms
   1s
 10s+  ################################################################
Tables
   SHOW TABLE STATUS FROM `tpch` LIKE 'lineitem'\G
   SHOW CREATE TABLE `tpch`.`lineitem`\G
EXPLAIN /*!50100 PARTITIONS*/
select * from tpch.lineitem where l_suppkey=23045\G
  • Exec time:表示查询的执行时间

  • Lock time:表示查询在等待锁的时间

  • Rows sent:表示查询返回的行数

  • Rows examined:表示查询扫描的行数

  • Rows affected:表示查询影响的行数

  • Bytes sent:表示查询发送的字节数

  • Query size:表示查询的大小

  • Query_time distribution:查询时间的分布,可以看到这个SQL查询执行时间都是10秒以上

  • Tables:该SQL查询涉及的表

  • EXPLAIN:查询的SQL语句

分析指定时间内的查询

分析12小时内的查询

$ pt-query-digest --since=12h ./slow.log

分析指定时间段内的查询

$ pt-query-digest slow.log --since '2024-03-19 00:00:00' --until '2024-03-21 23:59:59'
分析指含有查询语句的慢查询
$ pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log
分析指定用户的查询

修改m/^root/i'中的root换成对应用户即可

$ pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log
分析其他日志

分析binlog

分析前要先解析

$ mysqlbinlog binlog.000023 > binlog.000023.sql
$ pt-query-digest  --type=binlog  binlog.000023.sql > binlog_analysis.log

分析general log

$ pt-query-digest  --type=genlog  general.log > general_analysis.log
查询结果存储到表

把查询保存到query_review表或query_review_history表,先来查看下query_review表结构

CREATE TABLE IF NOT EXISTS query_review (
   checksum     CHAR(32) NOT NULL PRIMARY KEY,
   fingerprint  TEXT NOT NULL,
   sample       TEXT NOT NULL,
   first_seen   DATETIME,
   last_seen    DATETIME,
   reviewed_by  VARCHAR(20),
   reviewed_on  DATETIME,
   comments     TEXT
)

把查询保存到query_review表,使用--create-review-table会自动创建

$ pt-query-digest --user=root,-password='' --review h=localhost,D=test_db,t=query_review --create-review-table slow.log
分析tcpdump抓取的数据
$ tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > GreatSQL.tcp.txt
$ pt-query-digest --type tcpdump GreatSQL.tcp.txt> tcp_analysis.log

如果没有tcpdump,请手动安装

本文完 :) 下章节将介绍Percona Toolkit 神器全攻略(系统类)


Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

Percona-Toolkit-实用工具指南 Percona Toolkit 提供两个核心数据库管理工具:pt-online-schema-change 用于在线表结构变更,通过创建影子表和触发器实现无锁DDL操作;pt-archiver 用于数据归档和清理,支持分批处理数据并控制性能影响。文档详细介绍了每个工具的工作原理、基本语法、使用示例和常用参数,包括安全建议和适用场景。pt-online-schema-change 适合添加列、修改表结构等操作,而 pt-archiver 可将旧数据归档到文件或另一张表,也可直接安全删除。 阅读详情

相关推荐

MySQL深入学习——第五章 慢查询&索引优化实战学习笔记

一、什么是慢查询? 慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。 1、慢查询配置 1.1、慢查询基本配置 slow_query_log 启动停止技术慢查询日志 slow_qu...

hankin的博客 929

Percona Toolkit工具简介

系列文章目录 第一章:sql_mode模式 第二章:optimize table、analyze table、alter table、gh-ost 第三章:InnoDB MVCC原理 第四章:sql语句执行过程 第五章:Percona Toolkit工具简介 文章目录系列文章目录一、Percona Toolkit简介二、安装使用三、常用命令1. pt-kill1.1 介绍1.2 常用参数1.3 示例2. pt-query-digest2.1 简介2.2 常用参数2.3 示例 一、Percona Tool

守正出奇 7890

MySQL管理工具集深度解析:从选型到实战场景全攻略

MySQL管理工具选型与实战指南 本文系统分析了主流MySQL管理工具的特点与适用场景。phpMyAdmin适合轻量级Web管理,Workbench提供官方全功能支持,HeidiSQL是Windows开发者首选,Dbeaver可实现跨数据库管理,Navicat适合企业级应用,Percona Toolkit专精运维诊断。文章给出了选型决策树,建议初创团队使用免费组合(phpMyAdmin+HeidiSQL),中大型企业选择Navicat+Percona Toolkit方案。未来趋势包括云原生集成、AI辅助优化

专注于编程、AI、人工智能等多个领域内容研究和分析 162

PERCONA-TOOLKIT 安装 使用

PERCONA-TOOLKIT 安装 使用 官网:https://www.percona.com/downloads/percona-toolkit/LATEST/ percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。 这个工具套件对DBA及运维人员着实不可多得 Server 192.168.88.8 主 S...

爱吃鱼的小明的博客 4627

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

等离子体密度诊断集

在实验上不仅要对带电粒子的分布和运动状态进行诊断,如电子温度、电子密度、电离温度等参数,还需要对等离子体中的中性粒子进行必要的实验测量,来获得有关物种的产生、能量分布以及各个激发态布居数分布等信息,如气体温度、转动温度、振动温度、激发温度等参数。

in546的博客 1351

Percona Toolkit 神器全攻略(复制类)

用来监测主从延迟的情况,此工具的设计为向 Master 中插入一条带有当前时间(GreatSQL中的now()函数)的记录到心跳表中,然后,该记录会复制到 Slave 中。GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。输出的结果为:实时延迟,[1分钟延迟,5分钟延迟,15分钟延迟] 主节点的Server_id。

GreatSQL2021的博客 1436

如何评估一颗 AI 芯片的真实性能?TOPS、FPS 与 Token/sec 全解析

AI 芯片在实际部署中,其理论峰值性能往往无法反映真实执行效率。如何科学评估一颗 AI 芯片的“真实性能”,已成为芯片选型与系统集成环节中的关键技术问题。本文从工程实战角度出发,深入拆解当前常用性能评估指标(TOPS、FPS、Token/sec)背后的定义逻辑与使用陷阱,并结合推理模型部署与执行路径,系统讲解 AI 芯片在不同场景下的性能验证方法。通过对芯片算力-功耗-调度三维关系的分析,读者将掌握评估一颗 AI 芯片是否“跑得动业务”的核心判断能力。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3393

Percona Toolkit 神器全攻略(性能类)

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。过读取日志(例如:慢查询日志)中的查询语句,然后分析语句是如何使用表的,即:表之间的数据流向。indexes:此表包含了数据库中所有表的索引信息。它记录了每个表的索引名称、列、类型等。进程的堆栈信息是通过gdb获取的,所以在获取过程中,会对数据库的性能有一定的影响。

GreatSQL2021的博客 1220

AltiumDesigner相同模块复用操作

AltiumDesigner相同模块复用操作框选已布局好的A电路,作为复用模块创建Room同样的操作,框选C电路,然后也创建Room查看A电路的Chanel Offset显示设置复制Channel Offset查看B电路的Channel Offset复制A电路的Channel Offset到C电路Room格式的复制 框选已布局好的A电路,作为复用模块 创建Room 同样的操作,框选C电路,然后也创建Room 查看A电路的Chanel Offset 框选A模块的,然后点右下角的菜单——PCB——PCB

weixin_41947101的博客 5960

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 455

Percona Toolkit 神器全攻略(系统类)

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。接下来就可以把这些切割后的文件导入到 GreatSQL 数据库中了,此时可以用 GreatSQL 的并行LOAD DATA特性,最大导入的加速比大概为20倍。且可以分析从另一台机器收集的样本。命令产生的文件内容,并生产概要信息,然后通过输入不同的命令查看不同的内容。

GreatSQL2021的博客 1314

幸狐RV1106开发板运行Yolo8示例

rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。

qq_42730522的博客 3224

Percona Toolkit 神器全攻略(开发类)

Percona Toolkit 神器全攻略(开发类) Percona Toolkit 神器全攻略系列共八篇,前文回顾: 前文回顾 Percona Toolkit 神器全攻略 Percona Toolkit 神器全攻略(实用类) Percona Toolkit 神器全攻略(配置类) Percona...

weixin_41474971的博客 206

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

Nmap源码分析(端口扫描)

端口扫描是Nmap的核心功能,用于确定目标机的端口状态(开放、关闭、过滤等),也为Nmap的服务与版本扫描、OS扫描、脚本扫描提供基本的指引信息。所以,深入理解端口扫描的实现对分析其他的扫描方式很有帮助。 1简单回顾   首先简要回顾一下端口扫描的原理以及命令行选项。 1.1扫描原理   Nmap提供的10多种类型的端口扫描方法,如TCP SYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP port u...

墨痕诉清风的博客 1597

Percona Toolkit 神器全攻略

Percona Toolkit简称(PT工具),是一组高级命令行工具,用于管理MySQL/GreatSQL的工具。可以用它来执行各种难以手动执行的MySQL/GreatSQL和系统任务。其功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等,DBA熟悉掌握PT工具后将极大提高工作效率。本系列只介绍和探讨Percona Toolkit中针对MySQL/GreatSQL数据库的实用工具。

GreatSQL2021的博客 708

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

DBA效率革命:Percona Toolkit自动化运维全攻略

我最喜欢它的安全机制,默认会先dry-run展示变更,确认无误才真正执行。它的在线编辑器支持直接运行Percona Toolkit命令,还能一键部署Web界面原型,省去了本地搭建测试环境的麻烦。比起简单的DELETE,它能控制事务大小避免锁表,还能实时监控进度,归档的同时不影响线上查询。对已知的常见问题编写了自动修复策略。整合Celery实现定时任务,比如每天凌晨低峰期自动跑checksum,发现异常自动触发sync修复。自动化不是要完全取代人工,而是把DBA从重复劳动中解放出来,专注于更有价值的工作。

GreyWolf12的博客 762

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQL工具全攻略:从入门到精通,数据分析师与开发者的效率利器

SQL作为数据领域的核心语言,是操作和查询数据库的通用标准。其工作原理是通过声明式语法,将用户的数据需求转化为数据库系统可执行的指令,实现对数据的增删改查与复杂分析。掌握SQL的价值在于能够高效、精准地从海量数据中提取信息,支撑业务决策、应用开发和系统优化。在数据分析、后端开发、数据仓库构建等应用场景中,SQL能力直接影响工作效率与成果质量。而一款优秀的SQL工具,如DBeaver或DataGrip,能通过智能补全、执行计划可视化等功能,显著提升SQL编写与调试效率,是数据工作者从“会写”迈向“高效”的关键

weixin_30527423的博客 287

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Percona Toolkit mysql辅助利器

1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等,DBA熟悉掌握后将极大提高工作效率。 2 PT 安装 下载地址 :https://www.percona.com/downloads/percona-toolkit/ 下载完...

weixin_33847182的博客 1356

监控mysql主从数据一致,Mysql主从同步percona-toolkit数据一致性监测

本文源链接地址:https:www.93bok.com引言在mysql工作中接触最多的就是mysql replication,mysql在复制方面还是会有一些常规问题,比如主库宕机或者从库宕机有可能会导致复制中断,通常需要进行人为修复,或者很多时候需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样。这种情况下就需要使用percona-toolkit工具的pt-table-checks...

weixin_34725745的博客 603

percona-toolkit 安装以及使用

关闭防火墙 首先配置数据库的主从 在master服务器上面授权 在slave服务器同步 上传安装包及安装 没有安装包的话用wget下载 wget https://www.percona.com/downloads/percona-toolkit/3.1.0/binary/redhat/7/x86_64/percona-toolkit-3.1.0-2.el7.x86_64.rpm ...

xiongfeng_im的博客 1483

percona toolkit 简介

os: centos 7.4 db: mysql 5.7 software: toolkit 3.0.8 percona toolkit 是一款percona公司推出的优秀的开源的mysql分析工具。 下载 https://www.percona.com/software/database-tools/percona-toolkit https://www.percona.com/...

一名数据库爱好者的专栏 3304

【MySQL】Percona Toolkit 核心 7 工具实战,高效搞定数据库运维

今天分享的这 7 个 PT 工具,覆盖了 MySQL 运维从信息采集→配置校验→拓扑管理→权限控制→索引优化→资源监控降本:大幅减少手动操作时间,比如实例全量信息汇总,从手动敲命令整理 1 小时缩短至 1 分钟,避免重复劳动;提效:快速定位问题根源,不管是拓扑混乱、参数不一致,还是 IO 瓶颈、重复索引,都能精准排查,不用再靠经验瞎猜;避险:上线前通过配置校验拦截参数风险,运维中通过标准化操作减少人为错误,从源头降低数据库故障概率。

专注Java和MySQL领域知识分享 925

Percona Toolkit 7个核心工具实战指南:优化MySQL运维效率

在MySQL数据库运维工作中,我们经常面临实例信息汇总、参数配置校验、复制拓扑梳理、权限管理、索引优化等需求。手动处理这些任务不仅效率低下,还容易出现遗漏或错误。Percona Toolkit(简称PT工具)作为开源的MySQL运维利器,集成了数十个实用工具,能大幅简化运维流程、提升工作效率。本文将聚焦PT工具集中最常用的7个核心工具,结合实际命令与场景解释,帮助大家快速上手并应用于日常运维。

专注Java和MySQL领域知识分享 1909
上一篇: Percona Toolkit 神器全攻略(配置类)
下一篇: FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值