| 場景 | SQL Server (預設) | Oracle (預設) |
|---|---|---|
| Session A 更新列 (未 Commit) | 該列/頁/表加 **排他鎖 (X Lock)** | 該列加 **排他鎖 (TX Lock)**,並在 Undo 保留舊映像 |
| Session B 查詢同一列 | 阻塞 (Shared Lock 與 X Lock 衝突),直到 A Commit/Rollback | 不阻塞,讀取 Undo 中的 **Commit 版本** (讀一致性 / MVCC) |
| Session B 更新同一列 | 阻塞 | 阻塞 (TX Lock 衝突) |
-- 窗口 1: 開啟交易更新
USE pubs; BEGIN TRAN;
UPDATE titles SET price = price * 1.05 WHERE title_id = 'BU2075';
-- 不 Commit
-- 窗口 2: 查詢同表
SELECT title_id, title, price FROM titles ORDER BY title_id;
-- 卡住轉圈,無法返回任何列 (含未更新列),因表級/頁級 S Lock 被 X Lock 阻塞
Oracle 同場景下,查詢瞬間返回舊價格,完全不受更新交易影響。
| 指標 | SQL Server (預設) | Oracle |
|---|---|---|
| 高併發讀寫混合吞吐 | 隨用戶數線性下降,鎖爭用劇增 | 平穩擴展,讀寫完全並行 |
| 死鎖頻率 | 較高 (S/X 鎖升級、頁級鎖) | 極低 (僅行級 TX 鎖,無鎖升級) |
| 長交易影響 | 嚴重阻塞所有讀取 | 僅阻塞同列更新,讀取不受影響 |
| TempDB/Undo 壓力 | 啟用 RCSI 後 TempDB 爆增風險 | Undo Tablespace 自動管理,可設定保留時間 |
鎖模型決定了資料庫的並發天花板。SQL Server 預設鎖基礎模型導致「讀寫互斥」,在高併發混合負載下效能崩塌;Oracle 原生 MVCC 實現「讀寫不阻塞」,是支撐大規模關鍵任務系統的核心架構優勢。SQL Server 2005+ 引入 RCSI/SI 縮小差距,但引入 TempDB 依賴與應用複雜度,仍非原生透明方案。選型時,若業務屬「高併發、混合負載、零停機」、Oracle MVCC 為決策性優勢;若屬「中小規模、單純負載、Windows 生態綁定」、SQL Server 總擁有成本可能更低。