DB Link因 driving_site導致的效能問題
今天接到一個朋友電話, 原來兩個schema 是在一個庫下面, 為 Oracle 9.2.0.8版本,
所以兩個schema 表之間的連線都是本地 , 後來業務及主機效能問題, 將一個
schema 切出去成為一個資料庫, 使用了較新的 Oracle 10g 版本, 原來連線的一些
表就需要使用dblink 來操作了 (dblink 是在10g 庫上) , 結果執行感覺慢很多, 看了
一下, 他們9i, 10g 庫都是有分析的 , 只是9i 分析不是job定期做, 而是手工, 10g 是
自動分析 .
查詢了一些資料 , 發現 dblink執行有兩種方式,一種是在遠端資料庫執行完,
然後結果返回到本地,另一種是把遠端的表資料傳輸到本地,然後在本地執行。
DRIVING_SITE
The DRIVING_SITE hint forces query execution to be done at a different site than that selected
by Oracle. This hint can be used with either rule-based or cost-based optimization.
For example:
SELECT /*+DRIVING_SITE(departments)*/ *
FROM employees,
WHERE employees.department_id = departments.department_id;
If this query is executed without the hint, then rows from departments are sent to
the local site, and the join is executed there. With the hint, the rows from
employees are sent to the remote site, and the query is executed there, returning
the result to the local site.
This hint is useful if you are using distributed query optimization.
DRIVING_SITE 提示強制在和Oracle選擇不同的一端執行語句, 這個Hint可以用在
rule-based及cost-based 最佳化模式下。
如果上面的語句沒有 /*+DRIVING_SITE(departments)*/ 提示, 遠端的表 departments
的行要被傳輸到local site , 在local site 執行連線語句, 如果有這個提示, 那麼本地的
employees 表的行會被傳到遠端site, 查詢在遠端site執行, 然後返回結果到本地, 這個
hint 在分散式查詢最佳化中還是有用的 。
合理使用DRIVING_SITE,可以在分散式查詢中大大減少網路流量。
從他們不慢到慢的變化上可以看出應該和兩方面有關係, 一個是dblink , 還有
一個就是9i 升級到 10g 後執行計劃的變化 , 檢視DBLINK 其實沒有參照物, 因為
原來使用的是同一個庫 , 不存在dblink , 所以可以從執行計劃入手 .
後來加入hint 之後執行正常, 不過還是不建議多用hint , 某個SQL, 選擇將表放在local
端還是remote 端對於語句執行也是有決定作用的 .
-----------------------------------------------------------------------
備註:
insert into會導致driving_site提示 (hint) 無效,那麼可以用一個檢視的辦法解決
問題:在目標端建立一個關於本查詢中無引數的檢視,然後在本地透過dblink
呼叫檢視,這樣先在遠端執行出結果傳輸到本地。
-----------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-712973/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL8.0 view導致的效能問題MySqlView
- SCHEDULER呼叫XDB程式導致效能問題
- 執行計劃的偏差導致的效能問題
- 因為arp 問題導致的vip 故障與解決方案
- 完美的執行計劃導致的效能問題
- Oracle資料庫導致效能問題的可能原因Oracle資料庫
- memlock過低導致的資料庫效能問題資料庫
- 【問題處理】恢復因誤生成PFILE 導致RAC的SPFILE無效的問題
- 從專案管理角度看因防疫導致的孕婦流產問題專案管理
- 因為跨域問題導致的無法讀取 response header跨域Header
- 【RAC】處理因ons導致CPU使用率過高的問題
- 因壞道問題導致的硬碟故障如何進行資料恢復?硬碟資料恢復
- merge語句導致的效能問題緊急優化優化
- 一條insert語句導致的效能問題分析(二)
- 資料庫統計資訊不更新導致的效能問題資料庫
- 優化由直方圖資訊導致的sql效能問題優化直方圖SQL
- 一條insert語句導致的效能問題分析(一)
- 你知道嗎?——ASP.NET的Session會導致的效能問題ASP.NETSession
- 記錄一次因 mysql 欄位取名不規範導致的問題MySql
- TSM配置不好導致備份不正常,從而導致資料庫效能問題資料庫
- ANALYZE導致的阻塞問題分析
- MySQL Flush導致的等待問題MySql
- private內聯網路卡效能不良導致的系統的問題
- 一次因為修改環境變數導致RESIN不能啟動的問題變數
- 高水位線下空閒塊過多導致的SQL效能問題SQL
- 執行計劃中的COLLECTION ITERATOR PICKLER FETCH導致的效能問題
- Oracle 12c因bug導致ORA-04031問題處理過程Oracle
- 因AIX系統目錄許可權問題導致TSM備份失敗AI
- 因為一個小小的Integer問題導致阿里一面沒過,遺憾!阿里
- 克隆ORACLE軟體的導致的問題Oracle
- 壞程式碼導致的效能問題大賞:CPU佔用飆到了900%!
- 從原始碼分析JSONObject因版本差異導致toString格式異常問題原始碼JSONObject
- CAS導致的ABA問題及解決
- golang slice使用不慎導致的問題Golang
- Atlas VPN:2021年全球76%的公司遭遇因技術問題導致的業務中斷
- 因隱藏的個人宏工作簿PERSONAL.xls檔案導致Excel變慢的問題分析Excel
- Oracle優化案例-join列索引缺失導致的sql效能問題(二十六)Oracle優化索引SQL
- Oracle RAC啟動因CTSS導致的異常Oracle