数据库性能漫谈
专栏内容:
- 手写数据库toadb
本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。
开源贡献:
前言
随着国产数据库行业的蓬勃发展,从业人数也越来越多,各类型的数据库如雨后春笋一般出现在各处的展会上,各种测试评比中。性能指标往往是人们关注的焦点,也是各厂商着力的重点。
回顾
回想刚开始做国产数据库时,经常会参与采购商或机构组织的各种评比测试,大半时间会花在性能测试阶段,自然也是非常紧张,最能体现团队协作和对优化路径进行决策分析的能力,当然也会发生一些惊心动破测试结果。
根据当前部署的硬件调优数据库参数,这只是第一步,大体思路都是减少磁盘IO的数量,比如增加缓存大小,减少日志,平滑脏页的刷盘等等;如果不能避免的情况下,增加顺序读写的占比,比如大页内存配置。
进一步对操作系统参数调优,常用的如网络参数,并发数量,文件打开数量等。还有文件系统的配置参数,block大小,减少时间的更新等等。
当然,也少不了对硬件部署的调整,最常见的磁盘的调整,当有十来块高速盘时,可以组成多组RAID,这样将数据分散在几组RAID上,可以并发读写。目前在磁盘层面,也是带有缓存的,一般都非常小,写缓存往往并不是最优的选择,可以使用透写模式。
除了这些之外,可能还有数据模型的调整,分区表,增加表分片等等。但这些,在面对多节点下的大并发和大数据量时,搞不好会产生级数级的增加,反而让系统资源浪费,甚至产生千万级的网络连接,或者内存缓存不够,swap耗尽等等极端事情,这就很吓人了,在实验室还好,在比拼测试时宕机是很严重的记录。
体会
做了多年数据库,了解过很多数据库,回头再来看这些,大多还处在我原来是这么用的,国产的也需要这么做的阶段,也就是原样的替换阶段,对于性能也是,希望与原来的性能一样。 其实一直这样追随着国外的数据库模式跑的话,感觉上很难超越,最大的可能是做到一样。如果有很大的突破,可能需要打破一些原有模式,进行赛道越迁才可以。
总结
就数据库性能而言,其实存在两种形式的瓶颈点,一种是门或阈类的点,比如不管多个并发,都需要经过某个阶段;一种是重量级过程,或是蜂窝式功能,前者指耗时的计算,而后者指单个并不耗时,但是需要经过很多这样的单体,这可能在性能分析时很难被关注到。
打破门阈的限制模式,或者架构的化繁为简,才有可能不再有追随的压迫感,当然需要舍弃一些固守的理念。
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。