OLTP 关系数据库的并发控制,从理论到工程都做到头了,按代码调用链一遍一遍分析每一步,找不到优化空间了。
比如实现一条 insert 语句,从接收到一个网络数据包到写入硬盘,整条代码调用链只有在记录被写到内存 btree 的 leaf page 时需要加一个轻量级的 page 锁,这个锁实际上就是一条 CAS 指令,开销极小,就算执行 CAS 失败,当前线程也不会被挂起。所以对于 insert 语句的并发控制,还有比这更优的吗?
实现一条 update 语句更完美,整条代码调用链只需要加一个轻量级的行锁,锁的粒度更小,不用加 page 锁,这个轻量级的行锁也只是一条 CAS 指令。
实现一条不带 for update 的 select 语句,整条代码调用链就没有需要同步的地方,一跟畅通。
