阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle 12c中性能优化&功能增强新特性之重大突破——内存列存储新特性

401次阅读
没有评论

共计 9333 个字符,预计需要花费 24 分钟才能阅读完成。

内存列存储 (IM column store) 是 Oracle12.1.0.2 版本的主要特点。该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式。数据存在内存中的好处显而易见,而列格式存储非常适合商务智能(BI)产品中的分析查询。

列存储是 Oracle 企业版的独立许可选项。

1.  简介

内存列存储在 SGA 中是一个新部分,通过初始化参数 INMEMORY_SIZE 指定大小。可以选择确定的列,整个表,物化视图或表分区组合存储在该部分。或者,你也可以在表空间层启用内存列存储,从而该表空间中的所有表和物化视图自动启用内存列存储。已对下列命令进行了修改以包括另外的 in-memory 子句。

CREATE TABLE

ALTER TABLE

CREATE TABLESPACE

ALTER TABLESPACE

CREATE MATERIALIZED VIEW

ALTER MATERIALIZED VIEW

常规用例将在后面展示。

文档中说到如下场景适合内存列存储。

使用 ”=”, “<“, “>” and “IN” 谓词的大数据量扫描。
只返回很多列的表的少数列的查询。
连接小表和大表的查询。
汇聚数据的查询。
文档也提到该特性不适合以下场景。

有复杂谓词的查询。
返回大量列的查询。
返回大量行的查询。
多个大表连接的查询。
从上可知,需记住的最重要的事是要为决定哪些对象将从中受益负责。如果决定正确,你将看到性能的巨大提升。如果决定错误,你将浪费掉本可被缓冲区使用的大量内存。

2.  开启内存列存储

记住,内存列存储是 SGA 的一部分,因此,SGA 必须能包含你指定的 NMEMORY_SIZE 参数。在多宿主库环境中,如果任何 PDB 需要存取内存列存储,INMEMORY_SIZE 参数必须在 CDB 中设置。

1)    如果你正使用 AMM (MEMORY_TARGET),将必须扩展它以适应 INMEMORY_SIZE 参数值。

2)    如果你正使用 ASMM (SGA_TARGET),将必须扩展它以适应 INMEMORY_SIZE 参数值。

假定 COMPATIBLE 参数设置成 12.1.0 或更高,且 SGA 总有足够的空间容纳内存列存储,下列过程将开启内存列存储。这里设置 INMEMORY_SIZE 参数为 2G。

ALTER SYSTEM SET SGA_TARGET=3G SCOPE=SPFILE;

ALTER SYSTEM SET INMEMORY_SIZE=2GSCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

ORACLE instance started.

Total System Global Area 3221225472 bytes

Fixed Size                  2929552 bytes

Variable Size            419433584 bytes

Database Buffers          637534208 bytes

Redo Buffers              13844480 bytes

In-Memory Area          2147483648 bytes

Database mounted.

Database opened.

SQL>

注意,启动期间会显示 ”In-Memory Area” 行。

当前 IM 相关设置将被如下显示。除了大小,所有其他相关参数均为默认值。

SQL> SHOW PARAMETER INMEMORY

NAME                                TYPE        VALUE

———————————————– ——————————

inmemory_clause_default              string

inmemory_force                      string      DEFAULT

inmemory_max_populate_servers        integer    1

inmemory_query                      string      ENABLE

inmemory_size                        big integer 2G

inmemory_trickle_repopulate_servers_integer    1

percent

optimizer_inmemory_aware            boolean    TRUE

SQL>

除非在 PDB 级别显式设置 INMEMORY_SIZE 参数,否则,该参数设置将被所有 PDB 继承。在 PDB 级别改变 INMEMORY_SIZE 参数并不要求重启实例或 PDB。

CONN sys@pdb1 AS SYSDBA

— Disable IM column store in the PDB

ALTER SYSTEM SET INMEMORY_SIZE=0;

— OR

ALTER SYSTEM RESET INMEMORY_SIZE;

— Assign a PDB-specific size.

ALTER SYSTEM SET INMEMORY_SIZE=1G;

3.  关闭内存列

根据你的目的,有多种关闭内存列存储的方法。

设置 INMEMORY_FORCE 参数为 ”OFF” 意味着对象不再被保存在内存列存储中,将其切换回 ”DEFAULT” 将恢复其默认的行为。

— System level

ALTER SYSTEM SET INMEMORY_FORCE=OFF;

ALTER SYSTEM SET INMEMORY_FORCE=DEFAULT;

设置 INMEMORY_QUERY 参数为 ”DISABLE” 意味着优化器优化查询时将不再考虑内存列存储。将其切换回 ”ENABLE” 将恢复其默认功能。

— System level

ALTER SYSTEM SET INMEMORY_QUERY=DISABLE;

ALTER SYSTEM SET INMEMORY_QUERY=ENABLE;

— Session level

ALTER SESSION SET INMEMORY_QUERY=DISABLE;

ALTER SESSION SET INMEMORY_QUERY=ENABLE;

为了完全禁用内存列存储且释放内存,只需重置 INMEMORY_SIZE 参数。

ALTER SYSTEM RESET INMEMORY_SIZESCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

就像前面说的,可以更改 PDB 级别的设置且不需要实例或 PDB 重启。

4.  管理表

 CREATE TABLE 和 ALTER TABLE 命令已被改进,因此,你可以决定表是否要存储在内存列存储中。以 NO INMEMORY 子句创建的表和不确定子句是一样的。下面的例子将展示用三种语法创建的三个表。

视图 [DBA|ALL|USER]_TABLES 已经被改进来包含内存列存储相关的信息。

CONN test/test@pdb1

CREATE TABLE im_tab (

 id  NUMBER

) INMEMORY;

CREATE TABLE noim_tab (

 id  NUMBER

) NO INMEMORY;

CREATE TABLE default_tab (

 id  NUMBER

);

COLUMN table_name FORMAT A20

SELECT table_name,

      inmemory,

      inmemory_priority,

      inmemory_distribute,

      inmemory_compression,

      inmemory_duplicate

FROM  user_tables

ORDER BY table_name;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

——————– ——– ———————– —————– ————-

DEFAULT_TAB          DISABLED

IM_TAB              ENABLED  NONE    AUTO            FOR QUERY LOW    NO DUPLICATE

NOIM_TAB            DISABLED

3 rows selected.

SQL>

ALTER TABLE 命令可以改变对象内存列存储方面的状态。下例容易的改变内存列存储的状态。

ALTER TABLE IM_TAB NO INMEMORY;

ALTER TABLE NOIM_TAB INMEMORY MEMCOMPRESS FORCAPACITY LOW;

ALTER TABLE DEFAULT_TAB INMEMORY PRIORITYHIGH;

SELECT table_name,

      inmemory,

      inmemory_priority,

      inmemory_distribute,

      inmemory_compression,

      inmemory_duplicate

FROM  user_tables

ORDER BY table_name;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

——————– ——– ——– ——————————– ————-

DEFAULT_TAB          ENABLED  HIGH    AUTO            FOR QUERY LOW    NO DUPLICATE

IM_TAB              DISABLED

NOIM_TAB            ENABLED  NONE    AUTO            FOR CAPACITY LOW  NO DUPLICATE

3 rows selected.

SQL>

5.  管理列

下例展示将部分列放进内存列存储的语法。

CREATE TABLE im_col_tab (

 id  NUMBER,

  col1NUMBER,

  col2NUMBER,

  col3NUMBER,

  col4NUMBER

) INMEMORY

INMEMORY MEMCOMPRESS FOR QUERY HIGH (col1,col2)

INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (col3)

NO INMEMORY (id, col4);

通过查询视图 V$IM_COLUMN_LEVEL 来获取列设置的相关信息。

CONN sys@pdb1 AS SYSDBA

SELECT table_name,

      segment_column_id,

      column_name,

      inmemory_compression

FROM  v$im_column_level

WHERE owner = ‘TEST’

and  table_name = ‘IM_COL_TAB’

ORDER BY segment_column_id;

TABLE_NAME          SEGMENT_COLUMN_ID COLUMN_NAME                    INMEMORY_COMPRESSION

——————– ———————————————— ————————–

IM_COL_TAB                          1 ID                              NO INMEMORY

IM_COL_TAB                          2 COL1                            FOR QUERY HIGH

IM_COL_TAB                          3 COL2                            FOR QUERY HIGH

IM_COL_TAB                          4 COL3                            FOR CAPACITY HIGH

IM_COL_TAB                          5 COL4                            NO INMEMORY

5 rows selected.

SQL>

可以用 ALTER TABLE 命令改变内存列存储的设置。

CONN test/test@pdb1

ALTER TABLE im_col_tab

NO INMEMORY (col1, col2)

INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (col3)

NO INMEMORY (id, col4);

CONN sys@pdb1 AS SYSDBA

SELECT table_name,

      segment_column_id,

      column_name,

      inmemory_compression

FROM  v$im_column_level

WHERE owner = ‘TEST’

and  table_name = ‘IM_COL_TAB’

ORDER BY segment_column_id;

TABLE_NAME          SEGMENT_COLUMN_ID COLUMN_NAME                    INMEMORY_COMPRESSION

——————– ———————————————— ————————–

IM_COL_TAB                          1 ID                              NO INMEMORY

IM_COL_TAB                          2 COL1                            NO INMEMORY

IM_COL_TAB                          3 COL2                            NO INMEMORY

IM_COL_TAB                          4 COL3                            FOR CAPACITY HIGH

IM_COL_TAB                          5 COL4                            NO INMEMORY

5 rows selected.

SQL>

6.  管理物化视图

CREATE MATERIALIZED VIEW 和 ALTER MATERIALIZED VIEW 命令和 CREATE TABLE and ALTER TABLE 命令类似。

CONN test/test@pdb1

CREATE TABLE t1 AS

 SELECT * FROM all_objects;

CREATE MATERIALIZED VIEW t1_mv INMEMORY

  ASSELECT * FROM t1;

SELECT table_name,

      inmemory,

      inmemory_priority,

      inmemory_distribute,

      inmemory_compression,

      inmemory_duplicate

FROM  user_tables

WHERE table_name = ‘T1_MV’;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

——————– ——– ———————– —————– ————-

T1_MV                ENABLED  NONE    AUTO            FOR QUERY LOW    NO DUPLICATE

1 row selected.

SQL>

ALTER MATERIALIZED VIEW t1_mv

 INMEMORY MEMCOMPRESS FOR CAPACITY HIGH PRIORITY HIGH;

SELECT table_name,

      inmemory,

      inmemory_priority,

      inmemory_distribute,

      inmemory_compression,

      inmemory_duplicate

FROM  user_tables

WHERE table_name = ‘T1_MV’;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

——————– ——– ———————– —————– ————-

T1_MV                ENABLED  HIGH    AUTO            FOR CAPACITY HIGHNO DUPLICATE

1 row selected.

SQL>

ALTER MATERIALIZED VIEW t1_mv NO INMEMORY;

SELECT table_name,

      inmemory,

      inmemory_priority,

      inmemory_distribute,

      inmemory_compression,

      inmemory_duplicate

FROM  user_tables

WHERE table_name = ‘T1_MV’;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

——————– ——– ———————– —————– ————-

T1_MV                DISABLED

1 row selected.

SQL>

7.  管理表空间

设置表空间的默认内存列存储参数意味着该表空间内的所有表和物化视图将使用那些设置,显示覆盖情况除外。

下列将展示如何在表空间创建期间设置内存列存储参数。关键字 DEFAULT 是内存列存储子句的一部分。默认内存列存储设置可以查询 DBA_TABLESPACES 视图查看。

CONN sys@pdb1 AS SYSDBA

CREATE TABLESPACE new_ts

  DATAFILE ‘/u01/app/oracle/oradata/CDB1/datafile/pdb1/pdb1_new_ts.dbf’SIZE 10M

  DEFAULT INMEMORY;

SELECT tablespace_name,

      def_inmemory,

      def_inmemory_priority,

      def_inmemory_distribute,

      def_inmemory_compression,

      def_inmemory_duplicate

FROM  dba_tablespaces

ORDER BY tablespace_name;

TABLESPACE_NAME                DEF_INME DEF_INMEDEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_

—————————— —————- ————— —————– ————-

NEW_TS                        ENABLED  NONE    AUTO            FOR QUERY LOW    NO DUPLICATE

SYSAUX                        DISABLED

SYSTEM                        DISABLED

TEMP                          DISABLED

USERS                          DISABLED

5 rows selected.

SQL>

ALTER TABLESPACE 命令用来修改内存列存储参数。

ALTER TABLESPACE new_ts

 DEFAULT INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;

SELECT tablespace_name,

      def_inmemory,

      def_inmemory_priority,

      def_inmemory_distribute,

      def_inmemory_compression,

      def_inmemory_duplicate

FROM  dba_tablespaces

ORDER BY tablespace_name;

TABLESPACE_NAME                DEF_INME DEF_INMEDEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_

—————————— —————- ————— —————– ————-

NEW_TS                        ENABLED  NONE    AUTO            FOR CAPACITY HIGHNO DUPLICATE

SYSAUX                        DISABLED

SYSTEM                        DISABLED

TEMP                          DISABLED

USERS                          DISABLED

SQL>

ALTER TABLESPACE new_ts

 DEFAULT NO INMEMORY;

SELECT tablespace_name,

      def_inmemory,

      def_inmemory_priority,

      def_inmemory_distribute,

      def_inmemory_compression,

      def_inmemory_duplicate

FROM  dba_tablespaces

ORDER BY tablespace_name;

TABLESPACE_NAME                DEF_INME DEF_INMEDEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_

—————————— —————- ————— —————– ————-

NEW_TS                        DISABLED

SYSAUX                        DISABLED

SYSTEM                        DISABLED

TEMP                          DISABLED

USERS                          DISABLED

5 rows selected.

SQL>

表空间默认设置能被上面展示的对象级的设置覆盖。

8.  视图

我们已看到,有些之前的视图已经被修改以便包括内存列存储信息。下列 V$ 视图已经增加了内存列存储相关的信息。

  • V$IM_COLUMN_LEVEL
  • V$IM_SEGMENTS
  • V$IM_USER_SEGMENTS

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/140023.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计9333字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7966015
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...