今天重庆ORACLE社区有位哥们提问,为啥索引重建(alter index rebuil)之后,SQL变慢了,以前15秒就可以完成,现在要2分多种,于是问他要了执行计划
- SQL> set autotrace traceonly
- SQL> SELECT SEQ_PAY_CUSTOMEROPER.Nextval,u.ID,'admin',1,t.LAST_LOGIN_TIME,t.LOGIN_TIMES,t.LOGIN_IP
- 2 FROM EFB_USER_MOVE@WODBLINK t,T_PAY_USERINFO u
- 3 WHERE t.ID = u.ID AND u.ID > 3500000 AND u.ID<400000
- AND t.ID > 3500000 AND t.ID <= 4000000
- 4 /
-
- 123832 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 4225832519
-
- -----------------------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
- -----------------------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 77 | 5 (0)| 00:00:01 | | |
- | 1 | SEQUENCE | SEQ_PAY_CUSTOMEROPER | | | | | | |
- | 2 | NESTED LOOPS | | 1 | 77 | 5 (0)| 00:00:01 | | |
- |* 3 | INDEX RANGE SCAN| PK_T_PAY_USERINFO | 1 | 6 | 3 (0)| 00:00:01 | | |
- | 4 | REMOTE | EFB_USER_MOVE | 1 | 71 | 2 (0)| 00:00:01 | WODBL~ | R->S |
- -----------------------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 3 - access("U"."ID">3500000 AND "U"."ID"<=4000000)
-
- Remote SQL Information (identified by operation id):
- ----------------------------------------------------
-
- 4 - SELECT "ID","LAST_LOGIN_TIME","LOGIN_TIMES","LOGIN_IP" FROM "EFB_USER_MOVE" "T" WHERE
- "ID"<=4000000 AND "ID">3500000 AND "ID"=:1 (accessing 'WODBLINK' )
-
-
-
- Statistics
- ----------------------------------------------------------
- 86691 recursive calls
- 18753 db block gets
- 14781 consistent gets
- 0 physical reads
- 4035364 redo size
- 5163224 bytes sent via SQL*Net to client
- 91297 bytes received via SQL*Net from client
- 8257 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 123832 rows processed
这个SQL太简单了,可以说是我见过的SQL中最简单的,执行计划也非常简单。
这个SQL要返回123832条记录,然后执行计划走的是nested loops,问题显而易见了,原因是表EFB_USER_MOVE是通过DBLINK过来的,本地无法得知表EFB_USER_MOVE的统计信息(也就是无法知道它有多少行),所以CBO默认给它设置为1行,但是返回了123832条记录,所以给这个SQL加了个HINT
- SELECT /*+ full(u)*/ SEQ_PAY_CUSTOMEROPER.Nextval,
- u.ID,
- 'admin',
- 1,
- t.LAST_LOGIN_TIME,
- t.LOGIN_TIMES,
- t.LOGIN_IP
- FROM EFB_USER_MOVE@WODBLINK t, T_PAY_USERINFO u
- WHERE t.ID = u.ID
- AND u.ID > 3500000
- AND u.ID < 400000
- AND t.ID > 3500000
- AND t.ID <= 4000000;
这样SQL就能几秒跑完了,这里的sequence还值得注意,因为要返回123832条记录,如果sequence上的cache很小,也必然导致SQL慢,建议设置cache到1000
总结:遇到SQL语句中要引用DBLINK,需要特别留意,通常这样的SQL需要DBA添加HINT,其实这只是DBLINK中一个需要注意的地方,还有地方就是 有时候需要添加
driving_site 这个HINT来优化,具体就不多说了。
分享到:
相关推荐
ORACLE社区有位哥们提问,为啥索引重建(alter index rebuil)之后,SQL变慢了,以前15秒可以完成,现在要2分多种,于是问他要了执行计划 SQL> set autotrace traceonly SQL> SELECT SEQ_PAY_CUSTOMEROPER....
本文详细描述了在oracle10g或11g中使用dblink访问sql server,使用oracle的透明网关来访问异构的数据库,方便一些习惯使用oracle的开发人员操作sql server数据库
"通过Oracle的透明网关和DBLink直接取SQL Server表中的数据" 本文主要讲述了如何使用Oracle的透明网关和DBLink直接从SQL Server数据库中提取数据。首先,需要安装Oracle的透明网关软件win64_11gR2_gateways,接着...
oracle通过ODBC建立dblink访问SqlServer数据库配置
dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink dblink
oracle通过odbc方式,连接到sqlserver数据库。比透明网关方式更加简单
详细解绍SQL Server2005 DBLINK链接Oracle 9i详解,含有企业管理器下完整的截图过程,及DBLink查询语法介绍
在SQL Server 2005 建立DBLink 到 Oracle10g 的详细过程。以及遇到的问题解决办法。
DBLINk
oracle 存储过程 函数 dblink 绝对对工作和平时学习有价值的资料。针对个人具体情况做修改即可使用
Oracle数据库下创建dblink的sql语句,附带解释说明
在执行dblink sql操作时会同步两端数据库的scn, 使scn小的库和scn大的库一致。极端情况下可能会导致scn小的数据库的scn被耗尽,造成该数据库无法正常工作.因此在进行sql审核时dblink sql语句也是非常重要一个关注项...
使用 DBlink 连接 Oracle 和 MySQL 数据库 Oracle 通过 DBlink 连接 MySQL 搭建过程是一个复杂的过程,需要安装和配置多个组件,包括 unixODBC、mysql-connector-odbc 和 Oracle 环境变量。本文将详细说明这个过程...
DBlink的应用 DBlink的应用 DBlink的应用
Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置 Oracle之dblink的配置
oralce创建dblink的三种方法,修改ora文件、sql创建、通过service创建
本文实例讲述了SQLSERVER简单创建DBLINK操作远程服务器数据库的方法。分享给大家供大家参考,具体如下: --配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='...
详细描述dblink创建过程,每一个步骤都有图示,且如何操作。并列举比较常见的异常问题及解决方法。
dblink+同义词
sqlserver关于表中存在text字段的导入oracle