作者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
推 grence:如果不在意dirty read,SQL SERVER也有更低層級的lock 02/25 15:15
→ adrianshum:當然在意. 一般大型程式都不可能用 Dirty Read 吧?.. 02/25 16:56
推 trueQoo:dirty read只是 no lock而以...也沒什麼啊~~~ 02/25 17:22
推 grence:只是好奇未 commit前就讀資料不會有dirty read問題嗎? 02/25 19:20
→ adrianshum:Oracle 是會讓你讀到未update 前的樣子, 而不是等 02/25 19:22
推 taicomjp:SQL Server預設是Read Committed 02/26 01:48
推 finalcoffee:MS SQL在where條件後加上with(NOLOCK) 03/28 11:08