信息 数据库IP地址 库名 表名
主数据库 10.58.107.46 unix sbtest01
归档数据库 10.58.107.46 unix sbtest_archiver
当一个表超过千万行的时候就会对数据库性能造成影响,但如果仅有INSERT操作和少量的SELECT操作,几乎没有UPDATE和DELETE操作的话,相对来说对数据库的性能影响不算很大。
大表所带来的影响:
慢查询影响:很难再一定时间内过滤出所需的数据库,大表会降低数据库的效率
DDL操作影响:建立索引需要很长时间,如果是<MySQL5.5的版本建立索引会锁表,如果是MySQL>=5.5版本虽然不会锁表但会引起主从延迟。
修改表结构会导致要长时间锁表,会造成主从延迟,由于主从复制的机制是所有的DDL操作全在主库上完成操作,在通过日志传送到从库上,然后在从库上执行相同的操作。
在主库上修改表结构的时候,这个表的所有操作会被阻塞,从而影响数据库操作,如果表访问很频繁,在做增加字段或者修改字段长度,在这种操作下都是要锁表的,从而导致数据库连接数会猛增,插入连接被阻塞掉,因为修改表结构,所以加入了元数据的锁,所有对表的操作都要等表结构修改之后才能进行操作,如果连接数被占满那么前台可能会报500错误
归档的优点:尽量减少前后端对业务的影响,对于前端来说表结构并没有变化。对于已经归档的数据只需要添加查询入口即可,归档的数据是很少有人查询的,就算归档表很大,对正常业务的影响也是轻微的,而且归档表可以跟业务表放到不同的服务器上,一方面减少热数据的表容量,减少核心服务器查询压力,对于后端来说已经归档的数据是已经完成相关操作及统计的历史数据,对于后端应用也不会有什么影响。
不影响业务影响面临的两个难点:
归档的时间选择。
如何进行归档操作,对于大表的增删改查都要十分小心,如果要进行归档,就把归档的数据从现有的表中删除,如果操作不当,轻则产生主从延迟,重则产生大量的阻塞从而影响业务的正常访问对于大表的增删该查
安装及使用方法:
安装percona-toolkit
wget https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/redhat/7/x86_64/percona-toolkit-3.0.11-1.el7.x86_64.rpm
yum localinstall percona-toolkit-3.0.11-1.el7.x86_64.rpm
创建归档表
注:以下是归档示例,数据库是unix,归档的表是sbtest01 ,归档到 sbtest_archiver表中。
use unix;
create table sbtest_archiver like sbtest1 ;
使用percona做数据库归档
注:以下归档命令是把数据归档完之后,并删除掉老的数据,如果用于线上执行前请慎重,如果做完归档不想删除掉老的数据可以使用no-delete参数。
pt-archiver \
--source h=10.58.107.46,P=3306,u=monitor,p=123123,D=unix,t=sbtest1 \
--dest h=10.58.107.46,P=3306,u=monitor,p=123123,D=unix,t=sbtest_archiver \
--where 'id <= 10000' --limit=1000 --txn-size=1000 \
--statistics --charset=utf8
参数详解:
--no-delete #归档时不删除老数据
--limit #表示每次事务删除的行数
--txn-size #每个事务提交的行数(读写)
评论区