تسریع انجام عملیات join در هنگام استفاده از dblink

در زمان انجام عملیات join بین دو جدول که یکی در بانک local و دیگری در بانک remote موجود است ، به طور پیش فرض اطلاعات جدول حاضر در بانک remote به بانک local فرستاده خواهد شد و سپس عملیات join انجام می شود.
حال اگر جدول حاضر در بانک remote، حجم بسیار بیشتری از جدول local داشته باشد، انجام عملیات join بسیار کند انجام خواهد شد.
برای این مورد مشخص، در صورتی که عملیات به صورت کامل در بانک remote انجام شوند و در نهایت نتیجه به بانک مبدا برگردد، سرعت انجام عملیات بهتر خواهد شد برای انجام این کار، می توان از هینتی به نام DRIVING_SITE استفاده کرد.

مثال: تعداد رکوردهای دو جدول حاضر در بانک local و remote را مشاهده می کنید:

SQL> select count(*) from LOCAL_TBL L;
COUNT(*)
————
9999

SQL> select count(*) from REMOTE_TBL@DB_LINK dblink_tbl;
COUNT(*)
————
24635336

حال مدت زمان انجام join بین این دو جدول را در هر دو حالت اجرا در سرور مبدا و مقصد بررسی می کنیم.

اجرای عملیات join در بانک local(حالت پیش فرض):

SQL> alter system flush buffer_cache;
System altered.

SQL> set timing on
SQL> select count(*) from REMOTE_TBL@DB_LINK R,LOCAL_TBL L where R.id=L.id ;
COUNT(*)
————
9999

Elapsed: 00:00:10.65

اجرای عملیات join در بانک remote(با کمک هینت DRIVING_SITE):

SQL> alter system flush buffer_cache;
System altered.

SQL> set timing on
SQL> select /*+ DRIVING_SITE(R)*/ count(*) from REMOTE_TBL@DB_LINK R,LOCAL_TBL L where R.id=L.id;
COUNT(*)
————
9999

Elapsed: 00:00:02.20

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

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

نشانی ایمیل شما منتشر نخواهد شد.