gpt4 book ai didi

performance - HBase:为什么在达到 BlockCache 的最大大小之前会有被逐出的 block ?

转载 作者:可可西里 更新时间:2023-11-01 14:25:59 26 4
gpt4 key购买 nike

我目前使用的是 Apache HBase 的库存配置,其中 RegionServer 堆为 4G,BlockCache 大小为 40%,因此约为 1.6G。未配置 L2/BucketCache。

这是向 RegionServer 发出约 2K 次请求后的 BlockCache 指标。如您所见,已经有 block 被逐出,可能导致了一些未命中。

为什么他们在我们甚至没有接近限制时就被驱逐了?

Size 2.1 M 当前正在使用的 block 缓存大小(字节)

Free 1.5 G 当前可用于存储更多缓存条目的总空闲内存(字节)

Count 18 block 缓存中的 block 数

Evicted 14 被驱逐的 block 总数

驱逐 1,645 发生驱逐的总次数

平均 10,984 block 在驱逐时的平均年龄(秒)

StdDev 5,853,922 驱逐时区 block 年龄的标准差

命中 1,861 次缓存命中的请求数

命中缓存 1,854 缓存命中 block 请求,但只有在未命中时才将请求设置为缓存 block

Misses 58 缓存未命中但设置为缓存未命中 block 的 block 请求

未命中缓存 58 block 请求是缓存未命中但只有请求设置为使用 block 缓存

命中率 96.98% 命中数除以总请求数

最佳答案

您看到的是 LRU 处理具有三个优先级的 block 的效果:单访问、多访问和内存中。对于默认的 L1 LruBlockCache 类,它们的缓存份额可以设置为(括号中的默认值):

  • hbase.lru.blockcache.single.percentage (25%)
  • hbase.lru.blockcache.multi.percentage (50%)
  • hbase.lru.blockcache.memory.percentage (25%)

对于 4 GB 堆示例,并为缓存预留 40%,您有 1.6 GB 堆,根据上述百分比,每个优先级进一步分为 400 MB、800 MB 和 400 MB。

当一个 block 从存储中加载时,它通常被标记为单次访问,​​除非它所属的列族已配置为 IN_MEMORY = true,将其优先级设置为内存中(显然).对于单访问 block ,如果另一个读访问正在请求同一个 block ,则将其标记为多访问优先级。

LruBlockCache 有一个内部逐出线程,每 10 秒运行一次,检查每个级别的 block 是否超过了允许的百分比。现在,如果您扫描一次更大的表,并假设缓存完全为空,则所有 block 都被标记为单次访问。如果表的大小为 1 GB,则您已将 1 GB 加载到 400 MB 的缓存空间中,然后逐出线程将在适当的时候减少该空间。事实上,根据扫描所用的时间,逐出线程的 10 秒在扫描期间会失效,一旦超过 25% 阈值就会开始逐出 block 。

驱逐将首先从单访问区域驱逐 block ,然后是多访问区域,最后,如果堆上仍有压力,则从内存区域驱逐 block 。这也是为什么您应该确保内存中标记的列族的工作集不超过配置的缓存区域。

你能做什么?如果你有大部分的单访问 block ,你可以调整上面的百分比来给 LRU 的单访问区域更多。

关于performance - HBase:为什么在达到 BlockCache 的最大大小之前会有被逐出的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35754169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com