分散式資料庫查詢中 DRIVING_SITE 的疑問

tolywang發表於2011-12-08
[i=s] 本帖最後由 tolywang 於 2011-12-8 15:56 編輯

Oracle 10.2.0.4 ,   Oracle 9.2.0.8   


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,     [url=mailto:departments@rsite]departments@rsite[/url]
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 在分散式查詢最佳化中還是有用的  。  


問題 :

很多時候我們做分散式資料庫查詢的時候 ,   基本都是本地遠端都是大表,   較少用到一個是很小的配置表,   一個是所謂的detail 大表,  
那麼在都是幾千萬的大表的情況下 ,   不管是本地傳輸到遠端 ,    還是遠端傳輸到本地 ,   表的 rows 傳輸都是一個大的資源消耗 ,  
這時我們一般會選擇預設的 ,  即不使用hint,  讓遠端錶行傳輸到本地執行,   直接出結果,   省了使用Hint最後還需要從遠端傳結果這一
步 .  

1.   確認一下,   不使用任何hint 的情況下 ,  一定是遠端的表資料行傳輸到本地來聯合執行  ?  還是說有 cost 比較來決定,  如果是
     cost 比較決定,   好像也不現實 ,   遠端表的rows 傳輸過來 ,  統計資訊沒有過來,   咋整  ?    還有,   難不成Oracle 把可能的情況
     都試一遍 ,  " 都在本地 " 或"  都在遠端 "  分別計算Cost  ?  但這成本太高 .   嘗試使用SQL trace 來跟蹤查詢SQL ,  沒有看到
     有用的資訊  。


2.   遠端傳輸到本地的 rows 是遠端整張表的所有行 ?  他們都臨時一次性儲存在本地庫的 data buffer cache  ?  還是其他地方 ?




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-712963/,如需轉載,請註明出處,否則將追究法律責任。

相關文章