解读Time Model Statistics中的PL/SQL 和 SQL执行时间
全网最全面的Oracle AWR 专栏,持续更新中…
在Oracle AWR报告中,“Time Model Statistics”从用户的视角展示了各类操作所花费的时间。
在这个例子中,SQL执行时间占用了DB Time的68%,而PL/SQL仅占3%。但当我们下翻到“SQL Statistics”部分时,发现捕获的PL/SQL SQL语句占总DB Time(秒)的67.5%,这表明大部分SQL实际上是在PL/SQL中执行的。
从表面上看,这似乎存在矛盾——如果大部分SQL都在PL/SQL中执行,那么PL/SQL时间不应该更高吗?
答案在于Oracle如何定义和测量这两项统计数据。
尽管PL/SQL代码主要由SQL语句组成,但“sql execute elapsed time”和“PL/SQL execute elapsed time”并不重叠。具体来说:
- 在PL/SQL中执行的SQL被计入“SQLexecute elapsed time”,而不是“PL/SQL execute elapsed time”。
- “PL/SQL execute elapsed time”仅测量运行PL/SQL引擎本身所花费的时间,例如循环、条件语句、变量赋值等。
- 它并不包括嵌入在PL/SQL块中的SQL语句的执行时间。
换句话说,3%的PL/SQL时间仅代表了PL/SQL解释器的开销,而68%的SQL时间则包括了PL/SQL块中实际执行SQL的时间。
号主在certview.oracle.com网站上的证书清单截图。
关于号主,姚远:
- Oracle ACE(Oracle和MySQL数据库方向)
- 华为云最有价值专家
- 《MySQL 8.0运维与优化》的作者
- 拥有 Oracle 10g、12c和19c OCM等数十项数据库认证
- 曾任IBM公司数据库部门经理
- 20+年DBA经验,服务2万+客户
- 精通C和Java,发明两项计算机专利
- 两次获得国家部级奖