ALLOCATOR_USAGE
提供有关 Vertica 节点内存池分配和重复使用的实时信息。
Vertica 中包含两个内存池,全局和 SAL。全局内存池与 Vertica 编录对象相关。SAL 内存池与系统存储层有关。这两个内存池是 Vertica 从中分配和重复使用部分内存的物理结构。
在内存池中,有两种分配类型。全局和 SAL 内存池均包括区块和对象内存分配类型。
-
区块分配来自分层存储,并分成 2 的若干次幂大小(以字节为单位)的组。
-
对象分配为对象类型,例如表或投影。每个对象占用指定的大小。
该表提供了有关这些内存池分配的详细信息。
示例:如何分配、保留和释放内存池内存
下表显示了基于假设示例的示例列值。该示例说明了列值随表对象的添加或删除的变化。
-
添加一个表对象 (
t1
) 时,Vertica 假定UNIT_SIZE
为 8 个字节,USED_COUNT
为 1。 -
当添加第二个表对象 (
t2
) 时,USED_COUNT
将增加到 2。由于每个对象占用 8 个字节,因此USED_BYTES
将增加到 16。 -
当删除两个表对象之一时,Vertica
USED_COUNT
将减少到 1,USED_BYTES
将减少到 8。由于 Vertica 保留内存以供将来使用,因此FREE_BYTES
将增加到 8,FREE_COUNT
将增加到 1。 -
最后,当新建一个表对象 (t3) 时,Vertica 会释放内存以供重复使用。
FREE_COUNT
FREE_BYTES
将返回 0。
示例
以下示例显示了一个区块分配类型的示例记录以及一个对象类型的示例记录。
=> \x
Expanded display is on.
=> select * from allocator_usage;
-[ RECORD 1 ]---+-----------------------------
node_name | v_vmart_node0004
pool_name | global
allocation_type | chunk
unit_size | 8
free_count | 1069
free_bytes | 8552
used_count | 7327
used_bytes | 58616
total_size | 67168
capture_time | 2017-05-24 13:28:07.83855-04
allocation_name | 2^3
.
.
.
-[ RECORD 105 ]-+------------------------------
node_name | v_vmart_node0004
pool_name | SAL
allocation_type | object
unit_size | 128
free_count | 0
free_bytes | 0
used_count | 2
used_bytes | 256
total_size | 256
capture_time | 2017-05-24 14:44:30.153892-04
allocation_name | SAL::WOSAlloc
.
.
.