增加提交日志的问题
Issues in growing commit logs
我有一台机器,提交日志一直增加到 7.8 GB,并且还在增长,我检查了一个 属性 commitlog_total_space_in_mb: 8192
,它在 cassandra.yaml 中有评论。我怀疑它必须是默认值。
1) 增加提交日志大小的问题是什么?
2) 是不是说我的 memtable 阈值没有达到?
已编辑:
memtable_cleanup_threshold = 1/(memtable_flush_writers + 1) * (memtable_offheap_space_in_mb + memtable_heap_space_in_mb)
推荐值是,
memtable_flush_writers - Smaller of number of disks or number of cores with a minimum of 2 and a maximum of 8, so in our case it is '8'
memtable_offheap_space_in_mb - 1/4 of the heap size, so in our case it is 2GB
memtable_heap_space_in_mb - 1/4 of the heap size, so in our case it is 2GB
所以计算将是,
memtable_cleanup_threshold = 1/(8 + 1) * 4096
memtable_cleanup_threshold = 455MB
为什么它没有刷新到 455 MB 并删除提交日志?
是的,默认为 8192MB(或日志文件磁盘的 1/4 space,以较小者为准 -- 如果您的服务器较小,则可以适用)。资料来源:Cassandra documentation on commitlog_total_space_in_mb.
回答您的问题:
(1) 如果提交日志文件继续增长,您可以 运行 磁盘 space。
(2) 尚未达到配置的阈值。
在您添加其他问题后编辑:
刷新内存表时不会删除提交日志。
请注意,文件大小是根据您的配置大小预先分配的——我想您已经知道了,但请注意,如果其他人试图通过 ls
或类似方式观察文件大小。
如果您nodetool drain
或重新启动,它们将被清除。否则,它们将继续增长到最大尺寸并旋转。
这是一个测试,看看如果你强制刷新会发生什么:
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 1292049
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
10418
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
nodetool flush
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 0
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
10419
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
nodetool drain
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 0
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
no such file
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
如果它根据 memtable 配置自动刷新,您会看到类似的结果。在以下观察到的刷新过程中,提交日志也没有被清除:
我有一台机器,提交日志一直增加到 7.8 GB,并且还在增长,我检查了一个 属性 commitlog_total_space_in_mb: 8192
,它在 cassandra.yaml 中有评论。我怀疑它必须是默认值。
1) 增加提交日志大小的问题是什么?
2) 是不是说我的 memtable 阈值没有达到?
已编辑:
memtable_cleanup_threshold = 1/(memtable_flush_writers + 1) * (memtable_offheap_space_in_mb + memtable_heap_space_in_mb)
推荐值是,
memtable_flush_writers - Smaller of number of disks or number of cores with a minimum of 2 and a maximum of 8, so in our case it is '8'
memtable_offheap_space_in_mb - 1/4 of the heap size, so in our case it is 2GB
memtable_heap_space_in_mb - 1/4 of the heap size, so in our case it is 2GB
所以计算将是,
memtable_cleanup_threshold = 1/(8 + 1) * 4096
memtable_cleanup_threshold = 455MB
为什么它没有刷新到 455 MB 并删除提交日志?
是的,默认为 8192MB(或日志文件磁盘的 1/4 space,以较小者为准 -- 如果您的服务器较小,则可以适用)。资料来源:Cassandra documentation on commitlog_total_space_in_mb.
回答您的问题:
(1) 如果提交日志文件继续增长,您可以 运行 磁盘 space。
(2) 尚未达到配置的阈值。
在您添加其他问题后编辑:
刷新内存表时不会删除提交日志。
请注意,文件大小是根据您的配置大小预先分配的——我想您已经知道了,但请注意,如果其他人试图通过 ls
或类似方式观察文件大小。
如果您nodetool drain
或重新启动,它们将被清除。否则,它们将继续增长到最大尺寸并旋转。
这是一个测试,看看如果你强制刷新会发生什么:
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 1292049
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
10418
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
nodetool flush
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 0
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
10419
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
nodetool drain
nodetool tablestats keyspace.table | grep "Memtable data size"
Memtable data size: 0
cat /var/lib/cassandra/commitlog/CommitLog-A.log | wc -l
no such file
cat /var/lib/cassandra/commitlog/CommitLog-B.log | wc -l
0
如果它根据 memtable 配置自动刷新,您会看到类似的结果。在以下观察到的刷新过程中,提交日志也没有被清除: