2013-04-08 31 views
0

我想知道在Oracle中將cursor_sharing參數設置爲「FORCE」的權衡。 因爲這會試圖對任何SQL語句進行軟解析,並且當然必須改進性能。 但默認值爲「EXACT」,所以我想知道是否有任何危險設置爲FORCE或SIMILAR。Oracle中的cursor_sharing參數

回答

1

除非你真的知道你在做什麼,否則我建議不要改變這個設置。

通常情況下,如果你有大量的硬解析,這是一個糟糕的應用程序設計的跡象。

選擇所有的產品給定類別(僞)一個典型的例子:

stmt = 'select * from products where category = ' || my_category 
results = stmt.execute 

這是有缺陷的,原因如下:

  • 它爲每一類不同的SQL語句,因此顯着增加了硬解析的數量
  • 它容易受到SQL注入攻擊
1

使用cursor_sharing = exact可以很好地運行一個好的應用程序。一個好的應用程序可以使用文字出於特定的原因,例如選擇state = new的命令。文字的使用是可以的。如果應用程序使用文字通過ID來識別訂單,它將會有所不同,因爲這將是許多不同的訂單ID。

最好是清理該應用使用文字以正確的方式或開始使用以達到最佳性能準備的語句。

如果您碰巧有一個只使用文字的應用程序,請將cursor_sharing設置爲FORCE。在11g中有一些機制,如基數反饋能夠根據來自查詢的非預期行計數來調整執行計劃,以確保最初爲查詢計劃的計劃基於輸入和輸出進行糾正,下次使用它。