问题:
TokuMX删除文档时,符合删除条件的文档很多,删除操作持续时间长,期间,服务写操作OPS大幅下降,同时日志log里发现大量“ Lock not granted. Try restarting the transaction. ”。
在删除操作执行完成后,积累的update一时间涌进来。同样的删除行为,在MongoDB上运行正常。
原因:
MongoDB是数据库锁,即使remove持续时间长,周期性释放锁可以保证其他读写操作执行。它支持的并发访问,服务端实际上是串行处理。
TokuMX是文档锁,写操作会把目标文档全部加锁,导致其他client在操作该文档时hang住。对于文档锁,没有深入了解,不确定是锁目标文档,还是锁所有扫描过的文档,后者带来的影响更大。
解决方法:
避免批量删除文档,避免覆盖很广的写操作,对于删除操作,可以一次查询,逐行删除。
参考资料:http://www.tokutek.com/2013/09/lock-diagnostics-and-index-usage-statistics-in-tokumx-v1-2-1/
From http://www.cnblogs.com/caosiyang/