我有一個查詢(使用Oracle Application Express報告),我的用戶告訴我執行「緩慢」或以不可接受的速度執行(未給出實際加載時間頁面和查詢是頁面上唯一的東西)。使用流水線功能微調oracle查詢
該查詢涉及很多表,實際上引用了一個流水線函數,該函數標識當前登錄的用戶訪問我們的網站,並返回一個自定義的記錄「表」,他們有權根據我們的自定義安全方案進行記錄。
我的主要問題在於Oracle對查詢的緩存以及它們如何受到我們設置的影響。
當我將查詢從網頁中取出並在Sql Developer中運行(並手動指定用戶ID以模擬網站的登錄用戶)時,性能從71秒變爲19秒變爲.5秒。顯然,Oracle正在利用其緩存機制來加快後續運行。
這是怎麼受?:
- ,不同的用戶將獲得由 管內襯功能不同的表(所有相同的列,只是不同數量的 列,並在值的事實行)。管道阻止 緩存工作嗎?我只看到緩存,因爲我正在運行 一個非常孤立的測試?
- 更多 - 緩存是否容易受使用該系統的人數影響?我不知道如何「太多」可以獲得緩存。因此,如果我們有50個併發用戶訪問整個網站的不同部分,整天加載不同的查詢,那麼oracle可能無法緩存許多/任何一個用戶,因爲他們經常看到不同的請求疑問?
對不起,我的問題不是很技術性。
我是一位開發人員,他被要求在這個看似DBA的問題中提供幫助。
此外,這很複雜,因爲我們無法真正確定實際的加載時間是什麼,因爲我們的用戶沒有報告詳細程度。
任何思考:
- 我怎麼能確定這個查詢實際上是慢?
- 平均處理時間是多少?
- 以及如何進行微調,如果它是一個問題?
謝謝!
感謝您的詳細分解!從你的解釋,我同意它可能是數據緩存。你的第三段描述了我最有可能看到的東西。相同的查詢會每次運行多次,並使用不同的綁定值進行替換。流水線函數的每次運行都會「命中」相同的表,但只是根據您的身份返回更小或更大的數據子集。因此,據說,你能否推薦我如何進一步調查如何解決這個問題?研究學習解釋計劃?我只想確保我的用戶不會像我那樣體驗70秒的運行時間! – user3249281
@ user3249281 - 很難做出真正一般的性能調整建議,這些建議特別有用 - 有很多「取決於」。第一步是弄清楚什麼是消耗時間(或者,如果我們認爲大部分時間都花在做I/O上,那是什麼導致了大部分邏輯I/O)。查看查詢計劃和執行統計數據可能會對此有所幫助。您也可以跟蹤會話,但查詢計劃可能是更簡單的起點。 –