所以我在内存中添加了一个表,然后扫描了该表。但它仍然没有出现在 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
返回行时,应0
bytes_not_populated
,populate_status
应COMPLETED
。
有关内存填充的更多信息可以在这里找到