数据库内核优化
目的
通过优化数据库内核来提升数据库性能。
方法
- 分析数据库内核瓶颈
- 使用perf top工具抓取热点函数。
- 使用鲲鹏DevKit工具进行分析。
- 使用数据库自带的性能分析工具,例如MySQL的Performance Schema。
- 分析内核源码,寻找优化方法
- 大锁拆小锁:使用更细粒度的锁,减少锁竞争。
- cacheline对齐:通过cacheline对齐消除伪共享(false sharing)现象。
- SIMD指令加速:使用sve或neon指令加速计算。
- 内联函数:对于频繁调用的小函数,函数调用的时间开销可能已经远高于函数本身的时间开销了,这时可以通过在函数的定义前面增加inline关键字,将函数定义为内联函数来降低函数调用的开销,提高程序性能。
内核优化的案例有:
- MySQL CRC32指令优化:在鲲鹏处理器内,MySQL CRC32指令优化特性使用鲲鹏CRC32硬件指令替换CRC32算法的软件实现,减小了CRC32的计算开销。
- MySQL细粒度锁优化:在MySQL OLTP场景下,大量并发的DML(Insert, Update, Delete)语句会访问lock_sys->mutex全局锁保护的关键数据结构,导致锁竞争激烈,性能下降。为了解决这个问题,鲲鹏BoostKit提供了采用细粒度hash桶锁来替换全局锁的优化特性,能够减少锁冲突,提高并发度。