使用DBMS_HPROF包收集PL/SQL性能信息
DBMS_HPROF包是oracle 11g出现的工具,是DBMS_PROFILER和DBMS_TRACE的综合.这里简单演示如何使用DBMS_HPROF包来分析存储过程性能信
DBMS_HPROF包是Oracle 11g出现的工具,是DBMS_PROFILER和DBMS_TRACE的综合.
这里简单演示如何使用DBMS_HPROF包来分析存储过程性能信息.
首先我们需要执行一个脚本来生成保存相关信息的表.
使用SYS用户执行$ORACLE_HOME/rdbms/admin/dbmshptab.sql
然后创建directory,
CREATE DIRECTORY LOG_FILE_DIR AS '/home/oracle';
先用SCOTT用户创建一个用于测试的存储过程insert_emp.
23:58:57 @ORCL> conn scott/tiger@orcl
Connected.
23:59:35 SCOTT@orcl> CREATE OR REPLACE PROCEDURE insert_emp(pempno number, pename varchar2) IS
23:59:45 2 stmt VARCHAR2(2000);
23:59:45 3 BEGIN
23:59:45 4 stmt := 'INSERT INTO emp_bak '
23:59:45 5 || '(EMPNO,ENAME) '
23:59:45 6 || 'SELECT :EMPNO,:ENAME'
23:59:45 7 || ' FROM DUAL';
23:59:45 8 dbms_output.put_line(stmt);
23:59:45 9 EXECUTE IMMEDIATE stmt
23:59:45 10 USING pempno, pename;
23:59:45 11 END insert_emp;
23:59:46 12 /
Procedure created.
Elapsed: 00:00:00.44
这里演示是在SYS用户下进行,如果要到指定用户执行,需要将DBMS_HPROF包的执行权限以及目录的读写权限赋予给该用户.
收集刚建立的存储过程的性能指标
00:06:11 SYS@orcl> DECLARE
00:10:42 2 v_runid dbmshp_runs.runid%TYPE;
00:10:42 3 v_plshprof_dir all_directories.directory_name%TYPE := 'LOG_FILE_DIR';
00:10:42 4 v_plshprof_file VARCHAR2(30) := 'insert_emp';
00:10:42 5 BEGIN
00:10:42 6 -- Start the profiling session
00:10:42 7 dbms_hprof.start_profiling(v_plshprof_dir, v_plshprof_file);
00:10:42 8 scott.insert_emp(9990,'Cryking!');
00:10:42 9 -- Stop the profiling session
00:10:42 10 dbms_hprof.stop_profiling;
00:10:42 11 -- Analyze the raw output and create the table data
00:10:42 12 v_runid := dbms_hprof.analyze(v_plshprof_dir, v_plshprof_file);
00:10:42 13 DBMS_OUTPUT.PUT_LINE('This Run: ' || to_char(v_runid));
00:10:42 14 END;
00:10:42 15 /
INSERT INTO emp_bak (EMPNO,ENAME) SELECT :EMPNO,:ENAME FROM DUAL
This Run: 1
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.26
执行完后,会在对应目录生成一个insert_emp的文件,直接查看文件的话,内容很凌乱也很简短,如下:
P#! PL/SQL Timer Started
P#C PLSQL."SCOTT"."INSERT_EMP"::7."INSERT_EMP"#762ba075453b8b0d #1
P#X 1331
P#C PLSQL."SYS"."DBMS_OUTPUT"::11."PUT_LINE"#5892e4d73b579470 #109
P#X 4
P#C PLSQL."SYS"."DBMS_OUTPUT"::11."PUT"#5892e4d73b579470 #77
P#X 220
P#R
P#X 2
P#C PLSQL."SYS"."DBMS_OUTPUT"::11."NEW_LINE"#980980e97e42f8ec #117
P#X 4
P#R
P#X 3
P#R
P#X 83
P#C SQL."SCOTT"."INSERT_EMP"::7."__dyn_sql_exec_line9" #9
P#X 39858
P#R
P#X 14
P#R
P#C PLSQL."SYS"."DBMS_HPROF"::11."STOP_PROFILING"#980980e97e42f8ec #59
P#R
P#! PL/SQL Timer Stopped
这里需要使用工具plshprof对其进行分析,如下:
[oracle@oracleserver ~]$ plshprof insert_emp
PLSHPROF: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
[6 symbols processed]
[Report written to 'insert_emp.html']
[oracle@oracleserver ~]$ ls *.html
insert_emp_2c.html insert_emp_fn.html insert_emp_mf.html insert_emp_nsf.html insert_emp_tc.html insert_emp_ts.html
insert_emp_2f.html insert_emp.html insert_emp_ms.html insert_emp_nsp.html insert_emp_td.html
insert_emp_2n.html insert_emp_md.html insert_emp_nsc.html insert_emp_pc.html insert_emp_tf.html
然后我们再查看文件insert_emp.html的内容,如下:
PL/SQL Elapsed Time (microsecs) Analysis
41519 microsecs (elapsed time) & 6 function calls
The PL/SQL Hierarchical Profiler produces a collection of reports that
present information derived from the profiler's output log in a variety
of formats. The following reports have been found to be the most generally
useful as starting points for browsing:
-
Function Elapsed Time (microsecs) Data sorted by Total Subtree Elapsed Time (microsecs)
-
Function Elapsed Time (microsecs) Data sorted by Total Function Elapsed Time (microsecs)
In addition, the following reports are also available:
-
Function Elapsed Time (microsecs) Data sorted by Function Name
-
Function Elapsed Time (microsecs) Data sorted by Total Descendants Elapsed Time (microsecs)
-
Function Elapsed Time (microsecs) Data sorted by Total Function Call Count
-
Function Elapsed Time (microsecs) Data sorted by Mean Subtree Elapsed Time (microsecs)
-
Function Elapsed Time (microsecs) Data sorted by Mean Function Elapsed Time (microsecs)
-
Function Elapsed Time (microsecs) Data sorted by Mean Descendants Elapsed Time (microsecs)
-
Module Elapsed Time (microsecs) Data sorted by Total Function Elapsed Time (microsecs)
.......通过浏览器查看,我们可以点击各个链接,查看,如点击Function Elapsed Time (microsecs) Data sorted by Total Subtree Elapsed Time (microsecs)后,结果如下图:
从图可知,函数最耗时的语句为SCOTT.INSERT_EMO._dyn_sql_exec_line9(即为执行动态sql那一行),耗时39858微秒,整个函数共耗时41519微秒.
还可以点击Function Name列查看更详细的内容.
PS:其实生成的HTML大部分信息都是来自dbmshp_function_info和dbmshp_parent_child_info表.
,

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。
