首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SQL*Plus 記錄 SQL 執行時間的 SET TIMING 技巧

     編輯:Oracle 資料庫基礎

Oracle SQL*Plus 記錄 SQL 執行時間的 SET TIMING 技巧

快速獲取 SQL 執行耗時是效能分析第一步。SQL*Plus 內建 SET TIMING ON 可自動顯示每條語句的經過時間,零成本、零侵入,是 DBA 與開發人員必備技能。

操作示範

[oracle@jw ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Tue Aug 28 16:59:43 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> SET TIMING ON;
SQL> SELECT COUNT(*) FROM tab;

  COUNT(*)
----------
      2447

Elapsed: 00:00:00.03

關鍵輸出解讀

  • Elapsed:牆鐘時間,含網路傳輸、Client 處理、Server 執行總耗時
  • 單位:時:分:秒.百分秒(百萬分之一秒精度視版本而定)
  • 適用於 DDL/DML/查詢/PL/SQL 區塊所有語句

進階計時控制

-- 關閉計時
SET TIMING OFF;

-- 僅顯示毫秒級精度(部分版本支援)
SET TIMING ON;
SET TIME ON;  -- 同時顯示當前時間戳

搭配 AUTOTRACE 進行深度分析

SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS
SET TIMING ON
SELECT * FROM large_table WHERE col = :val;

同時獲得:執行計畫、統計資訊(邏輯讀、物理讀、排序等)、實際耗時。

腳本化應用範例

-- benchmark.sql
SET TIMING ON
SET ECHO ON
SET FEEDBACK ON
SPOOL benchmark_&_DATE..log

-- 測試查詢 1
SELECT /*+ FULL(t) */ COUNT(*) FROM big_table t;

-- 測試查詢 2
SELECT /*+ INDEX(t idx_col) */ COUNT(*) FROM big_table t WHERE col = 100;

SPOOL OFF

注意事項與限制

  1. Client 端計時:包含網路延遲,非純資料庫引擎時間
  2. 並行查詢:Elapsed 可能小於 CPU Time(多線程並行)
  3. 首次執行:含硬解析、庫快取載入,建議執行 2-3 次取平均
  4. 長時間語句:超過 24 小時顯示格式可能截斷,查詢 V$SQL_MONITOR 更準確

替代方案對比

方法精度適用場景權限需求
SET TIMING ON百分秒互動式、腳本快速驗證無
DBMS_UTILITY.GET_TIME百分秒PL/SQL 區塊內部計時EXECUTE 權限
DBMS_PROFILER微秒PL/SQL 逐行效能分析PROFILER 權限
V$SQL_MONITOR秒長時間 SQL 即時監控SELECT ANY DICTIONARY
AWR/ASH秒歷史趨勢分析Diagnostic Pack 授權
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved