前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第四章 为In-Memory 启用填充对象(IM-4.2 第二部分)

第四章 为In-Memory 启用填充对象(IM-4.2 第二部分)

作者头像
Yunjie Ge
发布2022-04-23 09:36:56
6150
发布2022-04-23 09:36:56
举报
文章被收录于专栏:数据库与编程

IM系列文章:第四章 为In-Memory 填充启用对象(IM-4.1第一部分)

启用和禁用IM列存储

通过在 CREATE TABLEALTER TABLE 语句中包含 INMEMORY 子句来启用IM列存储的表。通过在 CREATE TABLEALTER TABLE 语句中包含 NO INMEMORY 子句来禁用IM列存储的表。

此部分包含以下主题:

  • 为新表启用IM列存储 通过在 CREATE TABLE语句中包括 INMEMORY 子句,可以为新表启用IM列存储。
  • 为现有表启用和禁用IM列存储 通过在ALTER TABLE语句中包含INMEMORY 子句来启用现有表的IM列存储。通过在ALTER TABLE语句中包含 NO INMEMORY 子句来禁用表的IM列存储。
  • 为表启用和禁用IM列存储:示例 以下示例说明如何为表启用或禁用IM列存储。

为新表启用IM列存储

通过在 CREATE TABLE 语句中包括INMEMORY 子句,可以为新表启用IM列存储。

要为新表启用IM列存储:

1. 确保数据库已启用IM列存储。

请参见 “为数据库启用IM列存储”。

2. 以具有创建表所需的特权的用户身份登录到数据库。

3. 运行具有 INMEMORY 子句或 NO INMEMORY 子句的 CREATE TABLE 语句。

为现有表启用和禁用IM列存储

通过在 ALTER TABLE 语句中包含 INMEMORY 子句来为现有表启用IM列存储。通过在 ALTER TABLE 语句中包含 NO INMEMORY 子句来为表禁用IM列存储。

要为现有表启用或禁用IM列存储,请完成以下步骤:

  1. 确保为数据库已启用IM列存储。

请参见“为数据库启用IM列存储”。

  1. 以具有 ALTER TABLE 特权的用户身份登录数据库。
  2. 运行带有INMEMORY 子句或 NO INMEMORY 子句的 ALTER TABLE 语句。
  3. (可选)要查看有关内存段的元数据(大小、优先级、压缩级别),请查询。

为表启用和禁用IM列存储:示例

以下示例说明如何为表启用或禁用IM列存储。

示例4-3创建表并为它启用IM列存储

以下示例创建 test_inmem 表,并为它启用IM列存储:

代码语言:javascript
复制
CREATE TABLE test_inmem (
代码语言:javascript
复制
     id        NUMBER(5) PRIMARY KEY,
代码语言:javascript
复制
     test_col  VARCHAR2(15))
代码语言:javascript
复制
  INMEMORY;

此示例使用 INMEMORY 子句的默认值: MEMCOMPRESS FORQUERYPRIORITY NONE

示例4-4为表启用IM列存储

以下DDL语句启用IM列存储的 sh.sales 表:

代码语言:javascript
复制
ALTER TABLE sh.sales INMEMORY;

上述语句使用 INMEMORY 子句的默认值: MEMCOMPRESS FORQUERYPRIORITY NONE

以下查询将导致sales的完全扫描,这会将表填充到IM列存储中:

代码语言:javascript
复制
SELECT /*+ FULL(sales) NO_PARALLEL(sales) */ COUNT(*) FROM sh.sales;

以下查询显示 sales的总体状态(包括样例输出):

代码语言:javascript
复制
COL OWNER FORMAT a3
代码语言:javascript
复制
COL NAME FORMAT a10
代码语言:javascript
复制
COL STATUS FORMAT a20
代码语言:javascript
复制
代码语言:javascript
复制
SELECT OWNER, SEGMENT_NAME NAME, 
代码语言:javascript
复制
       POPULATE_STATUS STATUS
代码语言:javascript
复制
FROM   V$IM_SEGMENTS;
代码语言:javascript
复制
代码语言:javascript
复制
OWN NAME       STATUS
代码语言:javascript
复制
--- ---------- --------------------
代码语言:javascript
复制
SH  SALES      COMPLETED

以下查询计算压缩比。该查询假定表没有在磁盘上进一步压缩。

代码语言:javascript
复制
COL OWNER FORMAT a5
代码语言:javascript
复制
COL SEGMENT_NAME FORMAT a5
代码语言:javascript
复制
SET PAGESIZE 50000
代码语言:javascript
复制
代码语言:javascript
复制
SELECT v.OWNER, v.SEGMENT_NAME, v.BYTES ORIG_SIZE,
代码语言:javascript
复制
       v.INMEMORY_SIZE IN_MEM_SIZE,
代码语言:javascript
复制
       ROUND(v.BYTES / v.INMEMORY_SIZE, 2) COMP_RATIO
代码语言:javascript
复制
FROM   V$IM_SEGMENTS v
代码语言:javascript
复制
ORDER BY 4;
代码语言:javascript
复制
代码语言:javascript
复制
OWNER SEGME  ORIG_SIZE IN_MEM_SIZE COMP_RATIO
代码语言:javascript
复制
----- ----- ---------- ----------- ----------
代码语言:javascript
复制
SH    SALES     851968     1310720        .65
代码语言:javascript
复制
SH    SALES     835584     1310720        .64
代码语言:javascript
复制
SH    SALES     925696     1310720        .71
代码语言:javascript
复制
SH    SALES     958464     1310720        .73
代码语言:javascript
复制
SH    SALES     950272     1310720        .73
代码语言:javascript
复制
SH    SALES     786432     1310720         .6
代码语言:javascript
复制
SH    SALES     876544     1310720        .67
代码语言:javascript
复制
SH    SALES     753664     1310720        .58
代码语言:javascript
复制
SH    SALES    1081344     1310720        .83
代码语言:javascript
复制
SH    SALES     901120     1310720        .69
代码语言:javascript
复制
SH    SALES     925696     1310720        .71
代码语言:javascript
复制
SH    SALES     933888     1310720        .71
代码语言:javascript
复制
SH    SALES     843776     1310720        .64
代码语言:javascript
复制
SH    SALES     999424     1310720        .76
代码语言:javascript
复制
SH    SALES     581632     1507328        .39
代码语言:javascript
复制
SH    SALES     696320     1507328        .46
代码语言:javascript
复制
代码语言:javascript
复制
16 rows selected.

示例4-5使用FORCAPACITY LOW压缩启用表的IM列存储

以下DDL语句启用IM列存储的 oe.product_information 表,并指定压缩方法 FOR CAPACITY LOW

代码语言:javascript
复制
ALTER TABLE oe.product_information 
代码语言:javascript
复制
  INMEMORY 
代码语言:javascript
复制
  MEMCOMPRESS FOR CAPACITY LOW;

前面的DDL语句使用 PRIORITY 子句的默认值,即 NONE。以下查询扫描 oe.product_information 表以填充它(包括样例输出):

代码语言:javascript
复制
SELECT /*+ FULL(p) NO_PARALLEL(p) */ COUNT(*) 
代码语言:javascript
复制
FROM   oe.product_information p;
代码语言:javascript
复制
代码语言:javascript
复制
  COUNT(*)
代码语言:javascript
复制
----------
代码语言:javascript
复制
       288

以下查询计算压缩比(包括样例输出):

代码语言:javascript
复制
COL OWNER FORMAT a5
代码语言:javascript
复制
COL SEGMENT_NAME FORMAT a19
代码语言:javascript
复制
SET PAGESIZE 50000
代码语言:javascript
复制
代码语言:javascript
复制
SELECT v.OWNER, v.SEGMENT_NAME, v.BYTES ORIG_SIZE,
代码语言:javascript
复制
       v.INMEMORY_SIZE IN_MEM_SIZE,
代码语言:javascript
复制
       ROUND(v.BYTES / v.INMEMORY_SIZE, 2) COMP_RATIO
代码语言:javascript
复制
FROM   V$IM_SEGMENTS v
代码语言:javascript
复制
WHERE  SEGMENT_NAME LIKE 'P%'
代码语言:javascript
复制
ORDER BY 4;
代码语言:javascript
复制
代码语言:javascript
复制
OWNER SEGMENT_NAME         ORIG_SIZE IN_MEM_SIZE COMP_RATIO
代码语言:javascript
复制
----- ------------------- ---------- ----------- ----------
代码语言:javascript
复制
OE    PRODUCT_INFORMATION      98304     1310720        .08

示例4-6使用具有HIGH数据填充优先级启用表的IM列存储

以下DDL语句为表 oe.product_information 启用IM列存储,并指定 PRIORITY HIGH 以填充IM列存储中的表数据:

代码语言:javascript
复制
ALTER TABLE 
代码语言:javascript
复制
  oe.product_information 
代码语言:javascript
复制
  INMEMORY 
代码语言:javascript
复制
  PRIORITY HIGH;

示例4-7使用FORCAPACITY HIGH压缩和LOW数据填充优先级为表启用IM列存储

以下查询显示 oe.product_information 表的优先级和压缩设置:

代码语言:javascript
复制
COL OWNER FORMAT a5
代码语言:javascript
复制
COL SEGMENT_NAME FORMAT a19
代码语言:javascript
复制
SET PAGESIZE 50000
代码语言:javascript
复制
代码语言:javascript
复制
SELECT v.OWNER, v.SEGMENT_NAME, v.INMEMORY_PRIORITY,
代码语言:javascript
复制
       v.INMEMORY_COMPRESSION
代码语言:javascript
复制
FROM   V$IM_SEGMENTS v
代码语言:javascript
复制
WHERE  SEGMENT_NAME LIKE 'P%';
代码语言:javascript
复制
代码语言:javascript
复制
OWNER SEGMENT_NAME        INMEMORY INMEMORY_COMPRESS
代码语言:javascript
复制
----- ------------------- -------- -----------------
代码语言:javascript
复制
OE    PRODUCT_INFORMATION HIGH     FOR CAPACITY LOW

以下DDL语句更改 oe.product_information表以使用FOR CAPACITY HIGH 表压缩和PRIORITY LOW

代码语言:javascript
复制
ALTER TABLE oe.product_information 
代码语言:javascript
复制
  INMEMORY 
代码语言:javascript
复制
  MEMCOMPRESS FOR CAPACITY HIGH 
代码语言:javascript
复制
  PRIORITY LOW;

示例4-8为分区表启用IM列存储

以下DDL语句创建名为 range_sales 的分区表,并为IM列存储中的前三个分区指定不同的压缩级别。最后两个分区未填充到IM列存储中。

代码语言:javascript
复制
CREATE TABLE range_sales
代码语言:javascript
复制
    ( prod_id        NUMBER(6)
代码语言:javascript
复制
    , cust_id        NUMBER
代码语言:javascript
复制
    , time_id        DATE
代码语言:javascript
复制
    , channel_id     CHAR(1)
代码语言:javascript
复制
    , promo_id       NUMBER(6)
代码语言:javascript
复制
    , quantity_sold  NUMBER(3)
代码语言:javascript
复制
    , amount_sold    NUMBER(10,2)
代码语言:javascript
复制
    ) 
代码语言:javascript
复制
PARTITION BY RANGE (time_id)
代码语言:javascript
复制
  (PARTITION SALES_Q4_1999 
代码语言:javascript
复制
      VALUES LESS THAN (TO_DATE('01-JAN-2015','DD-MON-YYYY'))
代码语言:javascript
复制
      INMEMORY MEMCOMPRESS FOR DML,
代码语言:javascript
复制
   PARTITION SALES_Q1_2000 
代码语言:javascript
复制
      VALUES LESS THAN (TO_DATE('01-APR-2015','DD-MON-YYYY'))
代码语言:javascript
复制
      INMEMORY MEMCOMPRESS FOR QUERY,
代码语言:javascript
复制
   PARTITION SALES_Q2_2000 
代码语言:javascript
复制
      VALUES LESS THAN (TO_DATE('01-JUL-2015','DD-MON-YYYY'))
代码语言:javascript
复制
      INMEMORY MEMCOMPRESS FOR CAPACITY,
代码语言:javascript
复制
   PARTITION SALES_Q3_2000 
代码语言:javascript
复制
      VALUES LESS THAN (TO_DATE('01-OCT-2015','DD-MON-YYYY'))
代码语言:javascript
复制
      NO INMEMORY,
代码语言:javascript
复制
   PARTITION SALES_Q4_2000 
代码语言:javascript
复制
      VALUES LESS THAN (MAXVALUE));

示例4-9禁用表的IM列存储

要禁用表的IM列存储,请指定 NO INMEMORY 子句。以下示例禁用IM列存储的 oe.product_information 表:

代码语言:javascript
复制
ALTER TABLE oe.product_information NO INMEMORY;

您可以查询V$IM_SEGMENTS视图以列出在IM列存储中填充的数据库对象。

(待续)

IM系列文章列表:

In-Memory手册之:前言(IM-前言)

第一章 Oracle Database In-Memory 相关概念(IM-1.1)

第一章 Oracle Database In-Memory 相关概念(续)(IM-1.2)

第二章 Oracle Database In-Memory 体系结构(上) (IM-2.1)

第二章 In-Memory 体系结构 (IM-2.2)

第二章 IM 体系结构:CPU架构:SIMD向量处理(IM-2.3)

第三章 启用和调整IM列存储的大小(IM-3.1)

第四章 为In-Memory 启用填充对象(IM-4.1 第一部分)

山东Oracle用户组(Shandong Oracle User Group),简称:SDOUG,是一个充满朝气、年轻的非营利性组织,旨在为济南及周边地区技术爱好者提供一个交流平台。SDOUG会不定期组织线下技术分享活动,促进本地区及周边IT技术的发展、帮助技术爱好者提高自己。分享技术、分享快乐,SDOUG在路上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山东Oracle用户组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📷
  • IM系列文章:第四章 为In-Memory 填充启用对象(IM-4.1第一部分)
  • 启用和禁用IM列存储
    • 为新表启用IM列存储
      • 为现有表启用和禁用IM列存储
        • 为表启用和禁用IM列存储:示例
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档