2
A
回答
1
查詢運行時間可以用EXPLAIN PLAN
來估計。
創建一個函數在給定的查詢上運行EXPLAIN PLAN
,查找時間估計並返回數字。
示例函數
create or replace function estimate_run_time_in_seconds(p_sql clob) return number is
v_statement_id number := round(dbms_random.value*100000000);
v_time_in_seconds number;
begin
execute immediate 'explain plan set statement_id = '''||v_statement_id||''' for '||p_sql;
select max(time)
into v_time_in_seconds
from plan_table
where statement_id = to_char(v_statement_id);
return v_time_in_seconds;
end;
/
樣品結果
begin
dbms_output.put_line(estimate_run_time_in_seconds('select * from dual'));
dbms_output.put_line(estimate_run_time_in_seconds(
'select * from dba_objects cross join dba_users'));
end;
/
Results:
1
34
實際上,這些估計會路要走。但是,如果你只是在尋找一個數量級的估計值,這可能就足夠了。
有很多次,當優化器是可怕的錯誤,我不會建議完全阻止任何查詢,因爲估計。相反,也許只是向用戶提供警告。例如:「Oracle估計此查詢將在X秒內運行!您確定要運行此查詢嗎?」
爲了提高估計的準確性,您可能需要查看收集或手動調整系統統計信息。查看下錶中的結果。您可能需要(非常小心!)更改一些值,以便將時間估算與實際時間對齊。
select * from sys.aux_stats$;
相關問題
- 1. 運行任務Laravel驗證之前
- 2. MySQL查詢永久運行
- 3. 在每條路線運行之前運行數據庫查詢
- 4. 多久運行
- 5. 外部查詢在內部查詢之前正在運行
- 6. 永久運行多久
- 7. SSRS:在執行前後運行查詢
- 8. 在watchify運行之前運行eslint
- 9. Authlogic在創建操作之前在登錄時運行驗證
- 10. 在Rails初始化器運行之前運行rspec「之前」塊
- 11. Struts 2如何在每個動作之前運行驗證
- 12. Jquery在php腳本運行之前驗證更改頁面
- 13. 在發送預約之前運行自定義驗證邏輯
- 14. Django obj_create在我的表單驗證之前運行
- 15. 在運行計算之前驗證表格
- 16. 如何在運行驗證之前刪除Rails嵌套關聯?
- 17. 運行MySQL之前在PHP中驗證變量?
- 18. .htaccess - 在驗證之前運行PHP文件
- 19. 運行多個子查詢
- 20. 多次運行SQL查詢
- 21. 多個查詢未運行
- 22. Yii在運行時驗證?
- 23. jQuery驗證 - 在運行時
- 24. 在運行時jQuery驗證
- 25. 目前在SQL Server中運行查詢
- 26. 在查詢數據庫之前使用模型進行驗證
- 27. Apache solr在solr上執行之前驗證查詢
- 28. 在SQL Server Management Studio中執行之前禁用查詢驗證
- 29. Filter.OnAuthorization在Controller.OnAuthorization之前運行
- 30. READ在FORMAT之前運行
我懷疑這是可能的,然後再運行查詢。如果您不想運行長查詢,請創建一個配置文件,將CPU_PER_CALL設置爲給定時間(例如2分鐘),然後將此配置文件分配給麻煩的用戶。如果總時間超過給定限制,Oracle將終止查詢。有關詳細信息,請參閱以下鏈接:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6010.htm – krokodilko
AFAIK沒有簡單的方法可以提前知道。當遇到同樣的問題時,我們使用資源計劃來限制某些用戶訪問數據庫資源:https://docs.oracle.com/cd/E11882_01/server.112/e25494/dbrm.htm – vercelli
感謝您的關注這些。 –