作者adrianshum (Alien)
看板Database
标题Re: [问题] Oracle 8i 移转到 SQL 2008
时间Wed Feb 25 14:28:54 2009
※ 引述《Adonisy (堂本瓜一)》之铭言:
: ※ 引述《adrianshum (Alien)》之铭言:
: : 顺便八卦问一问的.
: : 以前工作有试过把 8i 移到好像是Sql2000 吧...
: : 当时发觉有一个 Sql server 做得很不济的事.
: : 就是当有人在 read 某 record 的话, write access
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: : 也会需要等的 (Oracle 则是 read 不会影响其他人
: ^^^^^^^^^^^^^
: : write). 当时令到一些在 oracle 不会出现问题的
: : code 在 sql server 出现 deadlock 的情况.
: : 最新的 sql server 在方面有改善做法吗?
: 一直没这问题啊...
: 读的 share lock是读完就释放 lock
: 除非隔离层级调高....
问题就在於读会有 lock
在 oracle, connection 1 正在读某 table,
connection 2 是能直接 update. 反之亦然,
connection A 在 update 某 table, 未 commit
之前, connect B 能直接读没问题.
但之前的 Sql Server 则是靠类似 reader writer lock
的方法去达成 READ COMMITED 这 isolation level.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 grence:如果不在意dirty read,SQL SERVER也有更低层级的lock 02/25 15:15
2F:→ adrianshum:当然在意. 一般大型程式都不可能用 Dirty Read 吧?.. 02/25 16:56
3F:推 trueQoo:dirty read只是 no lock而以...也没什麽啊~~~ 02/25 17:22
4F:推 grence:只是好奇未 commit前就读资料不会有dirty read问题吗? 02/25 19:20
5F:→ adrianshum:Oracle 是会让你读到未update 前的样子, 而不是等 02/25 19:22
6F:推 taicomjp:SQL Server预设是Read Committed 02/26 01:48
7F:推 finalcoffee:MS SQL在where条件後加上with(NOLOCK) 03/28 11:08