兩類提問與心態
作者公司同時擁有 Oracle 與 SQL Server。常見提問:
- 「教我用 Oracle?」→ 禮貌推託,實則需投入大量時間。
- 「SQL Server 有問題,Oracle 怎麼處理?」→ 具體問題可助一臂之力,但若泛泛詢問「資料庫太大怎麼辦」,則無法給出良方。
作者嘗試寫總結文件卻因耗時太久作罷。本文針對企業級系統管理員關心的架構層面差異進行探討。
核心差異:鎖機制與讀寫阻塞
企業級系統需支援高併發多用戶。SQL Server 採「讀者-阻塞-寫入者」機制,微軟宣稱防止「髒讀」。實則是效能低下的藉口,類似 Sun 當年堅持 64 位不必要。
超市買果汁比喻:
- SQL Server:你站在貨架前猶豫,我身後想買酸葡萄汁,必須等你決定拿走或放回才能看貨架。即使你最後不買(Rollback),我白等一場。
- Oracle:你猶豫時,我仍可自由查看貨架上的所有果汁,打電話諮詢家人意見。只有你真正拿走並結帳,我才看不到那瓶;但在此之前,我的業務完全不受影響。
Oracle 採多版本並發控制 (MVCC) ,讀取者不阻塞寫入者,寫入者不阻塞讀取者。企業系統對同一範圍資料頻繁併發更新且大量查詢時,SQL Server 機制會導致系統停擺,這在企業級不可接受。
其他架構級痛點
- 記憶體不足導致鎖升級
- 無讀操作一致性支援,可能回傳錯誤資料
- DBCC 等耗時維護任務防止效能惡化
- 「自我調整」資料庫常妨礙 DBA 管控
- 縱使 TPC 基準測試優異,實際擴展性仍不足
這些源於產品基因,非終端用戶可輕易改變。雖有緩解手段,無法根治。兩平台差異巨大,問題根源更迥異。