一次通過DB_LINK抽取資料過慢原因分析
問題1、
核心資料庫使用的共享伺服器模式,導致異常等待事件
virtual circuit status
非常巨大。
ORACLE 官方描述如下:
"virtual circuit wait" - for when the shared server is
blocked waiting on a specific
circuit / message
檢查核心資料庫確實使用了共享模式,修改提取資料的DB_LINK,使用獨佔的模式連線來避免這個問題
問題2、
分析發現儲存過程都呼叫了函式Get_Rate,而Get_Rate大量迴圈的呼叫語句,我測試的時候呼叫測試未300W次,並且Get_Rate函式使用遊標取出資料進行迴圈,而引用的表T_CHG_RATE來自遠端,這樣大量迴圈呼叫在加上遠端網路延遲,等待時間也就加長。
和智軟商量後決定建立Get_Rate到本地,並且加入判斷如果為人民幣就不呼叫此函式。此遊標經過調整資料返回速度大大減少,幾個小時的返回時間減少到5分鐘左右。
問題 3、
分析發現,很多儲存過程,遊標每返回一行資料就會做一條判斷,而判斷的表確是放通過DB_LINK進行呼叫,如果遊標返回很大量的行,那網路的延遲就會越發的明顯。
建議建立判斷表在本地加快速度,同時考慮更好的遊標資料抽取方式,不實用迴圈,待改進。
create or replace procedure Bulk_Test2(p_array_size in number)
as
l_tablename dbms_sql。Varchar2_Table;
cursor c is select table_name from user_tables;
begin
open c;
loop
fetch c bulk collect into l_tablename limit p_array_size;
forall i in 1..l_tablename count
insert into t3 values (l_tablename(i));
exit when c%notfound;
end loop;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-719224/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過DB_LINK按照分割槽表抽取資料
- 記一次開啟資料庫慢原因分析過程資料庫
- 【LISTENER】Oracle通過監聽連線緩慢分析Oracle
- 通過資料分析那些宜居的城市
- 一次資料庫響應慢分析資料庫
- 如何通過資料分析,提升MMO遊戲次日留存遊戲
- 如果通過流資料實現實時分析?
- 通過vmstat的簡單分析資料庫操作資料庫
- 通過重啟資料庫,完成了一次優化資料庫優化
- Update時間過慢效能分析
- 一次資料庫硬解析的分析全過程資料庫
- 資料庫——慢sql的原因資料庫SQL
- 一次HASH JION過慢優化(2)優化
- 一次HASH JION過慢優化(1)優化
- 資料庫變慢的處理過程資料庫
- 通過shell抓取html資料HTML
- 通過java程式抽取日誌中的sql語句JavaSQL
- 排查Mysql突然變慢的一次過程MySql
- 資料需求分析過程
- 資料庫查詢慢的原因資料庫
- 資料刪除慢的原因排查
- 大資料:通過裝置行為分析降低支付風險大資料
- 一次HTTP通訊過程HTTP
- expdp透過db_link遠端匯出
- 如何通過統計分析工具做好APP的資料分析和運營APP
- 通過Vue的過濾器實現資料的資料脫敏Vue過濾器
- 2.3 通過DBCA建立資料庫資料庫
- indexedDB 通過索引查詢資料Index索引
- 通過Web API查詢資料WebAPI
- 通過duplicat恢復資料庫資料庫
- 通過SQLLDR匯入LOB資料SQL
- 一次sqlldr匯入慢的解決過程SQL
- MySQL、Oracle後設資料抽取分析MySqlOracle
- 資料庫的一次資料恢復過程資料庫資料恢復
- awr中DB CPU過低的原因分析
- 一次HIS系統卡頓原因排查過程分享
- iOS Jailbreak Principles - Undecimus 分析(二)通過 String XREF 定位核心資料iOSAI
- 一次通過stream複製解決資料單向複製的案例