اوراکل 23c – تخمین صرفه جویی در فضا با DEDUPLICATION

ساخت وبلاگ

DEDUPLICATION یکی از قابلیتهای جدید اوراکل در نسخه 11g است که همراه با SECUREFILE LOBها ارائه شد و می توان بعد از ایجاد جدول هم این قابلیت را برای SECUREFILE LOBها فعال کرد اما سوال مهمی که در این زمینه مطرح می شود آن است که DEDUPLICATION برای LOBهای موجود چقدر فضا آزاد می کند؟

در اوراکل نسخه 23c، تابعی در این زمینه ارائه شد که می تواند تا حدودی به این سوال پاسخ دهد. این تابع نام جدول(و یا نام پارتیشنی از جدول) را دریافت می کند و حداکثر 100 هزار رکورد از آن جدول را بررسی کرده و نهایتا تخمینی از میزان ذخیره سازی فضا را ارائه می کند.

در ادامه، سناریوی تستی را در این زمینه می بینید.

SQL> create table tbl (id number,describe clob);
Table created

در این جدول اطلاعاتی را درج می کنیم که بیشتر آن تکراری هستند:

SQL> begin 2 for i in 1 .. 70000 loop 3 insert into tbl 4 values 5 (1, 6 lpad('www.usefzadeh.com', 7 1000000000000000000000000000000000000000000000000000000000000000000000000000000000, 8 'a')); 9 end loop; 10 insert into tbl values (2, 'Ramtollah Rabbani'); 11 insert into tbl values (3, 'Armin Bahamin'); 12 insert into tbl values (4, 'Jamshid Khan'); 13 commit; 14 end; 15 /
PL/SQL procedure successfully completed

تعداد رکوردهای جدول:

SQL> select count(*) from tbl; COUNT(*)
---------- 70003

برای محاسبه تخمین میزان فضای صرفه جویی شده پس از DEDUPLICATION، تابع dbms_lob.GET_LOB_DEDUPLICATION_RATIO را اجرا می کنیم:

SQL> set serverout on
SQL> DECLARE dedup_ratio number;
BEGIN dedup_ratio := dbms_lob.GET_LOB_DEDUPLICATION_RATIO( tablespacename => 'TBS_ETTELAAT', tabowner => 'USEF', tabname => 'TBL', lobcolumnname => 'DESCRIBE', partname => '', dedup_ratio => dedup_ratio, subset_numrows => 70003); dbms_output.put_line('Deduplication ratio: ' || dedup_ratio);
END;
/
Deduplication ratio: 69272.6476991588322612568035625927758535
PL/SQL procedure successfully completed

DEDUPLICATE Ratio برابر با 69272 تخمین زده شده است. مجموع رکوردهای جدول برابر با 70003 است. حجم LOB هم برابر با 608 مگابایت است:

SQL> select round(bytes/1024/1024) SIZE_MB,segment_name from user_segments where segment_name='SYS_LOB0000078029C00002

در نهایت DEDUPLICATE را برای این LOB فعال می کنیم تا ببینیم چقدر فضا صرفه جویی شده است:

SQL> ALTER TABLE TBL MOVE LOB(DESCRIBE) STORE AS SECUREFILE(DEDUPLICATE);
Table altered
SQL> select round(bytes/1024/1024) SIZE_MB,segment_name from user_segments where segment_name='SYS_LOB0000078029C00002

فضا از 608 مگابایت به 1 مگابایت کاهش پیدا کرده است.

; SIZE_MB SEGMENT_NAME
---------- ---------------------------- 608 SYS_LOB0000078029C00002$

در نهایت DEDUPLICATE را برای این LOB فعال می کنیم تا ببینیم چقدر فضا صرفه جویی شده است:

فضا از 608 مگابایت به 1 مگابایت کاهش پیدا کرده است.

; SIZE_MB SEGMENT_NAME ---------- ---------------------------- 1 SYS_LOB0000078029C00002$

فضا از 608 مگابایت به 1 مگابایت کاهش پیدا کرده است.

; SIZE_MB SEGMENT_NAME ———- —————————- 608 SYS_LOB0000078029C00002$

در نهایت DEDUPLICATE را برای این LOB فعال می کنیم تا ببینیم چقدر فضا صرفه جویی شده است:

فضا از 608 مگابایت به 1 مگابایت کاهش پیدا کرده است.

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:[email protected]

تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 26 تاريخ : يکشنبه 17 دی 1402 ساعت: 16:28

خبرنامه