database link产生锁和使用了回滚段的问题
运行环境: win2000 + ORACLE817
问题描述: 使用DBLINK后, SQL的运行效率会慢了
具体SQL如下:
--当前sid=8
SQL> select * from v$lock where sid=8;
未选定行
已用时间: 00: 00: 00.31
SQL> select usn,rssize,xacts from v$rollstat;
USN RSSIZE XACTS
---------- ---------- ----------
0 401408 0
1 4186112 1
2 4186112 0
3 4186112 0
4 4186112 0
5 52420608 0
6 4186112 0
7 4186112 0
已选择8行。
已用时间: 00: 00: 00.94
--运行带DBLINK的SQL
SQL> SELECT COUNT(*) FROM ALL_TABLES@TEST_DB;
COUNT(*)
----------
53
已用时间: 00: 00: 00.56
SQL> select * from v$lock where sid=8;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST
-------- -------- ---------- -- ---------- ---------- ---------- ----------
CTIME BLOCK
---------- ----------
0214C9F0 0214CABC 8 TX 393256 205 6 0
0 0
023895A0 023895B0 8 DX 9 0 4 0
0 0
--产生了TX和DX锁
已用时间: 00: 00: 00.94
SQL> select usn,rssize,xacts from v$rollstat;
USN RSSIZE XACTS
---------- ---------- ----------
0 401408 0
1 4186112 1
2 4186112 0
3 4186112 0
4 4186112 0
5 52420608 0
6 4186112 1
7 4186112 0
已选择8行。
--显示使用回滚段(USN=6)
--再运行带DBLINK的SQL
SQL> SELECT COUNT(*) FROM ALL_TABLES@TEST_DB;
COUNT(*)
----------
53
已用时间: 00: 00: 01.33
可以看到, 运行了带DBLINK的SQL后, 系统产生了TX和DX锁, 并使用了回滚段的资源, 再运行的话, 运行效率也变慢了, 请问这种情况的产生原因是什么? 还有有何解决途径?
使用dblink以后, Oracle使用2 phase commit, 会对远程的数据库持有DX锁. 哪怕是select语句也会持有锁, 开始一个事务.
具体信息, 自己看看Oracle concepts的distributed database的相关概念吧
Wednesday, January 7, 2009
database link产生锁和使用了回滚段的问题
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment