關於SQL SERVER高併發解決方案

  如今你們都比較關心的問題就是在多用戶高併發的狀況下,如何開發系統,這對咱們程序員來講,確實是值得研究,最近找工做面試時也常常被問到,其實我早有去關心和了解這類問題,但一直沒有總結一下,致使面試時沒法很完整全面的回答,因此今天我專門總結概況了一下關於SQL SERVER高併發解決方案,但願能幫助你們,如有不對以外,還請及時告之,謝謝!程序員

SQL SERVER高併發解決方案主要是從如下幾個方面:web

1.SQL語句優化:面試

  A.儘量的精確查詢條件及查詢字段,縮小查詢範圍(包括使用分頁查詢);服務器

  B.查詢條件中儘量少用:like,(not)in,(not)is null,order by,distinct,count(*),!=,<>;併發

  C.不要對查詢的字段進行函數運算,函數

    如:aa. substring('aa123',1,2)='aa',而應該是:'aa123' like 'aa%'; ---應用到了索引高併發

      bb. 'aa'+'123'='aa123',而應該是:'aa'=left('aa123',2)性能

  D.判斷數據存在,不要使用TOP 1,而應該是:EXITS優化

  E.對於複雜SQL查詢,可直接使用SQL存儲過程或創建視圖(視圖不可太複雜);spa

  F.儘量的少用遊標,觸發器;

2.表設計優化:

  A.縱向分割表設計,將表按照某種原則(可按照字段讀寫頻率來設計)設計成相對應的幾個表,之間採用主(外)鍵關聯查詢;

  B.橫向分割表設計,將表中的數據按照使用價值(好比:只用只用到近3個月的有效數據)來進行數據轉移備份,以減小表的數據量;

  C.表數據物理存放分區設計,將表中的數據按照某種規則創建物理表分區來存儲,以下降硬盤的IO負擔;

  D.創建適當的索引(彙集索引與非彙集索引);

3.事務設置優化:

  事務隔離級別有:(隔離級別做用於事務中,而鎖做用於每條SQL語句上)

隔離級別

髒讀

不可重複讀取

幻像

說明

 產生或等同對應的鎖

未提交讀(read uncommitted)

若是其餘事務更新,無論是否提交,當即執行

 NOLOCK

提交讀(read committed默認)

讀取提交過的數據。若是其餘事務更新沒提交,則等待

 HOLDLOCK

可重複讀(repeatable read)

查詢期間,不容許其餘事務update

 HOLDLOCK

可串行讀(serializable)

查詢期間,不容許其餘事務insertdelet

 HOLDLOCK

    A.事務隔離原則:共享讀,排它寫,即表示:在執行查詢時,若對數據一致性要求很高時,可採用可重複讀(repeatable read)隔離級別,若沒有嚴格要求,則可建議使用未提交讀(read uncommitted)隔離級別;

4.服務器硬件優化:

  A.服務器內存,硬盤等核心硬件性能固然越強越好;

  B.購買多臺服務器並創建集羣,以實現利用多個計算機進行並行計算從而得到很高的計算速度,也能夠用多個計算機作備份,從而使得任何一個機器壞了整個系統仍是能正常運行;

C.在多臺服務器創建DB鏡像同步,並實現讀寫分離,即:除了指定的一臺或幾臺服務器具備容許更新之外,其他的服務器均只做爲數據鏡像同步,不能更新,僅供查詢;

相關文章
相關標籤/搜索