前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大型数据集的MySQL优化

大型数据集的MySQL优化

作者头像
CSDN技术头条
发布2018-02-12 11:26:00
1.1K0
发布2018-02-12 11:26:00
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

诸多知名大公司都在使用MySQL,其中包括Google、Yahoo、NASA和Walmart。此外,其中部分公司的表囊括数十亿行,却又性能极佳。虽然很难保持MySQL数据库高速运行,但面对数据堆积,可以通过一些性能调整,来使其继续工作。本文则将围绕这一问题展开讨论。

导论

设计数据库之前,有必要先了解一下表的使用方法。例如,对于需要频繁更新的数据,最好将其存入一个独立表中,而通过这样的分表,更新操作将更加快捷。同时,表的连接操作也会消耗时间,所以若要深入分析复杂数据,则最好选用大表。惯有认知下,归一化可通过清除冗余来减少数据。然而,归一化也有其负面作用:它会极大地增加索引查找量。考虑到其需要随机访问读取标准硬盘,故而有时也会选用反归一化。

虽然新加载的数据库能够很好地有序运行,但随着数据库进一步扩展,这种有序操作将难以保持,从而导致更多的随机I/O和性能问题。

尽管“反归一化”可能颠覆了一些传统认知,但随着“元数据”理念兴起,为求性能和扩展性的双重提升,包括Google、eBay和Amazon在内的众多主要参与者,都对其数据库进行了“反归一化”调整。更有甚者,传统思维上的这一转变,还在众多数据库设计人员中掀起了这样的言论:归一化是弱者的选择。

用InnoDB取代MyISAM

InnoDB具有change buffering特性(5.5版本之前,又名insert buffer),它能减少磁盘I/O(要求保留二级索引),而名称变更则大大提升了其性能。它可通过多种途径提升插入性能,且受到默认支持。

在表尾插入方面,MyISAM速度更快,但在其和磁盘间的数据加载过程中,为了保护key buffer,MyISAM用到了表锁和一个single lock,从而导致争用。同时,它也不具备上面提到的change buffering特性。

压缩InnoDB表

InnoDB的另一大优势就是它支持表压缩(有助于提高其原始性能和扩展性),它还具有双重效用:减少磁盘和内存间的数据传送;增加磁盘和内存中的压缩存储。此外,因为索引数据本身就是压缩状态,所以对于包含二级索引的表来说,这些优势又将进一步扩大。不止如此,通过SSD(闪存盘)存储设备,压缩的益处会达到最大化,原因是其容量小于传统HDD(旋转硬盘驱动)设备。

按主键顺序批量导入数据

进行批量插入时,按照主键顺序插入行,速度会更快。但InnoDB按该顺序对行进行机械化排布时,如果需要在其他行中间再插入行,就会导致页面分割(极大损害内存外表的性能)。

硬件优化

很久之后才能开始变更MySQL的设置,但如果在次优硬件上操作,则不会造成什么影响。

内存

写入时采用16到32GB的RAM应当是效果最佳的。

处理能力

MySQL(5.5版本)全面采用多线程处理,因此在操作系统支持的情况下,可实现多处理器操作。尽管出于扩展性的需求,很多DBAs能支持更多处理器,但在这一点上,两个双核CPU已能满足需求。

操作系统

只要能支持64位进程,选用什么样的O/S并不重要。大多数DBAs都选择64位的LVM(逻辑卷管理器)来提高备份效率。

存储

存储的标准协议,是将其连接至数个spindle和RAID(独立磁盘冗余阵列)。新版2.5 SAS(串行连接SCSI接口)硬盘驱动器虽然很小,通常却比传统大型驱动器运行得更快。

如上所述,在某些情况下,可以使用SSD(特别当需要执行多项写入时)。假设驱动器转速为7200 RPM,则IPOS(每秒输入输出操作)不可能超过100,而SSD的速度则至少是它的五倍。若基于较为优质的SSD,则IOPS可达到20000甚至更高。由此看来,如果面对巨量内存,且只想清除其中20%的数据,可利用MySQL将其存入内存。

方法和技巧

为保持数据库高效运行,方法和技巧如下:

  • 从大容量的insert/read表开始,分析所有表的索引:移除不必要的索引;特别关注唯一索引(禁用change buffering)。除非必要,否则不使用唯一索引,代之以普通索引。
  • 每隔一至两周,查看一次慢查询日志,从中筛选出三项速度最慢的查询,并加以优化。
  • 若加载一个备份从服务器,卸载大容量读取查询的备份,因为这也会导致信息冗余。

总结

论及数据库优化,所有方法归根结底都是泛型建议。因此,进一步评估之前,并不能保证这些方法就适用于某些特定的操作或模式。此外,还有许多本文未曾涉及的方法,可以用来优化MySQL服务器。例如,MySQL包含许多服务器变量,它们都可以进一步优化,且在不久的将来,这些发展就会实现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSDN技术头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档