در پایگاه داده اوراکل نسخه ۱۱ امکان Real-Time SQL Monitoring معرفی گردید که اجازه می دهد بر فعالیت sql های که زمان اجرای طولانی دارند و یا از hint monitor در انها استفاده شده نظارت داشته باشیم.در اوراکل ۱۲c این امکان در حد اینکه بر روی انواع دستورات حاوی sql و pl sql که در آنها از Sql استفاده گردیده، نظارت داشته باشیم. بسته DBMS_SQL_MONITOR API های مورد نیاز در این خصوص را فراهم می نماید به خوبی رویه هایی که در بسته DBMS_SQLTUNE پیدا می گردید.
تغییرات Real-Time SQL Monitoring:
پایه عملکرد Real-Time SQL Monitoring نسب به اوراکل ۱۱g تغییری نداشته به غیر از رویه های REPORT_SQL_MONITOR و REPORT_SQL_MONITOR_LIST که از بسته DBMS_SQLTUNE به بسته DBMS_SQL_MONITOR منتقل شده اند.
نظارت عملیات Real-Time SQL پایگاه داده :
در اوراکل ۱۲ امکان نظارت بر عملکرد sql و plsql به صورت گروهی وترکیبی وجود دارد. این عملیات با رویه های begin_operatin آغاز و با end_operation از بسته DBMS_SQL_MONITOR پایان می یابد.
پارامتر های رویه BEGIN_OPERATION شامل موارد زیر می باشد.
DBOP_NAME: یک نام که کابر تعریف کرده برای عملیات ترکیبی پایگاه داده
DBOP_EID: یک شناسه واحد اختیاری برای اجراهای جاری. در صورتی که NULL باشد، یک شناسه اجرایی واحد ساخته می شود.
FORCED_TRACKING: اگر مقدار آن FORCE_TRACKING تنظیم گردد، عملیات حتما ارزیابی می گردد. در صورتی که مقدار NO_FORCE_TRACKING که مقدار پیش فرض هم می باشد تنظیم گردد، عملیات های که بیش از ۵ ثانیه از CPU و I/O استفاده می کندد ارزیابی می شوندو
ATTRIBUTE_LIST: یک لیستی که بر اساس کاما جدا می شوند که نام ویژگی های که برای محدود کردن نظارت در یک دورهاستفاده می شوند.
رویه end_operation فقط از دو پارامتر اول استفاده می کند که اجباری هم می باشند.
در ادامه یک نمونه کاربردی آورده شده است :
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;
CREATE TABLE t1 AS
SELECT level AS id,
‘Description for ‘ || level AS description
FROM dual
CONNECT BY level <= 1000000;
CREATE TABLE t2 AS
SELECT level AS id,
‘Description for ‘ || level AS description
FROM dual
CONNECT BY level <= 1000000;
آغاز می کنیم یک عملیات را با ارزیابی اجباری :
VARIABLE l_dbop_eid NUMBER;
BEGIN
:l_dbop_eid := DBMS_SQL_MONITOR.begin_operation (
dbop_name => ‘db_op_1’,
dbop_eid => :l_dbop_eid,
forced_tracking => DBMS_SQL_MONITOR.force_tracking
);
END;
/
یک عمایاتی را اجرا می کنیم که از دو جدول T1 و T2 استفاده گردد:
BEGIN
FOR cur_rec IN (SELECT * FROM t1) LOOP
NULL;
END LOOP;
FOR cur_rec IN (SELECT * FROM t2) LOOP
NULL;
END LOOP;
END;
/
عملیات را پایان می دهیم .
BEGIN
DBMS_SQL_MONITOR.end_operation (
dbop_name => ‘db_op_1’,
dbop_eid => :l_dbop_eid
);
END;
/
نتیجه را می توان از نمایه V$SQl_MONITOR مشاهده کرد.
SET LINESIZE 200
SELECT dbop_name, dbop_exec_id, status
FROM v$sql_monitor
WHERE username = ‘TEST’;
DBOP_NAME DBOP_EXEC_ID STATUS
—————————— ———— ——————-
db_op_1 3 DONE
db_op_1 2 DONE
db_op_1 1 DONE
SQL>
REPORT_SQL_MONITOR
این امکان نسبت به اوراکل ۱۱G تغییر نداشته به غیر از اینکه به بسته DBMS_SQL_MONITOR منتقل گردیده است.برای نظارت بر عملیات به DBOP_NAME حتما احتیاج داریم که در گزارش، آخرین اجرای عملیات مورد نظر پایگاه داده مشخص می گردد. در صورتی که آخرین اجرا مورد نظر نباشد باید DBOP_EXEC_ID عمیات را هم مشخص کرد.
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SPOOL /host/report_sql_monitor.htm
SELECT DBMS_SQL_MONITOR.report_sql_monitor(
dbop_name => ‘db_op_1’,
type => ‘HTML’,
report_level => ‘ALL’) AS report
FROM dual;
SPOOL OFF
خروجی REPORT_SQL_MONITOR می تواند هر کدام از نوع های زیر باشد
• Text
• Html
• Xml
• Active
REPORT_SQL_MONITOR_LIST
این امکان هم مانند نسخه ۱۱g در ۱۲c فعالیت می کند با این تغییر که به بسته DBMS_SQL_MONITOR منتقل گردیده است و گزارش های فعال را هم پشتیبانی می کند.
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SPOOL /host/report_sql_monitor_list.htm
SELECT DBMS_SQL_MONITOR.report_sql_monitor_list(
type => ‘HTML’,
report_level => ‘ALL’) AS report
FROM dual;
SPOOL OFF
خروجی REPORT_SQL_MONITOR_LIST می تواند هر کدام از نوع های زیر باشد
• Text
• Html
• Xml
• Active
REPORT_SQL_DETAIL
این تابع همچنان در بسته DBMS_SQLTUNE باقی مانده است.
نمایه ها
از نمایه های زیر می توان استفاده کرد.
V$SQL_MONITOR
V$SQL_PLAN_MONITOR