mysql5.6查看归档_MySQL5.6 使用 pt-archiver 分批删除、归档数据

pt-archiver是一个十分高效的表数据归档工具,归档数据可以分批进行事务处理,减少性能消耗;

如果实例开启了GTID,因为GTID不支持CTAS创建表的语法,可以使用pt-archiver处理;

对于跨实例或者跨服务器的表数据归档,pt-archiver可以运行在目标端服务器,因为生成的临时文件是在工具执行所在的服务器。

对于大表的过期数据的批量删除也可以通过pt-archiver指定选项--purge进行处理。

8509cdfc1ddf

QQ截图20200701150725.png

需要清理的表的信息

mysql> select count(*) from fwk_biz_log;

+----------+

| count(*) |

+----------+

| 4347412 |

+----------+

1 row in set (1.05 sec)

mysql> select count(*) from fwk_biz_log where T_LOG_DATE BETWEEN '2018-08-01' AND '2018-09-01';

+----------+

| count(*) |

+----------+

| 11092 |

+----------+

1 row in set (0.01 sec)

删除数据

将2019-09-01之前的日志删除,查看数据库磁盘使用状态

通过 --drt-run 打印查询需要清除数据的执行语句,确认执行内容

[root@VM_100_3_centos ~]# pt-archiver --source h=10.41.98.234,D=ipcis_cloud,t=fwk_biz_log --user=user --password=pass --purge --where "T_LOG_DATE BETWEEN '2019-09-01' AND '2019-10-01'" --dry-run

SELECT /*!40001 SQL_NO_CACHE */ `n_log_id`,`t_log_date`,`c_log_file`,`c_log_line`,`c_log_thread`,`c_log_level`,`c_log_message`,`c_log_messagea`,`c_log_messageb`,`c_log_messagec` FROM `ipcis_cloud`.`fwk_biz_log` FORCE INDEX(`PRIMARY`) WHERE (T_LOG_DATE BETWEEN '2019-09-01' AND '2019-10-01') AND (`n_log_id` < '29476920') ORDER BY `n_log_id` LIMIT 1

SELECT /*!40001 SQL_NO_CACHE */ `n_log_id`,`t_log_date`,`c_log_file`,`c_log_line`,`c_log_thread`,`c_log_level`,`c_log_message`,`c_log_messagea`,`c_log_messageb`,`c_log_messagec` FROM `ipcis_cloud`.`fwk_biz_log` FORCE INDEX(`PRIMARY`) WHERE (T_LOG_DATE BETWEEN '2019-09-01' AND '2019-10-01') AND (`n_log_id` < '29476920') AND ((`n_log_id` >= ?)) ORDER BY `n_log_id` LIMIT 1

DELETE FROM `ipcis_cloud`.`fwk_biz_log` WHERE (`n_log_id` = ?)

执行删除

删除 2019-09-01 之前的数据

[root@VM_100_3_centos ~]# pt-archiver --source h=10.41.98.234,D=ipcis_cloud,t=fwk_biz_log --user=user --password=pass --purge --where "T_LOG_DATE

[root@VM_100_3_centos ~]#

mysql> select * from fwk_biz_log WHERE T_LOG_DATE

Empty set (0.00 sec)

mysql> select count(*) from fwk_biz_log ;

+----------+

| count(*) |

+----------+

| 4238760 |

+----------+

1 row in set (0.93 sec)

删除 2019-09-01 跟 2019-10-01 之间的数据

[root@VM_100_3_centos ~]# pt-archiver --source h=10.41.98.234,D=ipcis_cloud,t=fwk_biz_log --user=user --password=pass --purge --where "T_LOG_DATE BETWEEN '2019-09-01' AND '2019-10-01'"

[root@VM_100_3_centos ~]#

mysql> select * from fwk_biz_log WHERE T_LOG_DATE

Empty set (0.00 sec)

mysql>

mysql>

mysql> select count(*) from fwk_biz_log ;

+----------+

| count(*) |

+----------+

| 4234534 |

+----------+

1 row in set (1.11 sec)

在腾讯云上验证

8509cdfc1ddf

图片.png

碎片空间增加了,没有解决碎片的问题。

归档数据

将2019-11月的日志归档到 fwk_biz_log_201911表中

创建归档表

归档数据

[root@VM_100_3_centos ~]# pt-archiver --source h=10.41.98.234,D=ipcis_cloud,t=fwk_biz_log --dest h=10.41.98.234,D=ipcis_cloud,t=fwk_biz_log_201912 --user=user --password=pass --where "T_LOG_DATE BETWEEN '2019-12-01' AND '2020-01-01'" --limit 1000 --commit-each

查看归档结果

mysql> select * from fwk_biz_log_201912 limit 1;

+----------+---------------------+---------------------+------------+--------------+-------------+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+

| N_LOG_ID | T_LOG_DATE | C_LOG_FILE | C_LOG_LINE | C_LOG_THREAD | C_LOG_LEVEL | C_LOG_MESSAGE | C_LOG_MESSAGEA | C_LOG_MESSAGEB | C_LOG_MESSAGEC |

+----------+---------------------+---------------------+------------+--------------+-------------+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+

| 24872794 | 2019-12-01 18:57:41 | PayServiceImpl.java | 458 | svc-#233642 | INFO | 签约申请 | applySign | {"payType":"2","dataSrc":"66","signature":"3fc5094c38f20aaf6ce9a3d56e9ad27b","bankCode":"ICBC","accountType":"00","accountNo":"6222081812002930000","accountName":"小明","idType":"8","id":"110000199102058366","tel":"18511991009"} | |

+----------+---------------------+---------------------+------------+--------------+-------------+---------------+----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+

1 row in set (0.00 sec)

mysql> select * from fwk_biz_log limit 1;

+----------+---------------------+------------------------+------------+--------------+-------------+------------------------------------------------------+-----------------------+----------------+----------------+

| N_LOG_ID | T_LOG_DATE | C_LOG_FILE | C_LOG_LINE | C_LOG_THREAD | C_LOG_LEVEL | C_LOG_MESSAGE | C_LOG_MESSAGEA | C_LOG_MESSAGEB | C_LOG_MESSAGEC |

+----------+---------------------+------------------------+------------+--------------+-------------+------------------------------------------------------+-----------------------+----------------+----------------+

| 25256968 | 2020-01-01 00:00:01 | PolicyServiceImpl.java | 1994 | svc-#899 | INFO | 更新到期保单状态Wed Jan 01 00:00:00 CST 2020 | UpdateExpirePlyStatus | ListCPkgNos:[] | |

+----------+---------------------+------------------------+------------+--------------+-------------+------------------------------------------------------+-----------------------+----------------+----------------+

1 row in set (0.00 sec)

mysql> select count(*) from fwk_biz_log_201912;

+----------+

| count(*) |

+----------+

| 6435 |

+----------+

1 row in set (0.00 sec)

--limit

type: int; default: 1

每个片段(statement)查询和归档的行数设置。

限制每个SELECT statements查询归档的行数。默认是 1 。提升Limit限制可以更高效,但是如果你想通过设置很多行来减少归档次数需要慎重考虑。这可能会导致其他查询的问题,取决于存储引擎,事务隔离级别,以及配置项比如 "--for-update"。

--txn-size

type: int; default: 1

每个事务的行数。

指定每个事务处理的行数。0 关闭transactions altogether。在 pt-archiver 处理这些行后,它提交 "--source" 和 "--dest" (如果有的话),并且刷新"--file"配置的文件。

这个参数对性能很重要。如果你正在归档一个正在运行的服务器,比如大量OLTP任务的服务器,你需要在 transaction size 和 commit overhead 权衡。大的事务可能会导致更多锁和死锁,小的事务会导致更频繁的提交。为了提供建议参数,这里做了个小测试。在个人PC的MySQL实例上,归档到文件或其他表。设置值为500,性能约为每千行2秒。 设置为0关闭transactions,开启autocommit,性能降低到每千行38秒。

如果你不是事务存储引擎归档,或者归档到事务存储引擎,你可以关闭 transactions ,这样pt-archiver就不会 commit了。

--commit-each

提交每次查询归档 (disables "--txn-size")。

在每个归档后、下个查询前(在sleep前,如果配置 了"--sleep"),提交事务,刷新 "--file" 。

禁用"--txn-size"; 使用 "--limit" 来控制"--commit-each"的事务内容数量。

该配置项常用,作为配置 "--limit" 和 "--txn-size" 同样值的缩略写法。 但是更重要的是,它避免了在查询很多行的时候,事务一直在运行。比如,设想从一个非常大的表的开始位置归档旧数据,配置"--limit" 1000 和 "--txn-size" 1000。 在一次归档1000行后,pt-archiver查找最近的999行然后归档,然后执行下一个SELECT来获取更多行。这会扫描剩下的表空间,但是没有获取更多行。它长时间保持开启事务,仅用来判断任务是否结束了。可以使用 "--commit-each" 参数来避免这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值