現在大家都比較關心的問題就是在多使用者高併發的情況下,如何開發系統,這對我們程式設計師來說,確實是值得研究,最近找工作面試時也經常被問到,其實我早有去關心和了解這類問題,但一直沒有總結一下,導致面試時無法很完整全面的回答,所以今天我專門總結概況了一下關於sql server高併發解決方案,希望能幫助大家,若有不對之外,還請及時告之,謝謝!
sql server高併發解決方案主要是從以下幾個方面:
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儲存過程或建立檢視(檢視不可太複雜);
f.盡可能的少用游標,觸發器;
2.表設計優化:
a.縱向分割表設計,將表按照某種原則(可按照字段讀寫頻率來設計)設計成相對應的幾個表,之間採用主(外)鍵關聯查詢;
b.橫向分割表設計,將表中的資料按照使用價值(比如:只用只用到近3個月的有效資料)來進行資料轉移備份,以減少表的資料量;
c.表資料物理存放分割槽設計,將表中的資料按照某種規則建立物理表分割槽來儲存,以降低硬碟的io負擔;
d.建立適當的索引(聚集索引與非聚集索引);
3.事務設定優化:
事務隔離級別有:(隔離級別作用於事務中,而鎖作用於每條sql語句上)
隔離級別
髒讀不可重複讀取
幻像說明
產生或等同對應的鎖
未提交讀(read uncommitted)是是
是如果其他事務更新,不管是否提交,立即執行
nolock
提交讀(read committed預設)否是
是讀取提交過的資料。如果其他事務更新沒提交,則等待
holdlock
可重複讀(repeatable read)否否
是查詢期間,不允許其他事務update
holdlock
可序列讀(serializable)否否
否查詢期間,不允許其他事務insert或delet
holdlock
a.事務隔離原則:共享讀,排它寫,即表示:在執行查詢時,若對資料一致性要求很高時,可採用可重複讀(repeatable read)隔離級別,若沒有嚴格要求,則可建議使用未提交讀(read uncommitted)隔離級別;
4.伺服器硬體優化:
a.伺服器記憶體,硬碟等核心硬體效能當然越強越好;
b.購買多台伺服器並建立集群,以實現利用多個計算機進行平行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何乙個機器壞了整個系統還是能正常執行;
c.在多台伺服器建立db映象同步,並實現讀寫分離,即:除了指定的一台或幾台伺服器具有允許更新以外,其餘的伺服器均只作為資料映象同步,不能更新,僅供查詢;
分類:
sql
關於SQL SERVER高併發解決方案
現在大家都比較關心的問題就是在多使用者高併發的情況下,如何開發系統,這對我們程式設計師來說,確實是值得研究,最近找工作面試時也經常被問到,其實我早有去關心和了解這類問題,但一直沒有總結一下,導致面試時無法很完整全面的回答,所以今天我專門總結概況了一下關於sql server高併發解決方案,希望能幫助...
關於SQL SERVER高併發解決方案
現在大家都比較關心的問題就是在多使用者高併發的情況下,如何開發系統,這對我們程式設計師來說,確實是值得研究,最近找工作面試時也經常被問到,其實我早有去關心和了解這類問題,但一直沒有總結一下,導致面試時無法很完整全面的回答,所以今天我專門總結概況了一下關於sql server高併發解決方案,希望能幫助...
Sqlserver 高併發和大資料儲存方案
隨著使用者的日益遞增,日活和峰值的暴漲,資料庫處理效能面臨著巨大的挑戰。下面分享下對實際10萬 峰值的平台的資料庫優化方案。與大家一起討論,互相學習提高!案例 遊戲平台.1 解決高併發 當客戶端連線數達到峰值的時候,服務端對連線的維護與處理這裡暫時不做討論。當多個寫請求到資料庫的時候,這時候需要對多...