dblink与执行计划

[复制链接]
查看16 | 回复16 | 2013-3-29 13:46:58 | 显示全部楼层 |阅读模式
如果查询里面有dblink,CBO是如何对访问DBLINK的表制定执行计划的?
这样的执行计划是否会不准确。


回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层
all_db_links,v$dblink
需要加hint
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层
看对应的remote sql,然后跑到远程的DB上找到此sql再检查plan是不是有问题,我一般都是这么弄的。。
貌似不能直接检查
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层
dblink一般需要下载到本地,如果remote table很大,那就可能慢了
一般用hint固定,比如use_hash,driving_site等。。。
当然create local_table as...remote. insert local_table as ... remote加了driving_site也没有用。 但是可以考虑在远程表建视图,有时候也可以改变sql写法优化这种sql,详细参考oracle dba 官方文档 tuning distributed query
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层
本帖最后由 demonat 于 2011-11-8 12:47 编辑
谢谢

我这边有个SQL,类似于
select some_column from local_table1,local_table2
where local_table1.column1=local_table2.column1
and exists(

select 1 from remote_table1@dblink,remote_table2@dblink where remote_table1.column1=remote_table2.column1

and local_table1.column1=remote_table1.column1

and exists(

select 1 from local_table3 where remote_table1.column1=local_table3.column1

)

)
执行计划:
| 0 | SELECT STATEMENT|
| 1 | 107 | |18M(1)| 62:52:27
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层

|*1 |FILTER
|
| | | |
|
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层

|*2 | HASH JOIN |
|3763K| 384M| 226M | 44719 (2)| 00:08:57
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层

| 3 |TABLE ACCESS FULL|******** |3763K| 183M||9835 (2)| 00:01:59
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层

| 4 |TABLE ACCESS FULL|******************|3763K| 201M|| 11406 (1)| 00:02:17
回复

使用道具 举报

千问 | 2013-3-29 13:46:58 | 显示全部楼层

| 5 | NESTED LOOPS SEMI |
| 1 | 125 || 5 (0)| 00:00:01
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行