炫酷一些的网站,seo培训中心,wordpress html5 音乐播放器,洛阳酒店网站开发大全pt-archiver是一个十分高效的表数据归档工具#xff0c;归档数据可以分批进行事务处理#xff0c;减少性能消耗#xff1b;如果实例开启了GTID#xff0c;因为GTID不支持CTAS创建表的语法#xff0c;可以使用pt-archiver处理#xff1b;对于跨实例或者跨服务器的表数据归…pt-archiver是一个十分高效的表数据归档工具归档数据可以分批进行事务处理减少性能消耗如果实例开启了GTID因为GTID不支持CTAS创建表的语法可以使用pt-archiver处理对于跨实例或者跨服务器的表数据归档pt-archiver可以运行在目标端服务器因为生成的临时文件是在工具执行所在的服务器。对于大表的过期数据的批量删除也可以通过pt-archiver指定选项--purge进行处理。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 打印查询需要清除数据的执行语句确认执行内容[rootVM_100_3_centos ~]# pt-archiver --source h10.41.98.234,Dipcis_cloud,tfwk_biz_log --useruser --passwordpass --purge --where T_LOG_DATE BETWEEN 2019-09-01 AND 2019-10-01 --dry-runSELECT /*!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 1SELECT /*!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 1DELETE FROM ipcis_cloud.fwk_biz_log WHERE (n_log_id ?)执行删除删除 2019-09-01 之前的数据[rootVM_100_3_centos ~]# pt-archiver --source h10.41.98.234,Dipcis_cloud,tfwk_biz_log --useruser --passwordpass --purge --where T_LOG_DATE[rootVM_100_3_centos ~]#mysql select * from fwk_biz_log WHERE T_LOG_DATEEmpty 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 之间的数据[rootVM_100_3_centos ~]# pt-archiver --source h10.41.98.234,Dipcis_cloud,tfwk_biz_log --useruser --passwordpass --purge --where T_LOG_DATE BETWEEN 2019-09-01 AND 2019-10-01[rootVM_100_3_centos ~]#mysql select * from fwk_biz_log WHERE T_LOG_DATEEmpty set (0.00 sec)mysqlmysqlmysql select count(*) from fwk_biz_log ;----------| count(*) |----------| 4234534 |----------1 row in set (1.11 sec)在腾讯云上验证图片.png碎片空间增加了没有解决碎片的问题。归档数据将2019-11月的日志归档到 fwk_biz_log_201911表中创建归档表归档数据[rootVM_100_3_centos ~]# pt-archiver --source h10.41.98.234,Dipcis_cloud,tfwk_biz_log --dest h10.41.98.234,Dipcis_cloud,tfwk_biz_log_201912 --useruser --passwordpass --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)--limittype: int; default: 1每个片段(statement)查询和归档的行数设置。限制每个SELECT statements查询归档的行数。默认是 1 。提升Limit限制可以更高效但是如果你想通过设置很多行来减少归档次数需要慎重考虑。这可能会导致其他查询的问题取决于存储引擎事务隔离级别以及配置项比如 --for-update。--txn-sizetype: 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 参数来避免这些问题。