memtable太多。当需要flush的memtable数量大于等于max_write_buffer_number时,会写阻塞,直到memtable flush完成。另外,如果max_write_buffer_number大于3,并且待flush的memtable大于等于max_write_buffer_number - 1时,写限速。在这种情况下,你可以在LOG文件中查看到大概如下的log:Stopping writes because we have 5 immutable memtables (waiting for flush), max_write_buffer_number is set to 5
Stalling writes because we have 4 immutable memtables (waiting for flush), max_write_buffer_number is set to 5
level-0层的SST文件太多。当level-0层的文件数量到达level0_slowdown_writes_trigger时,会写限速。当level-0层的文件数量到达level0_stop_writes_trigger时,会写阻塞,直到level-0层的SST文件合并到level-1层,使level-0层的文件数目减少。在这种情况下,你可以在LOG文件中查看到大概如下的log:Stalling writes because we have 4 level-0 files
Stopping writes because we have 20 level-0 files
预计的compaction数据量太多。当预计的compaction数据量到达soft_pending_compaction_bytes时,会写限速。当预计的compaction数据量到达hard_pending_compaction_bytes时,会写阻塞,等待compaction。在这种情况下,你可以在LOG文件中查看到大概如下的log:Stalling writes because of estimated pending compaction bytes 500000000
Stopping writes because of estimated pending compaction bytes 1000000000