artarad_oracle_hint

Append Hint چگونه بر کیفیت اجرا و عملکرد پایگاه داده اوراکل تاثیر می‌گذارد؟

Append Hint چگونه بر کیفیت اجرا و عملکرد پایگاه داده اوراکل تاثیر می‌گذارد؟

Append Hint به بهینه سازی می‌گویند که یک درج مستقیم را انجام دهد و به چند دلیل باعث بهبود عملکرد عملیات (INSERT .. SELECT) می‌شود:
• داده‌ها (Data) به انتهای جدول پیوست می‌شوند، به جای آنکه سعی کنند از فضای آزاد موجود در جدول استفاده کنند.
• داده‌ها به صورت مستقیم توسط buffer cache داخل پوشه های داده‌ها نوشته می شوند.
• محدودیت در یکپارچگی ارجاعی در نظر گرفته نشده است.
• هیچ trigger اجرا نشده است.


ترکیب این ویژگی ها باعث می شود که درج مستقیم به طور قابل توجهی از درج معمولی سریع تر باشد. این دو نکته می توانستند منطقاً دیتا را خراب کنند بنابراین اراکل Append Hint را نادیده می گیرد و دیتا توسط مسیر معمولی بارگذاری می شود اگر بحث محدودیت یکپارچگی ارجاعی و راه اندازی، بر روی میز باشند.

چگونه Append Hint بر روی اندازه جدول تاثیر می گذارد؟ (High Watermark)
همانطور که درج های مسیر مستقیم دیتا را به انتهای جدول اضافه می کنند، آن ها به طور مداوم high watermark جدول را افزایش می دهند حتی اگر فضای خالی زیادی در جدول وجود داشته باشد. در جداولی که معمولاً ردیف ها به طور منظم حذف شده اند، استفاده از Append Hint می تواند در جداول بزرگ حاوی تعداد زیادی بلوک های کم جمعیت، نتیجه بدهد. لازم است تا این موضوع توسط یکی از انواع عملیات های کوچک کردن (shrink operation) زیر، اداره شود.
• export کردن دیتا، کوتاه کردن جدول و import کردن دیتا
• از عملیات (CTAS) “Create Table … As Select” استفاده کنید تا یک جدول جدید به همراه دیتا فشرده بسازید، جدول اصلی را drop کنید و نام جدول جدید را تغییر دهید تا آن را با جدول اصلی جایگزین کنید.
• از عملیات تعریف دستورات جدول آنلاین برای بازسازی استفاده کنید.
• از یک بخش عملیات online segment shrink برای فشرده سازی دیتا استفاده کنید.

چگونه Append Hint بر روی Redo Generation تاثیر می‌گذارد؟
اگر پایگاه داده اوراکل روی حالت No Archive Log اجرا می شود، فقط از Append Hint استفاده کردن باعث کاهش Redo Generation می شود. در واقع، شما به ندرت پایگاه‌داده های OLTP را در حالت No Archive Log اجرا می کنید پس چه اتفاقی در حالت No Archive Log می افتد؟ در حالت No Archive Log استفاده از Append Hint باعث کاهش Redo Generation نمی شود مگر اینکه جدول بر روی No Logging تنظیم شده باشد. مثال های زیر این فرآیند را به صورت گام به گام و عملی نشان می دهند.
مثال زیر در برابر یک پایگاه‌داده در حالت No Archive Log اجرا شده است. Redo Generation، (پر رنگ) نشان داده شده است.

SQL> CREATE TABLE t1 AS SELECT * FROM all_objects WHERE 1=2;

Table created.

SQL> SET AUTOTRACE ON STATISTICS

SQL> INSERT INTO t1 SELECT * FROM all_objects;

۷۲۵۱۲ rows created.

Statistics

———————————————————-

۶۳۴ recursive calls

۹۹۴۶ db block gets

۵۰۱۱۶ consistent gets

۲ physical reads

۸۴۶۴۵۲۰ redo size

۸۳۰ bytes sent via SQL*Net to client

۷۹۶ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۱۵۰۸ sorts (memory)

۰ sorts (disk)

۷۲۵۱۲ rows processed

SQL> TRUNCATE TABLE t1;

Table truncated.

SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects;

۷۲۵۱۲ rows created.

Statistics

———————————————————-

۳۶۹ recursive calls

۱۶۸۹ db block gets

۴۸۱۹۴ consistent gets

۲ physical reads

۴۶۰۴۸ redo size

۸۲۲ bytes sent via SQL*Net to client

۸۱۰ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۱۵۰۰ sorts (memory)

۰ sorts (disk)

۷۲۵۱۲ rows processed

SQL> COMMIT;

Commit complete.

SQL>

همانطور که نشان داده شده است، با پایگاه‌داده در حال اجرا در حالت No Archive Log، اضافه شدن Append Hint، مقدار Redo Generation را کاهش داده است.
مثال بعدی تست مشابهی را اجرا می کند اما این بار با پایگاه‌دادهی که در حالت Archive Log اجرا می شود.

SQL> CREATE TABLE t1 AS SELECT * FROM all_objects WHERE 1=2;

Table created.

SQL> SET AUTOTRACE ON STATISTICS

SQL> INSERT INTO t1 SELECT * FROM all_objects;

۸۸۷۷۳ rows created.

Statistics

———————————————————-

۶۱۳ recursive calls

۱۱۷۹۲ db block gets

۱۱۶۸۰۸ consistent gets

۲ physical reads

۱۰۲۲۲۳۵۲ redo size

۳۷۰ bytes sent via SQL*Net to client

۵۵۲ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۳۱۴۲ sorts (memory)

۰ sorts (disk)

۸۸۷۷۳ rows processed

SQL> TRUNCATE TABLE t1;

Table truncated.

SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects;

۸۸۷۷۳ rows created.

Statistics

———————————————————-

۳۰۷ recursive calls

۱۵۷۳ db block gets

۱۱۴۴۸۶ consistent gets

۰ physical reads

۱۰۲۲۲۸۶۴ redo size

۳۶۶ bytes sent via SQL*Net to client

۵۶۶ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۳۱۳۸ sorts (memory)

۰ sorts (disk)

۸۸۷۷۳ rows processed

SQL> COMMIT;

Commit complete.

SQL>

توجه کنید که چطور اضافه کردن Append Hint دیگر تاثیری بر اندازه Redo Generation ندارد.
برای اجازه دادن به Append Hint برای تاثیرگذاری بر روی Redo Generation ما باید جدول را روی حالت No Loggingتنظیم کنیم.

SQL> ALTER TABLE t1 NOLOGGING;

Table altered.

SQL> TRUNCATE TABLE t1;

Table truncated.

SQL> SET AUTOTRACE ON STATISTICS

SQL> INSERT INTO t1 SELECT * FROM all_objects;

۸۸۷۷۳ rows created.

Statistics

———————————————————-

۵۰۶ recursive calls

۱۱۷۹۰ db block gets

۱۱۶۶۵۲ consistent gets

۰ physical reads

۱۰۲۲۲۳۲۸ redo size

۳۷۳ bytes sent via SQL*Net to client

۵۵۲ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۳۱۳۹ sorts (memory)

۰ sorts (disk)

۸۸۷۷۳ rows processed

SQL> TRUNCATE TABLE t1;

Table truncated.

SQL> INSERT /*+ APPEND */ INTO t1 SELECT * FROM all_objects;

۸۸۷۷۳ rows created.

Statistics

———————————————————-

۳۰۷ recursive calls

۱۵۷۳ db block gets

۱۱۴۴۸۶ consistent gets

۰ physical reads

۲۵۹۶۸ redo size

۳۶۶ bytes sent via SQL*Net to client

۵۶۶ bytes received via SQL*Net from client

۳ SQL*Net roundtrips to/from client

۳۱۳۸ sorts (memory)

۰ sorts (disk)

۸۸۷۷۳ rows processed

SQL> COMMIT;

Commit complete.

SQL> DROP TABLE t1 PURGE;

Table dropped.

SQL>

ما می توانیم مشاهده کنیم که با تغییر دادن جدول به No Logging، باعث بازگشت وضع می شویم.
بنابراین جزء در مورد پایگاه‌داده در حالت No Archive Log و Append hint تنها Redo Generation را کاهش می دهد، اگر جدول (فضا) بر No Logging تنظیم شده باشد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

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

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