leveldb 产生大量ldb文件,导致IO error
设置为32* 1048576;会产生好多32M的ldb文件,最终导致文件描述符不够用,而出现IO error: /var/lib/ceph/gbcm/002056.ldb: Too many open files。
-rw-r--r-- 1 root root 33M Jul 12 09:33 002472.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002473.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002474.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002475.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002476.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002477.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002478.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002479.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002480.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002481.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002482.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002483.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002484.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002485.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002486.ldb
-rw-r--r-- 1 root root 33M Jul 12 09:33 002487.ldb
-rw-r--r-- 1 root root 16 Jul 12 09:24 CURRENT
-rw-r--r-- 1 root root 0 Jul 12 09:24 LOCK
-rw-r--r-- 1 root root 455K Jul 12 09:33 LOG
-rw-r--r-- 1 root root 57 Jul 12 09:24 LOG.old
-rw-r--r-- 1 root root 220K Jul 12 09:33 MANIFEST-000004
[root@in]# ls |wc -l
1127
请问为什么会出现这么多的ldb呢?怎么不会自动合并成sst呢?如何解决这个问题呢?急求,跪谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
白石大哥,leveldb怎么控制每一层的sst大小呢?level1和level2、level n中的sst大小都是相同的吗?我知道kTargetFileSize可以控制level1的sst大小。其他层的怎么控制呢?谢谢大哥。
这个还真没仔细研究
你这场景是不是不适合用LevevDB了!
白石大哥,因为我写入的速度很快,大概在每秒300+个文件,每个文件256K。这这样高速写入的情况下,调整为32M之后,也是很快就扛不住了。请问,还有其他可以调整的参数吗?让它快速合并。
#更改db/version_set.cc文件,由于leveldb默认的sst文件是2M, 在数据集达到100G的时候要占用几万个文件,
#修改:version_set.cc:23 static const int kTargetFileSize = 32 * 1048576;
#让默认的文件变成32M,减少目录的压力。
make libleveldb.a
您好,因为是大批量的是写入,亿级别的,加大了文件句柄,只能坚持一会,治标不治本啊。哥,还有什么好方法吗?
还有一个问题就是,怎么文件数量这么多了,它还没有进行合并操作呢?
这是LevelDB的数据分层的设计特性!你加大你系统的文件句柄数不就行了!