在SQL SERVER數(shù)據(jù)庫(kù)運(yùn)行的過(guò)程中,有時(shí)會(huì)出現(xiàn)在多用戶(hù)高并發(fā)的情況,那么在這種情況下,如何開(kāi)發(fā)系統(tǒng)呢,中培偉業(yè)《SQL Server 2014高級(jí)管理與性能調(diào)優(yōu)最佳實(shí)踐》培訓(xùn)專(zhuān)家秦老師對(duì)此進(jìn)行了回答。秦老師指出,SQL SERVER高并發(fā)解決方案主要有以下幾個(gè)方案。
1.SQL語(yǔ)句優(yōu)化。該優(yōu)化應(yīng)該注意以下問(wèn)題:
A.盡可能的精確查詢(xún)條件及查詢(xún)字段,縮小查詢(xún)范圍(包括使用分頁(yè)查詢(xún));
B.查詢(xún)條件中盡可能少用特定語(yǔ)句;
C.不要對(duì)查詢(xún)的字段進(jìn)行函數(shù)運(yùn)算,
D.判斷數(shù)據(jù)存在,不要使用TOP 1,而應(yīng)該是:EXITS
E.對(duì)于復(fù)雜SQL查詢(xún),可直接使用SQL存儲(chǔ)過(guò)程或建立視圖(視圖不可太復(fù)雜);
F.盡可能的少用游標(biāo),觸發(fā)器;
2.表設(shè)計(jì)優(yōu)化。該優(yōu)化應(yīng)該注意以下問(wèn)題:
A.橫向分割表設(shè)計(jì),將表按照某種原則(可按照字段讀寫(xiě)頻率來(lái)設(shè)計(jì))設(shè)計(jì)成相對(duì)應(yīng)的幾個(gè)表,之間采用主(外)鍵關(guān)聯(lián);
B.縱向分割表設(shè)計(jì),將表中的數(shù)據(jù)按照使用價(jià)值(比如:只用只用到近3個(gè)月的有效數(shù)據(jù))來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)移備份,以減少表的數(shù)據(jù)量;
C.表數(shù)據(jù)物理存放分區(qū)設(shè)計(jì),將表中的數(shù)據(jù)按照某種規(guī)則建立物理分區(qū)來(lái)存儲(chǔ),以降低硬盤(pán)的IO負(fù)擔(dān);
D.建立適當(dāng)?shù)乃饕?聚集索引與非聚集索引);
3.事務(wù)設(shè)置優(yōu)化。該優(yōu)化應(yīng)該注意以下問(wèn)題:
事務(wù)隔離原則:共享讀,排它寫(xiě),即表示:在執(zhí)行查詢(xún)時(shí),若對(duì)數(shù)據(jù)一致性要求很高時(shí),可采用可重復(fù)讀(repeatable read)隔離級(jí)別,若沒(méi)有嚴(yán)格要求,則可建議使用未提交讀(read uncommitted)隔離級(jí)別;
4.服務(wù)器硬件優(yōu)化。該優(yōu)化應(yīng)該注意以下問(wèn)題:
A.服務(wù)器內(nèi)存,硬盤(pán)等核心硬件性能當(dāng)然越強(qiáng)越好;
B.購(gòu)買(mǎi)多臺(tái)服務(wù)器并建立集群,以實(shí)現(xiàn)利用多個(gè)計(jì)算機(jī)進(jìn)行并行計(jì)算從而獲得很高的計(jì)算速度,也可以用多個(gè)計(jì)算機(jī)做備份,從而使得任何一個(gè)機(jī)器壞了整個(gè)系統(tǒng)還是能正常運(yùn)行;
C.在多臺(tái)服務(wù)器建立DB鏡像同步,并實(shí)現(xiàn)讀寫(xiě)分離,即:除了指定的一臺(tái)或幾臺(tái)服務(wù)器具有允許更新以外,其余的服務(wù)器均只作為數(shù)據(jù)鏡像同步,不能更新,僅供查詢(xún)。