artarad-Database-12c

In-Memory Column Store در نسخه ۱۲ اوراکل

یکی از ویژگی‌های مفید گنجانده شده در بسته اصلاحی  ۱۲٫۱٫۰٫۲ در نسخه ۱۲ اوراکل قابلیت ذخیره سازی درون حافظه‌ای اطلاعات به صورت ستونی (IM Column Store) است. این ویژگی به عنوان جایگزین روش ذخیره سازی متداول سطری، به شما امکان ذخیره ستون‌های جداول، پارتیشن‌ها و materialized views را در قالب ستونی می‌دهد. مزیت قرار دادن داده‌ها در حافظه بسیار بدیهی است، ولی قابلیت IM Column Store داده‌ها را به صورت فزایند‌ه‌ای جهت بکارگیری در درخواست‌های آماری مورد نیاز ابزارهای مرتبط با هوش تجاری مناسب‌سازی می‌نماید.

* توجه شود که مجوز استفاده از IM Column Store به صورت کاملاً جداگانه از نرم‌افزارOracle Enterprise Edition می‌باشد.


معرفی
IM Column Store را می‌توان به عنوان بخش جدیدی در SGA که از پارامتر راه‌انداز اولیه INMEMORY_SIZE برای مقداردهی این بخش استفاده می‌شود در نسخه ۱۲ اوراکل معرفی نمود.
امکان انتخاب به منظور ذخیره یک گروه خاص از بین ستون‌ها، تمامی جداول یا پارتیشن‌های جداول برای DBA مهیا است. همچنین امکان فعال‌سازی این قابلیت در سطح tablespace نیز فراهم است، بنابراین به صورت خودکار تمامی جداول و view ها در tablespace برای IM Column Store فعال می‌گردد، لذا در دستورات زیر به منظور دربرگیری عبارات داخل حافظه‌ای تغییراتی اعمال شده است.

CREATE TABLE

ALTER TABLE

CREATE TABLESPACE

ALTER TABLESPACE

CREATE MATERIALIZED VIEW

ALTER MATERIALIZED VIEW

مثال‌های ساده‌ای از کاربرد آنها در زیر آورده شده است.
در مستندات صراحتاً اشاره شده است که این قابلیت به منظور اجرای اعمال زیر مفید می‌باشد.
• پیمایشات جامع دربردارنده‌ی فیلترهای “=”، “<“، “>” و “IN”
• درخواست‌هایی که تعداد کمی از ستون‌های یک جدول حاوی تعداد زیادی ستون را برمی‌گرداند.
• درخواست‌های الحاق جداول کوچک به جداول بزرگ
• درخواست تجمیع داده‌ها
همچنین برای حالات زیر مناسب نمی‌باشد:
• درخواست‌های دارای گزاره‌های پیچیده
• درخواست‌هایی که تعداد زیادی ستون را باز می‌گرداند
• درخواست‌هایی که سطرهای زیادی را باز می‌گرداند
• درخواست‌های حاوی چندین الحاق از جداول بزرگ
در اینجا این نکته لازم به ذکر است که تصمیم‌گیری و انتخاب object هایی که بیشترین سود را از این قابلیت کسب می‌نمایند بر عهده DBA می‌باشد. با یک انتخاب منطقی شاهد بهبود فزاینده‌ای در کارایی پایگاه‌داده خواهید بود ولی انتخاب و افزودن object های نامناسب می‌تواند فضای زیادی از حافظه که می‌تواند توسط buffer cache مورد بهره‌برداری قرار گیرد را به هدر می‌دهد.
فهرست کامل پارامترهای راه‌اندازی اولیه و روشهای فشرده‌سازی در مستندات اوراکل به تفصیل آورده شده و در اینجا به آنها نخواهیم پرداخت.

فعال‌سازی قابلیت IM Column Store
به یاد داشته باشید که IM Column Store بخشی از SGA است، پس SGA باید ظرفیت حجمی از حافظه که پارامتر INMEMORY_SIZE اختصاص می‌یابد را دارا باشد. در یک محیط multitenant در صورت دسترسی PDB ها به IM Column Store پارامتر INMEMORY_SIZE باید در CDB درج شود.
• در صورت استفاده از AMM (MEMORY_TARGET) مقدار پارامتر INMEMORY_SIZE نیاز به بسط در account دارد.
• در صورت استفاده از ASMM (SGA_TARGET) مقدار پارامتر INMEMORY_SIZE نیاز به بسط در account دارد.
در نسخه ۱۲٫۱٫۰ و بالاتر پارامتر COMPATIBLE افراض گردیده و به میزان کافی برای نگهداری IM Column Store فضا در SGA پیش‌بینی شده است و عملیات زیر IM Column Store را فعال می‌نماید، دقت شود که مقدار پارامتر INMEMORY_SIZE برابر ۲GB مقداردهی شده است.

ALTER SYSTEM SET SGA_TARGET=3G SCOPE=SPFILE;

ALTER SYSTEM SET INMEMORY_SIZE=2G SCOPE=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 در حین startup ایجاد گردیده است.
مقادیر کنونی IM Column Store را در زیر مشاهده می‌نمایید که به استثناء size بقیه از موارد پیش‌فرض هستند.

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>

مقدار پارامتر INMEMORY_SIZE تابعی از PDB ها است مگر آنکه مستقیماً در سطح PDB تعریف شود. دگرگونی مقدار پارامتر INMEMORY_SIZE در سطح PDB نیازی به راه‌اندازی مجدد instance یا 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;

غیرفعال نمودن IM Column Store
بر اساس انتظار شما از غیر فعال‌سازی IM Column Store مسیرهای متفاوتی برای این امر وجود دارد.
تنظیم پارامتر INMEMORY_FORCE برابر OFF به منظور عدم نگهداری object ها در IM Column Store. برای بازگشت به شرایط پیش‌فرض مقدار آن به “DEFAULT” تغییر می‌یابد.

— System level

ALTER SYSTEM SET INMEMORY_FORCE=OFF;

ALTER SYSTEM SET INMEMORY_FORCE=DEFAULT;

تنظیم پارامتر INMEMORY_QUERY برابر DISABLE به منظور عدم در نظر گرفتن IM Column Store در فرآیند بهینه‌سازی درخواست‌ها توسط optimizer. برای بازگشت به شرایط پیش‌فرض مقدار آن به “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;

به منظور غیر فعال‌سازی کامل IM Column Store و آزادسازی حافظه مجدداً پارامتر INMEMORY_SIZE راه‌اندازی می‌گردد.

ALTER SYSTEM RESET INMEMORY_SIZE SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

همانطور که در بخش‌های قبلی اشاره شد تنظیمات اختصاصی PDB بدون نیاز به راه‌اندازی مجدد instance و PDB قابلیت اعمال دارند.

مدیریت جداول
دستورات CREATE TABLE و ALTER TABLE به منظور تسهیل در امر تشخیص جداولی که باید در IM Column Store نگهداری شوند بهسازی شده‌اند. ایجاد جداول به همراه عبارت NO INMEMORY برابر آن است که اصلاً از این عبارت استفاده نشود. در مثال زیر دستور ساخت جدول با سه نگارش متفاوت استفاده شده است.
[DBA|ALL|USER]_TABLES view برای نمایش اطلاعات مرتبط با IM Column Store بهسازی شده است.

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_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL

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

DEFAULT_TAB DISABLED

IM_TAB ENABLED NONE AUTO FOR QUERY LOW NO DUPLICATE

NOIM_TAB DISABLED

۳ rows selected.

SQL>

دستور ALTER TABLE می‌تواند وضعیت IM Column Store یک object را تغییر دهد. در مثال زیر مشاهده می‌نمایید.

ALTER TABLE IM_TAB NO INMEMORY;

ALTER TABLE NOIM_TAB INMEMORY MEMCOMPRESS FOR CAPACITY LOW;

ALTER TABLE DEFAULT_TAB INMEMORY PRIORITY HIGH;

SELECT table_name,

inmemory,

inmemory_priority,

inmemory_distribute,

inmemory_compression,

inmemory_duplicate 

FROM user_tables

ORDER BY table_name;

TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_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

۳ rows selected.

SQL>

مدیریت ستون‌ها
نحوه انضمام زیرمجموعه‌ای از ستون‌ها در نسخه ۱۲ اوراکل را می‌توان در مثال زیر مشاهده نمود.

CREATE TABLE im_col_tab (

id NUMBER,

col1 NUMBER,

col2 NUMBER,

col3 NUMBER,

col4 NUMBER

) INMEMORY

INMEMORY MEMCOMPRESS FOR QUERY HIGH (col1, col2)

INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (col3)

NO INMEMORY (id, col4);

نمایش تنظیمات ستون با استفاده از V$IM_COLUMN_LEVEL view

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

۵ rows selected.

SQL>

تغییر تنظیمات IM Column Store با بهره‌گیری از دستور 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

۵ rows selected.

SQL>

مدیریت Materialized Views
همانند دو دستور CREATE TABLE و ALTER TABLE که کارکرد مشابهی دارند، CREATE MATERIALIZED VIEW و ALTER MATERIALIZED VIEW نیز کارایی مشابه یکدیگر دارند.

CONN test/test@pdb1

CREATE TABLE t1 AS

SELECT * FROM all_objects;

CREATE MATERIALIZED VIEW t1_mv INMEMORY 

AS SELECT * 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_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL

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

T1_MV ENABLED NONE AUTO FOR QUERY LOW NO DUPLICATE

۱ 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_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL

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

T1_MV ENABLED HIGH AUTO FOR CAPACITY HIGH NO DUPLICATE

۱ 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_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL

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

T1_MV DISABLED

۱ row selected.

SQL>

مدیریت tablespaces
تنظیم پارامترهای پیش‌فرض برای یک tablespace به معنای استفاده تمامی جداول materialized views آن tablespace از آن مقادیر می‌باشد البته به استثناء پارامترهایی که صریحاً بازنویسی شده‌اند.
مثال زیر نحوه تنظیم پارامترهای IM Column Store را در حین ساخت tablespace نشان داده است.
واژه DEFAULT به عنوان بخشی از عبارت IM Column Store آورده شده است. به وسیله DBA_TABLESPACES view تنظیمات پیش‌فرض IM Column Store نمایش شده شده است.

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_INME DEF_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

۵ rows selected.

SQL>

دستور ALTER TABLESPACE به منظور تغییر پارامترهای IM Column Store استفاده می‌گردد.

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_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_

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

NEW_TS ENABLED NONE AUTO FOR CAPACITY HIGH NO 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_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP DEF_INMEMORY_

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

NEW_TS DISABLED

SYSAUX DISABLED

SYSTEM DISABLED

TEMP DISABLED

USERS DISABLED

۵ rows selected.

SQL>

تنظیمات پیش‌فرض می‌تواند به‌وسیله تنظیمات خاص object که در بالا آورده شده بازنویسی شود.

Views
تعدادی از view های حاوی اطلاعات IM Column Store قبلاً مشاهده شد، در ادامه نیز v$ view هایی که از IM Column Store پشتیبانی می‌نمایند اضافه شده است.

• V$IM_COLUMN_LEVEL

• V$IM_SEGMENTS

• V$IM_USER_SEGMENTS

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *