MySQL作为几乎每个开源项目首选数据库,因其易管理和免费性备受推崇。然而,其性能问题常常导致网站寻求更高性能的数据库替代品。Percona服务器在2013年兴起,作为MySQL的高性能、高可用性替代选项,拥有与MySQL Enterprise版本相媲美的功能。接下来,我们将探讨Percona与MySQL的区别以及在哪些情况下选择Percona可能更为合适。
在我们的多个网站和网络托管服务提供商中,我们已将Percona替换MySQL。以下是我们选择Percona的原因。
MySQL需要大量内存,而Percona不需要。MySQL使用MyISAM引擎时内存占用较高,由于其数据存储方式,即使对于较小数据量,也会为内存分配固定的存储空间。随着查询增加,所需内存随之增加,导致更多基于磁盘的交换,引发高I/O等待。相比之下,Percona采用动态行格式,数据字段分配所需足够内存,降低了总体内存使用,减少I/O瓶颈,并降低高负载实例的性能压力。
Percona支持并行执行查询,而MySQL不支持。MySQL在使用MyISAM存储引擎执行查询时,会锁定所有所需表,以防止数据被其他查询修改。这导致其他查询在队列中等待锁释放,在高查询量时显著增加延迟。Percona通过仅锁定执行查询时的一行(细粒度锁定)来解决此问题,并使用“二进制日志组提交”技术,允许同时写入多个事务。这两个功能在多用户环境中加快数据库事务执行速度。
Percona提供快速故障排除的诊断指标。MySQL遇到性能慢或崩溃等问题时,需要使用多个外部工具,如mytop、mysqladmin等,这些工具不提供历史性能数据,且需等待性能瓶颈再次出现。Percona将性能统计信息记录在名为INFORMATION_SCHEMA的表上,当注意到性能问题时,可通过该表的查询快速识别错误查询、表、用户或访问者。
MySQL在没有分片的情况下无法扩展,而Percona有助于避免分片。大型网站(如电子商务商店、市场分析应用、在线出版等)使用大量数据时,数据库可能变得非常大(50GB或更多)。MySQL仅依赖服务器内存执行查询,当数据库很大时,需要成比例的大内存以正常运行。当内存耗尽时,许多网站将数据库拆分为多个服务器以避免内存瓶颈,这需要大量重写应用程序代码以正确路由数据库查询。相比之下,Percona将部分数据保留在磁盘上,减少服务器内存使用量,避免数据库分片和相关的代码重写。
在考虑是否使用Percona取代MySQL时,以下是我们注意到性能提升的几种网站类型。
需要高正常运行时间的企业(电子商务、酒店、在线服务等)。通过冗余,即即使一台服务器出现故障,另一台服务器也应能取代其位置。我们使用Percona的XtraDB Clusters,采用“主-主复制”数据库冗余方法,集群中的每个数据库都能充当完整数据库。因此,即使服务器崩溃,其他服务器也能在不影响读取或写入性能的情况下处理流量。
具有流量高峰或高流量网站。每月点击量约为50k的网站,或一次访问超过20-30个访问者的服务器,我们观察到Percona性能提升40%。这得益于Percona中的“行级锁定”和“二进制日志组提交”技术。
处理大量数据的企业。对于处理和存储大量数据的网站,Percona是一个合适选择,因为它通过改进内存存储引擎支持大型数据库。在与相同内存的MySQL相比,Percona的动态行格式(DRF)用于数据字段,可支持更大的数据库,减少45%的内存使用。
网站访问者期望网站在2秒内加载,因此在线企业需要快速的网站基础设施。通过选择MySQL的开源替代方案,我们可以保持较低的基础架构成本,同时提供高正常运行时间和性能。Percona在商业网站中作为MySQL高性能替代品的应用案例表明,它能够实现这一目标。
下载本文