所以我在内存中添加了一个表,然后扫描了这个表。但它仍然没有出现在 V$IM_SEGMENTS 中。在解释计划中,它显示内存访问已满。所以不确定它是否正在使用列存储。
做了这些:
更改表内存;选择 * 从 ;
从 V$IM_SEGMENTS 中选择 *;
没有行
所以我在内存中添加了一个表,然后扫描了这个表。但它仍然没有出现在 V$IM_SEGMENTS 中。在解释计划中,它显示内存访问已满。所以不确定它是否正在使用列存储。
做了这些:
更改表内存;选择 * 从 ;
从 V$IM_SEGMENTS 中选择 *;
没有行
一开始inmemory_size
应该在100M左右。以下命令应显示参数的适当大小值inmemory_size
:
show parameter inmemory_size
当对表进行全扫描或内存优先级子句不是 时,将表段加载到内存区域会启动none
,因此我们需要确保您所做的选择查询通过了table access full
路径。因此,启动全表扫描的另一种方法是执行select count(*) from table
.
或者您可以使用包populate
中的过程将表手动加载到内存区域中。dbms_inmemory
示例用法(对于用户 inmem_user,表 t1):
exec dbms_inmemory.populate('INMEM_USER','T1');
关于查询,这里要考虑的另一件事v$im_segments
是;bytes_not_populated
和populate_status
列也被查询的正确性。当v$im_segments
返回行时,bytes_not_populated
应该是0
并且populate_status
应该是COMPLETED
。
有关内存人口的更多信息可以在这里找到