اوراکل 23ai- قابلیت Automatic SQL Transpiler

همانطور که می دانید استفاده از تابع در یک دستور sqlای، context switch بین SQL engine و PL/SQL engine را در پی خواهد داشت و رخ دادن متعدد context switch می تواند اثرات منفی بر روی performance دیتابیس داشته باشد.

اوراکل در نسخه 21c برای افزایش سرعت اجرای این دسته از پرس و جوها، SQL Macros را معرفی کرده است که با استفاده از این قابلیت، متن پرس و جوی حاوی function به فرم ساده و بدون استفاده از function بازنویسی می شود.

در نسخه 23c هم اوراکل قابلیت Automatic SQL Transpiler را در این زمینه معرفی کرده است که در صورت تنظیم پارامتر sql_transpiler به مقدار ON، به صورت خودکار و بدون مداخله کاربر، تابع استفاده شده در متن دستور SQL «در صورت امکان» به SQL expression تبدیل خواهد شد تا از سربار ناشی از اجرای function در SQL کاسته شود.

تابع زیر را در نظر بگیرید:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
create or replace function sal_func(sal_param number)
return number
is
begin
return sal_param +60 ;
end;
/
Function created.
create or replace function sal_func(sal_param number) return number is begin return sal_param +60 ; end; / Function created.
create or replace function sal_func(sal_param  number)
  return number
is
begin
  return sal_param +60 ;
end;
/
Function created.

در صورت استفاده از این تابع به صورت زیر، در حالت پیش فرض تبدیلی اتفاق نمی افتد:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select sal from person where sal_func(sal)=570;
SQL> select sal from person where sal_func(sal)=570;
SQL> select sal from person where sal_func(sal)=570;

 

اما اگر از قابلیت Automatic SQL Transpiler استفاده کنیم، execution plan فوق تغییر خواهد کرد و تابع sal_func به عبارت SAL+60 تبدیل خواهد شد:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> alter session set sql_transpiler = 'ON';
Session altered.
SQL> alter session set sql_transpiler = 'ON'; Session altered.
SQL>  alter session set sql_transpiler = 'ON';
Session altered.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select sal from person where sal_func(sal)=570;
SQL> select sal from person where sal_func(sal)=570;
SQL> select sal from person where sal_func(sal)=570;

با تریس پرس و جوی فوق هم این مسئله قابل اثبات است:

*این قابلیت برای توابعی که در package تعریف شده اند کاربرد ندارد.

 

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

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

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