-
MySQL教程之Percona-Toolkit 之 pt-table-checksum 总结(3)
tbl = 'employees_ptchksum' AND chunk = '5'
'对应emp_no > 499999'
51 Query SHOW GLOBAL STATUS LIKE 'Threads_running'
51 Query EXPLAIN SELECT COUNT(*), '0' FROM `employees`.`employees_ptchksum` FORCE INDEX(`PRIMARY`) WHERE ((`emp_no` > '499999')) ORDER BY `emp_no` /*explain past upper chunk*/
51 Query REPLACE INTO `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT 'employees', 'employees_ptchksum', '6', 'PRIMARY', '499999', NULL, COUNT(*), '0' FROM `employees`.`employees_ptchksum` FORCE INDEX(`PRIMARY`) WHERE ((`emp_no` > '499999')) ORDER BY `emp_no` /*past upper chunk*/
51 Query SHOW WARNINGS
51 Query SELECT this_crc, this_cnt FROM `percona`.`checksums` WHERE db = 'employees' AND tbl = 'employees_ptchksum' AND chunk = '6'
51 Query UPDATE `percona`.`checksums` SET chunk_time = '0.002064', master_crc = '0', master_cnt = '0' WHERE db = 'employees' AND tbl = 'employees_ptchksum' AND chunk = '6'
51 Query SHOW GLOBAL STATUS LIKE 'Threads_running'
51 Query SHOW MASTER STATUS
51 Quit
根据
general log
可以看出,pt-table-checksum主要工作的流程可以总结如下:
- 连接主库和从库,查询当前数据库服务器信息,包括参数设置,负载信息等;
- 根据工具选项设置会话级别参数,设置会话级
binlog row format
为STATEMENT;- 根据工具选项创建校验结果表(默认为percona.checksums表),查看当前数据库服务器运行状态;
- 获取校验的数据库和表,逐张顺序进行检查校验;
- 开始分析表,根据表的索引(如有),将表分成多个chunk,每个chunk包含多行,默认为1000,chunk对应的表行数可以根据数据库性能状态动态调整;
- 根据以上分析生成表的校验语句,并检查表结构;
- 开始进行表的校验分析,为了保证一致性,这个阶段会将当前chuck所包含的行加上行锁,并将校验的结果以
replace into
方式存入校验结果表;- 再次查询校验结果表,并更新master_crc、master_cnt的值(主库),如果是从库则是this_crc、this_cnt;
- 根据数据库运行状态调整下一个chunk所包含行数;
- 继续下一个chunk的校验检查,直到表中所有的chunk校验完成;
- 从库运行完校验检查,汇总这张表的结果;
- 循环完成所有需要校验的表直到完成所有的表的校验操作。
回到顶部
总结
- pt-table-checksum是当前MySQL主从数据库数据一致性校验比较好的工具,但也会对服务器性能造成影响,尽管影响的范围有限,在进行每个chunk检查校验时会对chunk中涉及的表行加锁,所以,检验还是尽量在业务低峰期进行操作;
- pt-table-checksum工具无法对主从表结构不一致的表进行校验;
- 校验结果只能看出哪些表出现不一致性,并无法得出具体出现多少行数据不一致,哪些数据行不一致等。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式