国产数据库优化的几点心得

Posted PostgreSQLChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国产数据库优化的几点心得相关的知识,希望对你有一定的参考价值。

干DBA这一行的朋友今后大概率要面对国产数据库了。那么面对国产数据库,我们在数据库优化方面需要注意一些什么呢?我们在Oracle数据库运维工作中积累的一些技能和经验是不是还管用呢?今天这篇文章我们就来讨论一下这方面的一些问题。

可能有朋友要说了,国产数据库对我们来说是一个黑匣子,我们甚至都不知道如何去评价一个国产数据库的性能高低。确实是的,我看到网上关于国产数据库性能的评价无一例外都是以Benchmark、QPS等十分模糊,不过具有一定可比性的方式进行的,这实际上也是一种没有办法的办法。

做国产数据库的优化首先要注意的一点是不要尝试原封不动的按照原厂Benchmark测试时的调整方式来优化数据库的相关参数和配置。国产数据库的TPMC指标都相当高,在一台2路X86服务器上,几乎所有的国产数据库都号称能够轻松超过100万/TPMC这个门槛。

可能有些DBA不太清楚这个指标意味着什么,前一阵子我们对某个国企的一套核心系统的评估时,确定这套数据库高并发小事务并发上的要求,不超过25万TPMC,如果选择一款超过40万TPMC的国产数据库,那么在并发上就是没有问题的了。

而目前这套数据库跑在3台4路的X86服务器组成的ORACLE数据库RAC上。目前国产数据库的BENCHMARK测试结果之高,是令所有商用数据库汗颜的,如果这些测试结果是可靠的,那么每个TPMC的单价记录应该会牢牢的掌握在我们手里。

甚至前阵子我看到了某国产数据库厂商的高管推断,在最新版本的8路飞腾服务器上,他们的数据库单机TPMC可以突破500万。如果我们仔细看一看某些数据库厂商提供的TPMC测试优化设置的文档,我们会发现有很多设置在实战中是不能轻易使用的,很多设置甚至会影响数据库的稳定性。

其次,如果一个Oracle的DBA转向国产数据库运维,那么请忘记数据库缓冲区命中率吧。这个指标对数据库应用的性能影响十分微小。国产数据库的大多数出身来源都或多或少和开源数据库或者开源代码有关。

上图是我们团队统计的国产数据库来源,不一定十分准确,不过大致上能说明一些问题。占了半壁江山的国产数据库产品基于PG和mysql两大开源数据库产品,剩下的大多数也和这两种数据库有着千丝万缕的关系。

因此对于绝大多数国产数据库优化而言,都可以从这两种数据库上获得灵感。这两种数据库都存在doubl buffers的问题,OS缓冲与数据库缓冲共同组成了数据块缓冲体系。因此单单从数据库缓冲命中率来看,不一定能够准确地反映出实际的缓冲效率。

我们在优化工作中,有时候发现加大国产数据库的数据库缓冲大小所获得的性能提升远远不如在Oracle数据库上那么明显。实际上我们需要把这方面优化的工作放到操作系统缓冲区相关的优化上,包括操作系统的最快刷新策略,虚拟内存分配策略,NUMA的内存相关参数调整等,都会对国产数据库的稳定运行与性能提升有更大的帮助。

实际上在关注数据库缓冲区命中率的同时,我们更要关注的是操作系统物理IO的延时,稳定而较低的操作系统物理IO延时对于国产数据库整体并发性能与SQL执行效率至关重要。

第三方面我们要关注关键应用中SQL的执行效率,国产数据库的CBO优化器目前的水平与Oracle相差甚远,如果某条SQL执行做错了执行计划,那么性能会有巨大的损失。我们应该构建国产数据库执行计划的性能基线,并定期对核心SQL的执行计划基线进行比对分析。一旦发现执行计划存在严重的恶化,能够尽快找出问题,并进行解决。如果能够稳定住关键SQL的执行计划,那么你的数据库系统就不会出太大的问题了。

第四方面是针对高并发应用的优化,我已经遇到了很多用户在做应用压测时发现在Oracle上可以很好的压上去的应用,在国产数据库上压不上去。

而且因为对国产数据库监控方面的指标的认知不足,他们没有能力找到这方面的原因。

这种情况往往是两方面原因导致的,一方面是因为热块冲突,另外一方面可能是因为spinlock争用。如果我们在压测Oracle数据库的时候出现了BBW问题,那么我们可以很容易的发现。不过在国产数据库上,就不一定了,我曾经和某国产数据库原厂的朋友探讨一个压测用例的问题,当时原厂的工程师都无法定位瓶颈在哪里,后来我根据经验调整了一下数据块的填充率参数,并且把某张分区表从范围分区改为HASH分区,TPMC指标立马暴涨了40%。

另外一种场景类似于oracle的闩锁争用,不过体现在spinlock的等待较为严重上,我们通过perf工具可以十分清晰地看出这种等待上排在前两位的。这种情况往往是数据库的高并发下spinlock的默认参数与CPU、操作系统的调优模式之间存在兼容性问题,此时调整这些配置往往是会有效的。

国产数据库的运维,优化工作都处于探索阶段,目前我们的数据库原厂能够给出的优化指南也还十分简陋。

不过随着国产数据库应用的普及,这方面的技术会有较快的发展。很多优化方面的知识,也需要我们在实际应用中去不断地摸索和总结才会越来越丰富。

也希望我们的数据库厂商不要只是把精力放在TPMC测试上,多花点精力研究研究自己的产品的优化技术,能让用户把产品用好,对市场销售也是有帮助的。

以上是关于国产数据库优化的几点心得的主要内容,如果未能解决你的问题,请参考以下文章

iOS 箭头类型视图的几点心得

安装ubuntu系统及ubuntu安装Python的几点心得

关于简历与面试的几点心得

每天坚持不懈的写软文,得到的几点心得感悟

18年10月自考的一点心得

开源项目几点心得,Java架构必会几大技术点