工作過程中對oracle使用過程中遇到問題的解決方法進行彙總,友善後續自己查詢。歡迎大家勘正
性能問題主要展現在資料查詢沒有在最長可接受時間範圍内出結果,對應到資料庫底層來講,資料庫記憶體進行大量的資料頁交換,大量的磁盤讀寫。
針對這種情況,确認資料庫的SGA大小,可以考慮将資料檔案分盤存放(調整表空間資料檔案的存放位置),降低磁盤的通路壓力;調整資料表中的資料和索引存放至不同表空間;
首先,确認查詢sql語句是否拼接編寫,是否使用綁定變量的方式;
其次,檢視驗證查詢sql語句多表組合編寫方式,先過濾再組合;
接着,檢視查詢sql語句的執行計劃,主要檢視對表掃描的方式,以及對索引的執行情況
查詢中用到的各種hint方式主要有以下形式:
<1> /*+ALL_ROWS*/
:Uno,M-S4u0表明對語句塊選擇基于開銷的優化方法,并獲得最佳吞吐量,使資源消耗最小化.ITPUB個人空間Yk3B3P ZJ/w
<2>. /*+FIRST_ROWS*/
O0CfP_F3O0表明對語句塊選擇基于開銷的優化方法,并獲得最佳響應時間,使資源消耗最小化.
0_8LGx&[G0f4w0
<3>. /*+CHOOSE*/ITPUB個人空間`0Xbzf u1C
表明如果資料字典中有通路表的統計資訊,将基于開銷的優化方法,并獲得最佳的吞吐量;
&HIQ$Q#@ fC3p b0表明如果資料字典中沒有通路表的統計資訊,将基于規則開銷的優化方法;ITPUB個人空間#SI:F*B|{zRn
<4>. /*+RULE*/
5i;b.g+pNj.v0表明對語句塊選擇基于規則的優化方法.
,@w_$R!dFJ3_UZ0
<5>. /*+FULL(TABLE)*/
6~+L&Ui$_0表明對表選擇全局掃描的方法.ITPUB個人空間~9Rf!F'Wh9H_r
<6>. /*+ROWID(TABLE)*/
1GTBP#p0提示明确表明對指定表根據ROWID進行通路.
~/g~4@:r'R\&f0
<7>. /*+CLUSTER(TABLE)*/
?ueD,n,z8@0提示明确表明對指定表選擇簇掃描的通路方法,它隻對簇對象有效.
_)[v4]?0
<8>. /*+INDEX(TABLE INDEX_NAME)*/
^Z0}A0SY0表明對表選擇索引的掃描方法.
'l;L@8vJK U wB,J;}0
<9>. /*+INDEX_ASC(TABLE INDEX_NAME)*/ITPUB個人空間7iEkMz+ch
表明對表選擇索引升序的掃描方法.ITPUB個人空間sqj%|noo
<10>. /*+INDEX_COMBINE*/
x ZdHO.BkjD6y0為指定表選擇位圖通路路經,如果INDEX_COMBINE中沒有提供作為參數的索引,将選擇出位圖索引的布爾組合方式.
"p4JqT~Q6T0
<11>. /*+INDEX_JOIN(TABLE INDEX_NAME)*/ITPUB個人空間!byRi L8A w&],E
提示明确指令優化器使用索引作為通路路徑.ITPUB個人空間/f6xi$m!~~;I
<12>. /*+INDEX_DESC(TABLE INDEX_NAME)*/
X~*J,Dj6^SM8tSZ![C0表明對表選擇索引降序的掃描方法.
/vrV}:u|0i3O^0l&
<13>. /*+INDEX_FFS(TABLE INDEX_NAME)*/ITPUB個人空間s*`emKTm%ME
對指定的表執行快速全索引掃描,而不是全表掃描的辦法.ITPUB個人空間#drx8V\$Ly
<14>. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
4o0uSJ'cQ0提示明确進行執行規劃的選擇,将幾個單列索引的掃描合起來.ITPUB個人空間*MHp cc~
cp\-o)|_u^0
<15>. /*+USE_CONCAT*/
Lt$t5W%Q FqA%_P&v0對查詢中的WHERE後面的OR條件進行轉換為UNION ALL的組合查詢.ITPUB個人空間esjY2p{D`
<16>. /*+NO_EXPAND*/ITPUB個人空間jbB*nT*dZO ]W
對于WHERE後面的OR 或者IN-LIST的查詢語句,NO_EXPAND将阻止其基于優化器對其進行擴充.
_'RcOUL0
<17>. /*+NOWRITE*/
+e*Is&mrz0禁止對查詢塊的查詢重寫操作.
<18>. /*+REWRITE*/ITPUB個人空間!vX}hk)r0R
可以将視圖作為參數.
<19>. /*+MERGE(TABLE)*/
3Z$ko1kROmy1s0能夠對視圖的各個查詢進行相應的合并.ITPUB個人空間J\V;Kd,]
<20>. /*+NO_MERGE(TABLE)*/
'J1\K ~_LKRrj0對于有可合并的視圖不再合并.
7L2O?iVF4r,E2Fm0t*U,fa8].\#C0ITPUB個人空間pZ1Q
<21>. /*+ORDERED*/ITPUB個人空間Oic#CPf
根據表出現在FROM中的順序,ORDERED使ORACLE依此順序對其連接配接.ITPUB個人空間v9M(h7jU$xQ
<22>. /*+USE_NL(TABLE)*/ITPUB個人空間6uKPY!ld%KS'l
将指定表與嵌套的連接配接的行源進行連接配接,并把指定表作為内部表.
L9EzA ]"BMS+iJ0
<23>. /*+USE_MERGE(TABLE)*/ITPUB個人空間,`L&E6sg f
将指定的表與其他行源通過合并排序連接配接方式連接配接起來.
N r6o"} F5bB*|6c*B0
<24>. /*+USE_HASH(TABLE)*/
Tc\IR(~0将指定的表與其他行源通過哈希連接配接方式連接配接起來.ITPUB個人空間0G.Se'L]!Eo)e
<25>. /*+DRIVING_SITE(TABLE)*/ITPUB個人空間1m U.^A:i9G
強制與ORACLE所選擇的位置不同的表進行查詢執行.
O%NoC\&S0
<26>. /*+LEADING(TABLE)*/ITPUB個人空間"fY4b/FZ"C&i
将指定的表作為連接配接次序中的首表.ITPUB個人空間qIrg6e qN
4K VSS7p;mw7x0<27>. /*+CACHE(TABLE)*/
3mn0_O @K.M$t.Lz0當進行全表掃描時,CACHE提示能夠将表的檢索塊放置在緩沖區緩存中最近最少清單LRU的最近使用端ITPUB個人空間3B^MWr'[@Y
<28>. /*+NOCACHE(TABLE)*/
5Kn$Ba0B$d_0當進行全表掃描時,CACHE提示能夠将表的檢索塊放置在緩沖區緩存中最近最少清單LRU的最近使用端ITPUB個人空間Z;_!K^GW"Wk;A2UC
<29>. /*+APPEND*/
q?8lA5kcc0直接插入到表的最後,可以提高速度.
-\;c$Hn/kBB(`+^;~
<30>. /*+NOAPPEND*/
wY"f?(R)mj0通過在插入語句生存期内停止并行模式來啟動正常插入.