1. Sybase的性能調優方式
2. Sybase的鎖機制,事務機制
3. 怎樣提高大表(百萬條記錄)的操作效率(查詢,修改等)
4. Sybase 15.0.2後續版本規劃,有哪些新特性?
5. 怎樣提供Sybase的並發性?
1.鎖機制
全頁鎖(APL),數據頁鎖(DPL),數據行鎖(DOL)
=> 升級表鎖
從左至右:鎖粒度減小,系統開銷增大
2.事務機制
Sybase缺省選擇unchained的事務模式
chained 和 unchained本事對於事務處理無實質影響,我們需要關心的是事務隔離級別。
ISO標准的事務隔離級別共4種:0,1,2,3 Select @@isolation
在程序無法改動的情況下可以使用dbcc pss 查看隔離級別的統計。
在商業關系數據庫管理系統領域中,有兩個陣營分別對應2類並發處理方法。第一個陣營
是基於鎖定構架實現悲觀並發的系統,它支持 SQL-92 標准(ANSI X3.135-1992,美國國家信息
系統標准 — 數據庫語言 — SQL,1992 年 11 月)中定義的四個 ANSI 標准隔離級別 – 這些
系統 Microsoft SQL Server、IBM DB2 和 Sybase Adaptive Server。第二個陣營基於保留事
務啟動時的數據視圖來實現樂觀並發的非標准的事務隔離模式 – 這個陣營中只有一個系統,就
是 Oracle。
兩種模式各有利弊,一般來說後者並發性高,但也有性能開銷和應用限制方面的弱點。
例如Oracle在高並發的環境中,多版本讀一致性不能滿足事務一致性的要求,最終仍要利用鎖數
據的方法(for update)。且無法實現真正意義的事務隔離級別3(serializable)。當其他事務使
用 SERIALIZABLE 訪問已更新頁上的其他行時會導致 ORA-08177:“Can‘t serialize Access
for this transaction.”。解決方法是需要用select .. for update語句手工為讀語句加鎖。
(最終還是要通過read語句去阻塞write語句!)而前者通過降低鎖粒度和語句優化達也可以達
到很高的並發能力。
1.”寫”阻塞”寫”
2.”寫”阻塞”讀” 一般認為實現“寫”不阻塞“讀”的方式稱為髒讀。
3.”讀”阻塞”寫”
隔離級別!!!隔離級別2,3可能出現“讀”阻塞“寫”的情況
例如:隔離級別3以上
IF NOT EXISTS(SELECT * FROM mbfeserialno
WHERE @vs_bankcode = nbkcode AND
lower(@vs_sqnflag) = lower(serialnocode)) (A.檢查序號)
BEGIN
INSERT INTO mbfeserialno ... (序號不存在則新增初始序號)
END UPDATE mbfeserialno
SET serialnoval = serialnoval + 1
WHERE @vs_bankcode = nbkcode AND lower(@vs_sqnflag) = lower(serialnocode)
(B.序號存在則原序號+1)
解決方法:
IF NOT EXISTS(SELECT * FROM mbfeserialno noholdlock
WHERE @vs_bankcode = nbkcode AND
lower(@vs_sqnflag) = lower(serialnocode) ) (A.檢查序號)
1.問題定位: (後者通過添加CPU,內存去解決)
2.鎖競爭處理:
A.sp_object_stats找到競爭表
B.應用表象區分:
1.寫阻塞寫:
鎖粒度的原因:降低表的鎖粒度 例如 APL => DOL
2.寫阻塞讀 3.讀阻塞寫
降低隔離級別或使用noholdlock
C.SQL語句優化
1.對大表綁定高速緩存,開大I/O緩沖池
2.選擇恰當的鎖機制
3.SQL語句優化,建立恰當的索引(考慮寫操作,索引數量不易超過4個)
4.結合臨時表處理大表連接
一般來說,目前的關系型數據庫的索引技術可以確保百萬數量級的表的快速查詢。
千萬以上的表操作可以考慮使用表分區的辦法。
感謝Sybase的老伊支持才能有機會跟深入的接觸sybase,此篇摘錄Sybase的PPT中。