0

所以我在内存中添加了一个表,然后扫描了这个表。但它仍然没有出现在 V$IM_SEGMENTS 中。在解释计划中,它显示内存访问已满。所以不确定它是否正在使用列存储。

做了这些:

更改表内存;选择 * 从 ;

从 V$IM_SEGMENTS 中选择 *;

没有行

4

1 回答 1

0

一开始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_populatedpopulate_status列也被查询的正确性。当v$im_segments返回行时,bytes_not_populated应该是0并且populate_status应该是COMPLETED

有关内存人口的更多信息可以在这里找到

于 2019-07-09T15:57:04.130 回答