leveldb 产生大量ldb文件,导致IO error

发布于 2021-12-01 05:20:23 字数 1571 浏览 831 评论 8

在大批量写入的时候,leveldb会产生很多2M的后缀为ldb的文件,将static const int kTargetFileSize = 2 * 1048576;

设置为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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

温柔少女心 2021-12-04 16:46:16

白石大哥,leveldb怎么控制每一层的sst大小呢?level1和level2、level n中的sst大小都是相同的吗?我知道kTargetFileSize可以控制level1的sst大小。其他层的怎么控制呢?谢谢大哥。

如此安好 2021-12-04 16:46:16

这个还真没仔细研究

多彩岁月 2021-12-04 16:36:29

你这场景是不是不适合用LevevDB了!

本宫微胖 2021-12-04 16:31:01

白石大哥,因为我写入的速度很快,大概在每秒300+个文件,每个文件256K。这这样高速写入的情况下,调整为32M之后,也是很快就扛不住了。请问,还有其他可以调整的参数吗?让它快速合并。

灵芸 2021-12-04 16:03:41

#更改db/version_set.cc文件,由于leveldb默认的sst文件是2M, 在数据集达到100G的时候要占用几万个文件,

#修改:version_set.cc:23 static const int kTargetFileSize = 32 * 1048576;

#让默认的文件变成32M,减少目录的压力。

make libleveldb.a

柳絮泡泡 2021-12-04 14:30:44

您好,因为是大批量的是写入,亿级别的,加大了文件句柄,只能坚持一会,治标不治本啊。哥,还有什么好方法吗?

带上头具痛哭 2021-12-04 10:27:12

还有一个问题就是,怎么文件数量这么多了,它还没有进行合并操作呢?

本王不退位尔等都是臣 2021-12-03 21:36:38

这是LevelDB的数据分层的设计特性!你加大你系统的文件句柄数不就行了!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文