我們有一個基於.Net的內部應用程序,它調用Oracle(10g)中的某些過程。其中一個查詢被運行以獲取這些過程的參數。這是一個非常簡單的選擇查詢。但即使在最好的情況下,它也需要3秒。一天至少幾次它會開始超過40秒,並導致我們的.Net應用程序超時。選擇查詢是:Oracle選擇查詢花費太長
SELECT a.argument_name,
a.data_type,
a.in_out,
NVL (a.data_length, 0) AS data_length,
NVL (a.data_precision, 0) AS data_precision,
NVL (a.data_scale, 0) AS data_scale
FROM ALL_ARGUMENTS a, all_objects o
WHERE o.object_id =
(SELECT object_id
FROM all_objects
WHERE UPPER (object_name) = UPPER ('resourcemanager_pkg')
AND object_type = 'PACKAGE'
AND owner = 'OFFICEDBA')
AND UPPER (a.object_name) = UPPER ('p_search_roles')
AND a.OBJECT_ID = o.OBJECT_ID
ORDER BY a.position ASC
此查詢返回特定過程的輸入/輸出參數。
resourcemanager_pkg是包名稱,p_search_roles是過程名稱。 我們爲每個數據庫調用過程調用此查詢。
這個查詢有什麼問題嗎?任何幫助將不勝感激。請讓我知道是否需要任何其他信息。
感謝, Vikalp耆那教
此查詢是否由'OFFICEDBA'用戶運行?如果是這樣,你可以通過用相應的'USER _...'視圖替換'ALL _...'數據字典視圖來加速它。 –