artarad-Database-12c

جمع‌آوری آمار و اطلاعات لحظه‌ای توسط پایگاه داده اوراکل ۱۲cr1 در بارگذاری‌های حجیم داده‌ها

از توانایی‌های برجسته پایگاه داده اوراکل ۱۲cr1 قابلیت جمع‌آوری اطلاعات و آمار در لحظه‌ی انجام برخی عملیات‌های حجیم بر روی جداول می‌باشد و به تبع این امر نیاز به جمع‌آوری آمار و اطلاعات به صورت جداگانه به مراتب کمرنگ می‌گردد. بدین معنا دیگر نیاز به جدول اضافه‌ای به منظور گردآوری آمار نمی‌باشد و احتمال عدم جمع‌آوری اطلاعات مورد نیاز پس از انجام عملیات‌های حجیم داده‌ای بر روی بانک اطلاعاتی را در صورت فراموشی به طور عمده کاهش می‌دهد.

CREATE TABLE … AS SELECT )CTAS)
همانطور که در ذیل مشاهده می‌نمایید، بانک اطلاعاتی Oracle توانایی جمع‌آوری اطلاعات و آمار برای اکثر جداول حجیم در لحظه انجام عملیات CREATE TABLE … AS SELECT (CTAS) را دارا می‌باشد.

CONN test/test@pdb1

DROP TABLE tab1 PURGE;

CREATE TABLE tab1 AS

SELECT level AS id,

‘Description of ‘ || level AS description

FROM dual

CONNECT BY level <= 1000;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1 1000

SQL>

INSERT INTO … SELECT

قابل توجه است که جمع‌آوری لحظه‌ای آمار و اطلاعات از عملیات INSERT INTO … SELECT بر روی سگمنت‌های خالی‌ که از روش آدرس‌دهی مستقیم استفاده می‌نماید نیز می‌تواند به عنوان یکی از مزایای این ویژگی جالب توجه باشد. این تغییرات در حالت اجرای parallel یا در صورتی که مؤلفه‌ی APPEND مشخص شده باشد، از شیوه آدرس‌دهی مستقیم استفاده می‌نمایند.

TRUNCATE TABLE tab1;

INSERT /*+ APPEND */ INTO tab1

SELECT level AS id,

‘Description of ‘ || level AS description

FROM dual

CONNECT BY level <= 500;

COMMIT;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1 500

SQL>

به منظور انجام عملیات، object مورد نظر باید حداقل یک سگمنت خالی (به دلیل احتمال از دست دادن سگمنت به علت تأخیر در ایجاد سگمنت جدید) دارا باشد. لازم به ذکر است object پس از اجرای عمل متداول DELETE به فرم صحیح باقی گذاشته نمی‌شود لذا امکان دست‌یابی به قابلیت جمع‌آوری اطلاعات و آمار لحظه‌ای در این شرایط مهیا نمی‌باشد.

DELETE FROM tab1;

COMMIT;

INSERT /*+ APPEND */ INTO tab1

SELECT level AS id,

‘Description of ‘ || level AS description

FROM dual

CONNECT BY level <= 700;

COMMIT;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1 500

SQL>

همچنین می‌توان از مؤلفه‌ی NO_GATHER_OPTIMIZER_STATISTICS به منظور ممانعت از اجرای عملیات جمع‌آوری اطلاعات و آمار لحظه‌ای استفاده نمود.

 

TRUNCATE TABLE tab1;

INSERT /*+ APPEND */ INTO tab1

SELECT /*+ NO_GATHER_OPTIMIZER_STATISTICS */

level AS id,

‘Description of ‘ || level AS description

FROM dual

CONNECT BY level <= 700;

COMMIT;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1 500

SQL>

Partitioned Tables
بارگذاری حجیم داده‌ها در یک جدول پارتیشن شده متعقباً عملیات جمع‌آوری کلی آمار را نیز فعال خواهد نمود، البته گفتنی است این اطلاعات جمع‌آوری شده شامل آمار و اطلاعات در سطح پارتیشن نمی‌باشد.

 

DROP TABLE tab1 PURGE;

CREATE TABLE tab1

(id NUMBER,

created_date DATE)

PARTITION BY RANGE (created_date)

(PARTITION tab1_2015 VALUES LESS THAN (TO_DATE(’01/01/2016′, ‘DD/MM/YYYY’)) TABLESPACE users,

PARTITION tab1_2016 VALUES LESS THAN (TO_DATE(’01/01/2017′, ‘DD/MM/YYYY’)) TABLESPACE users);

INSERT /*+ APPEND */ INTO tab1

SELECT level,

TO_DATE(’01/01/2016′, ‘DD/MM/YYYY’)

FROM dual

CONNECT BY level <= 100;

COMMIT;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1 500

SQL>

COLUMN table_name FORMAT A20

COLUMN partition_name FORMAT A20

SELECT table_name,

partition_name,

num_rows

FROM user_tab_partitions

WHERE table_name = ‘TAB1’

ORDER BY partition_name;

TABLE_NAME PARTITION_NAME NUM_ROWS

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

TAB1 TAB1_2015

TAB1 TAB1_2016

SQL>

نتایج آماری در عملیات بارگذاری حجیم داده‌ها که به یک پارتیشن خالی معطوف شده است، بدون هیچگونه داده‌ی آماری global کاملاً در سطح پارتیشن خواهد بود.

 

EXEC DBMS_STATS.delete_table_stats(USER, ‘TAB1’);

TRUNCATE TABLE tab1;

INSERT /*+ APPEND */ INTO tab1 PARTITION (TAB1_2016)

SELECT level,

TO_DATE(’01/01/2016′, ‘DD/MM/YYYY’)

FROM dual

CONNECT BY level <= 100;

COMMIT;

COLUMN table_name FORMAT A20

SELECT table_name,

num_rows

FROM user_tables

WHERE table_name = ‘TAB1’;

TABLE_NAME NUM_ROWS

——————– ———-

TAB1

SQL>

COLUMN table_name FORMAT A20

COLUMN partition_name FORMAT A20

SELECT table_name,

partition_name,

num_rows

FROM user_tab_partitions

WHERE table_name = ‘TAB1’

ORDER BY partition_name;

TABLE_NAME PARTITION_NAME NUM_ROWS

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

TAB1 TAB1_2015

TAB1 TAB1_2016 100

SQL>

محدودیت‌ها
جمع‌آوری اطلاعات و آمار لحظه‌ای در حین عمل بارگذاری حجیم داده در بانک اطلاعاتی محدودیت‌هایی در خصوص موارد ذیل دارد:
• اطلاعات و آمارهای ایندکس و هیستوگرام‌ها. در صورت لازم دانستن این اطلاعات بالاجبار باید در یک عملیات جداگانه جمع‌آوری گردند. فراخوان زیر آمارهای از دست داده شده را بازیابی خواهد نمود، اما به بازآوری اطلاعات و آمار نمی‌پردازد مگر در وضعیتی که اطلاعات و آمار موجود از آن جدول یا ستون ارزش آماری خود را از دست داده باشد.

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, ‘TAB1’, options => ‘GATHER AUTO’);

• سگمنت‌های غیر خالی، به گونه‌ای که تشریح گردید.
• جداول واقع در اسکیماهای built-in. (صرفاً در جداول مربوط به اسکیماهای user-defined قابلیت اجرایی شدن دارد)
• جداول تودرتو، ایندکس شده و جداول خارجی.
• global table های موقتی که از عبارت ON COMMIT DELETE ROWS استفاده می‌نمایند.
• جداول با ستون‌های مجازی.
• اگر پارامتر PUBLISH جدول در DBMS_STATS برابر مقدار FALSE تنظیم شده باشد.
• جداولی که قابلیت آمارگیری آنان غیر فعال گردیده است.
• جداول پارتیشن شده‌ای که از آمار صعودی بهره می‌برند، در صورت عدم اشاره مستقیم عملیات درج داده‌ها به پارتیشنی که از عبارت PARTITION استفاده می‌کند.
• جداولی که به صورت multitable بارگذاری می‌شوند.

 

0 پاسخ

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

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

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

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