ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 分布式数据库查询中 DRIVING_SITE 的疑问

分布式数据库查询中 DRIVING_SITE 的疑问

原创 Linux操作系统 作者:tolywang 时间:2012-07-19 09:04:18 0 删除 编辑

SELECT /*+DRIVING_SITE(departments)*/  * 
 FROM     employees,     [url=mailto:departments@rsite]departments@rsite[/url]
 WHERE   employees.department_id = departments.department_id;   


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-735977/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13107134