特性概述
对于查询主要是基于主键列的表,Memoptimized Rowstore提供了快速查询数据的能力。
当启用快速查询时,Memoptimized Rowstore使用了系统全局区(SGA)中称作memoptimize 池的内存区域来存储表的hash索引。
快速查询由一个memoptimize池中的hash索引结构来启动。它提供了对特定表中的块的快速访问,此表永久的pin在buffer cache中来避免磁盘I/O。
这个hash索引在配置Memoptimized Rowstore时创建,并且由Oracle数据库自动维护。
当一个表启动了快速查询,这个表的块就会被pin到buffer cache里面,针对这个表的查询使用memoptimize池中的hash索引来改善性能。
要启动memoptimize池:
设置 MEMOPTIMIZE_POOL_SIZE 初始化参数为一个非0的值。最小设置是100M。
SQL> ALTER SYSTEM SET MEMOPTIMIZE_POOL_SIZE = 2G SCOPE=SPFILE;
为一个表启动快速查询
在CREATE TABLE或者ALTER TABLE语句中指定MEMOPTIMIZE FOR READ。
应事先启动memoptimize 池。
SQL> CREATE TABLE fast_lookup (id NUMBER(5) PRIMARY KEY, test_col VARCHAR2(15)) MEMOPTIMIZE FOR READ;
SQL> ALTER TABLE sh.products MEMOPTIMIZE FOR READ;
要将一个表迁移进Memoptimize池
SQL> execute DBMS_MEMOPTIMIZE.POPULATE(‘SH’,‘PRODUCTS’);
要禁用一个表上的快速查询
SQL> ALTER TABLE sh.products NO MEMOPTIMIZE FOR READ;
限制
启动快速查询的表不能被压缩。
启动快速查询的表上必须有一个启用状态的主键约束。




