اوراکل 21c- قابلیت In-Memory Hybrid Scan

زمانی که INMEMORY را در سطح column فعال می کنیم، صرفا پرس و جوهایی که به ستونهای INMEMORY جدول رجوع می کنند، از In-Memory scan بهره خواهند برد و اگر در یک پرس و جو به هیچ یک از ستونهای In-Memory رجوع نشود، اوراکل بصورت ROW-STORE access به این پرس و جو پاسخ خواهد داد.

حالت دیگری هم در اینجا قابل تصور است! اگر پرس و جویی به صورت ترکیبی،به ستونهای INMEMORY و NO INMEMORY رجوع کند، اوراکل چه نوع scanای را انتخاب خواهد کرد؟

تا قبل از نسخه 21c، اوراکل برای این دسته از پرس و جوها، به In-Memory رجوع نمی کرد و با رجوع به buffer cache و بصورت row-store access به این پرس و جوها پاسخ می داد.

اما در اوراکل 21c، قابلیت جدیدی به نام In-Memory Hybrid Scan ارائه شد که بر اساس آن، اگر برای همه ستونهایی که در قسمت where clause دستور استفاده شدند، خصیصه INMEMORY فعال شده باشد(و علاوه بر آن، ستون NO INMEMORY در select list موجود باشد) اوراکل میتواند به صورت ترکیبی از هر دو scan( یعنی row store scan و in-memory scan) استفاده کند. به این شیوه از scan، اصطلاحا In-Memory Hybrid Scan گفته می شود.

مثال: شرایط زیر را در نظر بگیرید:

–Oracle  19c and 21c:

SQL> create table jadval_test(col1 number(9),col2 number(9),col3 number(9),col4 number(9));

Table created

SQL> insert into jadval_test select 1+level,1000+level,500+level,4000+level from dual connect by level<10000000;

9999999 rows inserted

SQL> commit;

Commit complete

SQL> ALTER TABLE jadval_test INMEMORY (col1,col2);

Table altered

SQL> ALTER TABLE jadval_test INMEMORY no inmemory (col3,col4);

Table altered

SQL> SELECT  column_name, inmemory_compression FROM v$im_column_level im, user_objects o

  2      WHERE im.obj_num = o.object_id

  3      AND o.object_name=’JADVAL_TEST’;

COLUMN_NAME    INMEMORY_COMPRESSION

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

COL1           DEFAULT

COL2           DEFAULT

COL3           NO INMEMORY

COL4           NO INMEMORY

با استفاده از این محیط و با ارائه چهار مثال بیشتر با قابلیت In-Memory Hybrid Scan آشنا خواهیم شد.

مثال 1: اجرای پرس و جوی زیر در هر کدام از نسخه های اوراکل، منجر به row store scan خواهد شد چراکه برای ستونهای COL3 و COL4 خصیصه INMEMORY تنظیم نشده است

SQL> set autotrace traceonly explain

SQL> select col3 from usef.jadval_test where col4 =7890;

–19c

–21c

مثال 2: در پرس و جوی زیر هم با توجه به آنکه از ستون COL4 در where clause استفاده شده، حتی در نسخه 21c هم از In-Memory scan استفاده نمی شود:

SQL> select col2 from usef.jadval_test where col4 =7890 and col1=3891

–19c

–21c

مثال 3: اوراکل 21c برای اجرای پرس و جوی زیر از In-Memory Hybrid Scan استفاده خواهد کرد چرا که در قسمت where clause این پرس و جو صرفا به ستونهای INMEMORY رجوع شده و علاوه بر آن، ستونی با خصیصه NO INMEMORY در select list وجود دارد:

SQL> select * from usef.jadval_test where col1=3891 and col2=4890;

–19c

–21c

مثال 4: در شرایط زیر هم اوراکل صرفا از In-Memory Scan استفاده خواهد کرد:

SQL> select col1 from usef.jadval_test where col1=3891 and col2=4890;

–19c

–21c

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

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