برآورد میزان بالقوه تأثیر فشرده‌سازی جدول در پایگاه داده اوراکل

برآورد میزان بالقوه تأثیر فشرده‌سازی جدول در پایگاه داده اوراکل

DBMS_COMPRESSION: برآورد میزان بالقوه تأثیر فشرده‌سازی جدول در پایگاه داده اوراکل
بسته DBMS_COMPRESSION حاوی روال‌هایی به منظور کمک به بهبود فرآیند فشرده‌سازی جداول است.

راه‌اندازی
در مثال‌های این مطلب از جدول تعریف شده زیر استفاده می‌شود.

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 (

id NUMBER,

code VARCHAR2(20),

description VARCHAR2(50),

created_date DATE,

CONSTRAINT tab1_pk PRIMARY KEY (id)

)

PARTITION BY RANGE (created_Date)

(PARTITION tab1_part_2015 VALUES LESS THAN (TO_DATE(’01/01/2016′, ‘DD/MM/YYYY’)) TABLESPACE users,

PARTITION tab1_part_2016 VALUES LESS THAN (TO_DATE(’01/01/2017′, ‘DD/MM/YYYY’)) TABLESPACE users);

CREATE INDEX tab1_code_idx ON tab1(code) LOCAL;

INSERT INTO tab1

SELECT level,

CASE

WHEN MOD(level,2)=0 THEN ‘CODE1’

ELSE ‘CODE2’

END,

CASE

WHEN MOD(level,2)=0 THEN ‘Description for CODE1’

ELSE ‘Description for CODE2’

END,

CASE

WHEN MOD(level,2)=0 THEN SYSDATE

ELSE ADD_MONTHS(SYSDATE, 12)

END

FROM dual

CONNECT BY level <= 100000;

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER, ‘TAB1’);

GET_COMPRESSION_RATIO
عملگر GET_COMPRESSION_RATIO انجام فرآیند برآورد میزان تأثیر سطوح مختلف فشرده‌سازی بر روی یک جدول خاص یا پارتیشن را بر عهده دارد. می‌توانید با مراجعه به مستندات اوراکل از مقادیر ثابت و اندازه نمونه هر سطر در هر یک از انواع فشرده‌سازی‌های قابل پیاده‌سازی مطلع گردید.
در مثال زیر میزان تأثیر فشرده‌سازی OLTP در یک جدول خاص نمایش داده شده است. از تمامی سطور جدول به عنوان اندازه الگو استفاده شده است.

SET SERVEROUTPUT ON

DECLARE

l_blkcnt_cmp PLS_INTEGER;

l_blkcnt_uncmp PLS_INTEGER;

l_row_cmp PLS_INTEGER;

l_row_uncmp PLS_INTEGER;

l_cmp_ratio NUMBER;

l_comptype_str VARCHAR2(32767);

BEGIN

DBMS_COMPRESSION.get_compression_ratio (

scratchtbsname => ‘USERS’,

ownname => ‘TEST’,

tabname => ‘TAB1’,

partname => NULL,

comptype => DBMS_COMPRESSION.comp_for_oltp,

blkcnt_cmp => l_blkcnt_cmp,

blkcnt_uncmp => l_blkcnt_uncmp,

row_cmp => l_row_cmp,

row_uncmp => l_row_uncmp,

cmp_ratio => l_cmp_ratio,

comptype_str => l_comptype_str,

subset_numrows => DBMS_COMPRESSION.comp_ratio_allrows

);

DBMS_OUTPUT.put_line(‘Number of blocks used (compressed) : ‘ || l_blkcnt_cmp);

DBMS_OUTPUT.put_line(‘Number of blocks used (uncompressed) : ‘ || l_blkcnt_uncmp);

DBMS_OUTPUT.put_line(‘Number of rows in a block (compressed) : ‘ || l_row_cmp);

DBMS_OUTPUT.put_line(‘Number of rows in a block (uncompressed) : ‘ || l_row_uncmp);

DBMS_OUTPUT.put_line(‘Compression ratio : ‘ || l_cmp_ratio);

DBMS_OUTPUT.put_line(‘Compression type : ‘ || l_comptype_str);

END;

/

Number of blocks used (compressed) : 165

Number of blocks used (uncompressed) : 629

Number of rows in a block (compressed) : 599

Number of rows in a block (uncompressed) : 157

Compression ratio : 3.8

Compression type : “Compress For OLTP”

PL/SQL procedure successfully completed.

SQL>

GET_COMPRESSION_TYPE
عملگر GET_COMPRESSION_TYPE سطح فشرده‌سازی برای سطر خاصی در یک جدول را نمایش می‌دهد.

SELECT rowid,

CASE DBMS_COMPRESSION.get_compression_type (‘TEST’, ‘TAB1’, rowid)

WHEN 1 THEN ‘COMP_NOCOMPRESS’

WHEN 2 THEN ‘COMP_FOR_QUERY_HIGH’

WHEN 4 THEN ‘COMP_FOR_QUERY_LOW’

WHEN 8 THEN ‘COMP_FOR_ARCHIVE_HIGH’

WHEN 16 THEN ‘COMP_FOR_ARCHIVE_LOW’

WHEN 32 THEN ‘COMP_BLOCK’

END AS compression_type

FROM tab1

WHERE rownum <= 5;

ROWID COMPRESSION_TYPE

—————— ———————

AABIaOAAEAAAAmvAAA COMP_NOCOMPRESS

AABIaNAAEAAAA2vAAA COMP_NOCOMPRESS

AABIaOAAEAAAAmvAAB COMP_NOCOMPRESS

AABIaNAAEAAAA2vAAB COMP_NOCOMPRESS

AABIaOAAEAAAAmvAAC COMP_NOCOMPRESS

SQL>

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