高性能MySQL:分离功能

作者:港云互联 时间:2019-12-11

        许多应用都混合了在线事务处理(OLTP) 和在线数据分析(OLAP) 的查询。OLTP 查询比较短并且是事务型的,OLAP查询则通常很大,也很慢,并且不要求绝对最新的数据。这两种查询给服务器带来的负担完全不同,因此它们需要不同的配置,甚至可能使用不同的存储引擎或者硬件。


        一个常见的办法是将OLTP服务器的数据复制到专门为OLAP工作负载准备的备库上。这些备库可以有不同的硬件、配置、索引或者不同的存储引擎。如果决定在备库上执行OLAP查询,就可能需要忍受更大的复制延迟或降低备库的服务质量。这意味着在一个非专用的备库上执行一些任务时,可能会导致不可接受的性能,例如执行条长时间运行的查询。


        无须做一些特殊的配置, 除了需要选择忽略主库上的一些数据, 前提是能获得明显的提升。即使通过复制过滤器过速掉-小部分的数据也会减少I/O和缓存活动。

高性能MySQL:分离功能

数据归档


        可以在备库上实现数据归档,也就是说可以在备库上保留主库上删除过的数据,在主库上通过delete语句删除数据是确保delete语句不传递到备库就可以实现。有两种通常的办法: 一种是在主库上选择性地禁止二进制日志,另种是在备库 上使用replicate_ignore. db规则(是的,两种方法都很危险)。


        第一种方法需要先将SQL LOG_ BIN 设置为0,然后再进行数据清理。这种方法的好处是不需要在备库进行任何配置,由于SQL语句根本没有记录到二进制日志中,效率会稍微有所提升。最大缺点也正因为没有将在主库的修改记录下来,因此无法使用二进制日志来进行审计或者做按时间点的数据恢复。另外还需要SUPER权限。


        第二种方法是在清理数据之前对主库上特定的数据库使用USE语句。例如,可以创建一个名为purge的数据库,然后在备库的my.cnf文件里设置replicate ignore db=purge并重启服务器。备库将会忽略使用了USE语句指定的数据库。这种方法没有第一种方法的缺点,但有另一个小小的缺点:备库需要去读取它不需要的事件。另外,也可能有人在purge数据库上执行非清理查询,从而导致备库无法重放该事件。Percona Toolkit中的pt-archiver支持以上两种方式。第三种办法是利用binlog ignore db来过速复制事件。但正如之前提到的,这是一种很危险的操作。


将备库用作全文检索


        许多应用要求合并事务和全文检索。然而在写作本书时,仅有MyISAM支持全文检索,但是MyISAM不支持事务(在MySQL5.6有一个实验室预览版本实现了InnoDB的全文检索,但尚未GA)。一个普遍的做法是配置-台备库,将某些表设置为MyISAM存储引擎,然后创建全文索引并执行全文检索查询。这避免了在主库上同时使用事务型和非事务型存储引擎所带来的复制问题,减轻了主库维护全文索引的负担。



新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线