在双十一这种交易峰值场景下,数据库的性能面临着极大的挑战。为了应对这一挑战,PolarDB进行了大量的优化工作。
首先,针对热点Page的更新及访问,PolarDB优化了其SMO(Split Merge Operation)操作。在之前,由于B+Tree实现的加锁限制,同一时刻整个B+Tree只能有一个SMO操作,这导致了写入性能的受限。PolarDB通过优化加锁,支持同一时刻多个SMO同时进行操作,提高了写入性能。同时,PolarDB引入了Blink Tree来替换B+Tree,通过缩小SMO的加锁粒度,优化了读取性能。这些优化可以将交易场景下PolarDB的读写性能提升20%。
其次,PolarDB对simulated AIO进行了重新设计。在原版中,simulated AIO基于本地存储设计,与分布式存储的特性并不适配。为了进行IO合并,原版的simulated IO设计将所有异步IO请求按照目标地址进行组织,存放在同一个IO数组中。然而,这种设计在分布式存储下并不适用,因为它会导致同一时刻只有一个或少量存储节点处在服务状态,浪费了其他存储节点的资源。此外,这种设计在高负载下会导致网络中的Inflight IO增多,IO组中的IO请求数量也会增多,使得IO数组中的槽位状态无序,增加了添加和移除IO请求的开销,从而影响了性能。PolarDB通过合理的选择IO合并和拆解,建立状态有序的IO服务队列,有效提升了性能。
最后,PolarDB采用了Partitioned Lock System的方式,将log_sys改造成由多个LockSysShard组成,每个Shard中都有自己局部的mutex,从而将mutex成为瓶颈的问题得到了解决。尤其是在这种大压力的写入场景下,这一改进明显提升了写入性能。
总的来说,通过上述一系列的优化,PolarDB在双十一这种交易峰值场景下,有效提升了其性能,为用户提供了更加稳定和高效的服务。