oraclesql慢
❶ oracle資料庫運行sql很卡很慢很頓,看等待事件都是cursor:pin s on x,這是啥
詳解cursor: pin S wait on X等待事件
『cursor: pin * events』等待事件
該類等待事件一般是為了pin相關的子游標
『Cursor: pin S on X』 最常見的等待事件, 進程為了共享操作例如執行pin游標而以SHRD S mode申請mutex, 但是未立即獲得。原因是該游標被其他進程以EXCL X mode 持有了。
實際該 cursor: pin S wait on X等待事件往往是由於其他因素誘發的。Mutex爭用僅僅是問題的症狀,但根本原因需要Database Consultant 進一步挖掘。
下面我們列出一些已知的常見案例, 在這些例子中可以看到 我上面提到的 Mutex的爭用僅僅是偽爭用:
過多的子游標 High Version Counts
過多的子游標版本Version Count可能導致Mutex 爭用,一般一個SQL的Version Count不要高於500。
檢查High Version Count很簡單, 在AWR里就有SQL ordered by High Version Count,也可以寫SQL查V$SQL、V$SQLAREA
昂貴的X$、V$視圖查詢
一些對於V$、X$視圖的查詢,需要訪問X$KGL*之類的fixed table,可能觸發Mutex爭用。
Mutex持有者得不到CPU
Mutex持有者若得不到足夠的CPU片可能一直阻塞他人,直到它拿到需要的CPU。
這種情況可能由於OS操作系統的實際情況或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。
已經被KILLED的SESSION仍持有Mutex
當session正持有Mutex,而其對應的Process被強制KILL掉, 則直到PMON徹底清理掉該Dead Process並釋放Mutex,其他session才能不再等待。 診斷該類問題,最好能檢查PMON的TRACE。 當然也存在部分BUG會導致PMON清理過程非常慢。
舉例來說,bug 9312879描述了一種場景:PMON 需要獲得某個Mutex以便清理某個dead process,但是該Mutex又被其他進程持有,則PMON甚至無法開始真正清理並釋放Mutex。
如果自己搞不定可以找ASKMACLEAN專業ORACLE優化團隊成員幫您搞定!
❷ oracle資料庫執行sql很慢怎麼回事
由於經常執行sql語句,如果一條一條執行效率低下。
oarclecmd.commandtext
=
sqlstr;
oraclecmd.executenonquery();
sqlstr
可以寫成如下所示語句
begin
sql1;
sql2;
......
sqln;
end;
//注意此處的分號很重要
然後同樣調用executenonquery()方法,可以一次執行多條sql語句。
❸ oracle 查詢的sql語句特別慢,是什麼原因,是or特別慢嗎,用什麼優化,急急急!!!
把查詢計劃的內容發出來,你這一大堆代碼誰能看出來啥啊。看你的代碼這么長,條件那麼多,語句用了函數,很多低效的or,not in等操作,另外還用了group by,order by,左右連接等等,如果表數據量很大的話,你這個語句性能不好是預料中的事情。如果你這條語句無法優化,建議從調整表結構角度考慮
❹ oracle sql 查詢我使用自已寫的函數查詢很快,加了函數做條件就很慢是為什麼
慢是因為
對於 幾十萬條記錄左右,
你那個 test(a) 函數, 需要執行 很多次, 每行執行一次, 然後判斷 LIKE '%123%'
至於:
select a,b, test(a) c from demo; --只這樣查很快
我估計你使用的是 PLSQL Developer。
查詢的時候, 默認是查詢第一頁, 因此很快。
因為只顯示少部分行。
例如一頁20行的話, 那麼也就執行你那個函數 20次。
❺ oracle資料庫運行sql很卡很慢很頓,看等待事件都是cursor:pin s on x,這是啥
詳解cursor: pin S wait on X等待事件 『cursor: pin * events』等待事件 該類等待事件一般是為了pin相關的子游標 『Cursor: pin S on X』 最常見的等待事件, 進程為了共享操作例如執行pin游標而以SHRD S mode申請mutex, 但是未立即獲得。原因是該游標被其他進程以EXCL X mode 持有了。 實際該 cursor: pin S wait on X等待事件往往是由於其他因素誘發的。Mutex爭用僅僅是問題的症狀,但根本原因需要Database Consultant 進一步挖掘。 下面我們列出一些已知的常見案例, 在這些例子中可以看到 我上面提到的 Mutex的爭用僅僅是偽爭用: 過多的子游標 High Version Counts 過多的子游標版本Version Count可能導致Mutex 爭用,一般一個SQL的Version Count不要高於500。 檢查High Version Count很簡單, 在AWR里就有SQL ordered by High Version Count,也可以寫SQL查V$SQL、V$SQLAREA 昂貴的X$、V$視圖查詢 一些對於V$、X$視圖的查詢,需要訪問X$KGL*之類的fixed table,可能觸發Mutex爭用。 Mutex持有者得不到CPU Mutex持有者若得不到足夠的CPU片可能一直阻塞他人,直到它拿到需要的CPU。 這種情況可能由於OS操作系統的實際情況或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。 已經被KILLED的SESSION仍持有Mutex 當session正持有Mutex,而其對應的Process被強制KILL掉, 則直到PMON徹底清理掉該Dead Process並釋放Mutex,其他session才能不再等待。 診斷該類問題,最好能檢查PMON的TRACE。 當然也存在部分BUG會導致PMON清理過程非常慢。 舉例來說,bug 9312879描述了一種場景:PMON 需要獲得某個Mutex以便清理某個dead process,但是該Mutex又被其他進程持有,則PMON甚至無法開始真正清理並釋放Mutex。 如果自己搞不定可以找ASKMACLEAN專業ORACLE優化團隊成員幫您搞定!
❻ oracle資料庫執行sql很慢怎麼回事
一條sql突然執行變慢,耗時9秒,應用是不能改的,只能從資料庫方面下手解決
步驟思路:
1:查看sql是否走索引
2:查看索引是否失效
3:hint 強制走索引(只是用來查看hint狀態下,查詢是否更改,應用是不能改的)
4:收集該表所有信息(包括索引)
5:分析該表所有信息(包括索引)
6:再次執行並查看
注意:哪個用戶執行較慢,就用哪個用戶進行操作,這樣才准確
❼ 求助各位大俠,關於plsql連接oracle 慢
1、你在伺服器上用plsql連接沒有問題
說明:第一不是伺服器問題,第二不是plsql軟體問題
2、你在自己電腦上連接sql正常
說明:不是網路問題
3、但是你在你自己的電腦上連接伺服器上的oracle有問題
個人認為應該從一下兩個方面找原因
第一:你的plsql版本和你在伺服器上測試時候用的版本是否一致
第二:你本地的oracle客戶端版本和伺服器上的版本是否一致
第三:你本地的tns文件和伺服器上的tns文件是否一致
我沒有遇到過這樣的問題,但是如果我遇到了也就這個思路了!