从这一篇开始,接下来的几篇推送文章,着重讨论oracle 12c最为重要的特性之一:In-Memory。这个特性说起来,倒也简单。我们知道数据库进行物理I/O读写时,其性能会受到磁盘的I/O能力的制约。而我们知道现今的计算机,其瓶颈,基本就是在磁盘读写的速度上了。那么,如果把要读取的数据都放置到内存中,那速度显然刷的一下就上来了嘛。 oracle从12c开始支持In-Memory功能。 其实第一次接触到这个东西,我的第一反应,就是去查看官方文档 Database Administrator's Guide 我觉得这里肯定有的,恰好手头就有12.1的官方文档,于是去翻该文档的第六章内存管理,结果是没有········· 然而,oracle的在线文档中,居然有········ 链接如下: https://docs.oracle.com/database/121/ADMIN/memory.htm#ADMIN14257
In-Memory列存储组件,为12c 中SGA的可选组件。可以用来存储表、表分区、以及其他数据库对象的副本。启用该选项,我们可以在SGA中按列存储某些对象,而不是原来的按行存储。 ps:看到按列存储,会有人想到Sybase的IQ数据库咩? In-Memory列存储是SGA中的一个新的静态池(static pool)。所谓静态,也就是说里面的对象需要我们dba手工管理。在该池中,数据都是按列存储,而原来sga的db buffer cache中,数据依然还是按行存储。这样,整个内存,就可以同时提供数据的按行和按列存储。要启用该选项,INMEMORY_SIZE参数,需要设置为非零值。当然,不能小于100M,否则,你会碰到如下错误: SYS@ora12c> alter system set inmemory_size=50m scope=spfile;
System altered.
SYS@ora12c> startup force; ORA-64353: in-memory area size cannot be less than 100MB
可以在如下级别上启用In-Memory列存储功能: Column Table Materialized view Tablespace Partition
如果在表空间级别上启用该功 |