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
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.