Oracle
如何計算Oracle中訪問系統視圖成本的查詢?
對於返回目前會話中是否有任何活動事務的查詢,
SELECT COUNT(*) FROM v$transaction t INNER JOIN v$session s ON (t.ses_addr = s.saddr ) INNER JOIN v$mystat m ON (s.sid = m.sid ) WHERE ROWNUM = 1;
EXPLAIN
顯示 0 成本。然而,這似乎不是真的。在高負載環境中定期執行此查詢會導致伺服器在其上浪費幾乎所有資源。估計此類查詢的影響的正確方法是什麼(我相信同樣的問題不僅發生在這個特定的查詢上,還發生在涉及系統視圖的任何事情上)?
謝謝。
一些(全部?)動態
V$
視圖不是基於字典表而是基於記憶體結構,因此不會收集傳統統計資訊,因此優化器無法計算對這些視圖的查詢成本。但是,解釋計劃成本只是預期工作的粗略近似值,因此它不應該是您評估查詢效率的唯一方法。查詢的真實成本可以通過跟踪來揭示。跟踪您的實際查詢和所有替代查詢,tkprof 將顯示哪一個是最有效的。
特別是對於您的查詢,您似乎想確定您目前的會話是否有未送出的工作。以下 SO 問題中描述了備用查詢:
您能否嘗試這些問題中的查詢並告訴我們哪一個是最有效的(在您的高負載環境中)?