Oracle數(shù)據(jù)庫(kù)中使用DBMS_PROFILER進(jìn)行調(diào)優(yōu)
DBMS_PROFILER在使用之前可能需要安裝,具體安裝步驟如下:
◆1:執(zhí)行$ORACLE_HOME/rdbms/admin/profload.sql
◆2:創(chuàng)建一個(gè)用于存放跟蹤信息的schema
CREATE USER profiler IDENTIFIED BY profiler DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT connect TO profiler;
CREATE PUBLIC SYNONYM plsql_profiler_runs FOR profiler.plsql_profiler_runs;
CREATE PUBLIC SYNONYM plsql_profiler_units FOR profiler.plsql_profiler_units;
CREATE PUBLIC SYNONYM plsql_profiler_data FOR profiler.plsql_profiler_data;
CREATE PUBLIC SYNONYM plsql_profiler_runnumber FOR profiler.plsql_profiler_runnumber;
◆3:使用剛剛創(chuàng)建的profiler用戶執(zhí)行如下腳本或代碼:
$ORACLE_HOME/rdbms/admin/proftab.sql
GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE ON plsql_profiler_data TO PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE ON plsql_profiler_units TO PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE ON plsql_profiler_runs TO PUBLIC;
安裝成功后測(cè)試:
執(zhí)行
BEGIN
DBMS_PROFILER.START_PROFILER('123');
FOR I IN 1 .. 1000 LOOP
INSERT INTO A VALUES (I || '');
END LOOP;
COMMIT;
DBMS_PROFILER.STOP_PROFILER();
END;
執(zhí)行后使用下面的代碼檢查:
SELECT C.LINE#, C.TOTAL_OCCUR, C.TOTAL_TIME, C.MIN_TIME, C.MAX_TIME
FROM PLSQL_PROFILER_RUNS A, PLSQL_PROFILER_UNITS B, PLSQL_PROFILER_DATA C
WHERE A.RUN_COMMENT = '123'
AND B.UNIT_OWNER = ''
AND A.RUNID = B.RUNID
AND A.RUNID = C.RUNID
AND B.UNIT_NUMBER = C.UNIT_NUMBER
注意:每次DBMS_PROFILER.START_PROFILER的輸入?yún)?shù)需要改變,否則便不能分別運(yùn)行后的運(yùn)行結(jié)果了。
除此之外B.UNIT_OWNER =‘’中的約束值如果是在package里面需要是包名,如果是procedure則是procedure的名字。實(shí)在在不知道什么名字時(shí)可以在PLSQL_PROFILER_UNITS中查一下。
此外,運(yùn)行結(jié)果可以通過(guò)PLSQL Developer來(lái)觀察,需要新建一個(gè)test,在profiler中可以查看它的運(yùn)行結(jié)果,示例如下:
