SQL Serve2000 r資料庫效能優化技術

iSQlServer發表於2010-03-21

SQL Serve2000 r資料庫效能優化技術

設計1個應用系統似乎並不難,但是要想使系統達到最優化的效能並不是一件容易的事。在開發工具、資料庫設計、應
用程式的結構、查詢設計、介面選擇等方面有多種選擇,這取決於特定的應用需求以及開發隊伍的技能。本文以SQL
Server為例,從後臺資料庫的角度討論應用程式效能優化技巧,並且給出了一些有益的建議。

1 資料庫設計
  要在良好的SQL Server方案中實現最優的效能,最關鍵的是要有1個很好的資料庫設計方案。在實際工作中,許多SQL
Server方案往往是由於資料庫設計得不好導致效能很差。所以,要實現良好的資料庫設計就必須考慮這些問題。
1.1 邏輯庫規範化問題
  一般來說,邏輯資料庫設計會滿足規範化的前3級標準:
  1.第1規範:沒有重複的組或多值的列。
  2.第2規範:每個非關鍵欄位必須依賴於主關鍵字,不能依賴於1個組合式主關鍵字的某些組成部分。
  3.第3規範:1個非關鍵欄位不能依賴於另1個非關鍵欄位。
  遵守這些規則的設計會產生較少的列和更多的表,因而也就減少了資料冗餘,也減少了用於儲存資料的頁。但表關係
也許需要通過複雜的合併來處理,這樣會降低系統的效能。某種程度上的非規範化可以改善系統的效能,非規範化過程可
以根據效能方面不同的考慮用多種不同的方法進行,但以下方法經實踐驗證往往能提高效能。
  1.如果規範化設計產生了許多4路或更多路合併關係,就可以考慮在資料庫實體(表)中加入重複屬性(列)。
  2.常用的計算欄位(如總計、最大值等)可以考慮儲存到資料庫實體中。
  比如某一個專案的計劃管理系統中有計劃表,其欄位為:專案編號、年初計劃、二次計劃、調整計劃、補列計劃…,
而計劃總數(年初計劃+二次計劃+調整計劃+補列計劃)是使用者經常需要在查詢和報表中用到的,在表的記錄量很大時,有必
要把計劃總數作為1個獨立的欄位加入到表中。這裡可以採用觸發器以在客戶端保持資料的一致性。
  3.重新定義實體以減少外部屬性資料或行資料的開支。相應的非規範化型別是:
  (1)把1個實體(表)分割成2個表(把所有的屬性分成2組)。這樣就把頻繁被訪問的資料同較少被訪問的資料分開了。這
種方法要求在每個表中複製首要關鍵字。這樣產生的設計有利於並行處理,並將產生列數較少的表。
  (2)把1個實體(表)分割成2個表(把所有的行分成2組)。這種方法適用於那些將包含大量資料的實體(表)。在應用中常
要保留歷史記錄,但是歷史記錄很少用到。因此可以把頻繁被訪問的資料同較少被訪問的歷史資料分開。而且如果資料行
是作為子集被邏輯工作組(部門、銷售分割槽、地理區域等)訪問的,那麼這種方法也是很有好處的。
1.2 生成物理資料庫
  要想正確選擇基本物理實現策略,必須懂得資料庫訪問格式和硬體資源的操作特點,主要是記憶體和磁碟子系統I/O。這
是一個範圍廣泛的話題,但以下的準則可能會有所幫助。
  1.與每個表列相關的資料型別應該反映資料所需的最小儲存空間,特別是對於被索引的列更是如此。比如能使用
smallint型別就不要用integer型別,這樣索引欄位可以被更快地讀取,而且可以在1個資料頁上放置更多的資料行,因而
也就減少了I/O操作。
  2.把1個表放在某個物理裝置上,再通過SQL Server段把它的不分簇索引放在1個不同的物理裝置上,這樣能提高性
能。尤其是系統採用了多個智慧型磁碟控制器和資料分離技術的情況下,這樣做的好處更加明顯。
  3.用SQL Server段把一個頻繁使用的大表分割開,並放在2個單獨的智慧型磁碟控制器的資料庫裝置上,這樣也可以提
高效能。因為有多個磁頭在查詢,所以資料分離也能提高效能。
  4.用SQL Server段把文字或影像列的資料存放在1個單獨的物理裝置上可以提高效能。1個專用的智慧型的控制器能進
一步提高效能。

2 與SQL Server相關的硬體系統
  與SQL Server有關的硬體設計包括系統處理器、記憶體、磁碟子系統和網路,這4個部分基本上構成了硬體平臺,
Windows NT和SQL Server執行於其上。
2.1 系統處理器(CPU)
  根據自己的具體需要確定CPU結構的過程就是估計在硬體平臺上佔用CPU的工作量的過程。從以往的經驗看,CPU配置最
少應是1個80586/100處理器。如果只有2~3個使用者,這就足夠了,但如果打算支援更多的使用者和關鍵應用,推薦採用
Pentium Pro或PⅡ級CPU。

2.2 記憶體(RAM)
  為SQL Server方案確定合適的記憶體設定對於實現良好的效能是至關重要的。SQL Server用記憶體做過程快取、資料和索
引項快取、靜態伺服器開支和設定開支。SQL Server最多能利用2GB虛擬記憶體,這也是最大的設定值。還有一點必須考慮的
是Windows NT和它的所有相關的服務也要佔用記憶體。
  Windows NT為每個WIN32應用程式提供了4GB的虛擬地址空間。這個虛擬地址空間由Windows NT虛擬記憶體管理器(VMM)映
射到實體記憶體上,在某些硬體平臺上可以達到4GB。SQL Server應用程式只知道虛擬地址,所以不能直接訪問實體記憶體,這
個訪問是由VMM控制的。Windows NT允許產生超出可用的實體記憶體的虛擬地址空間,這樣當給SQL Server分配的虛擬記憶體多
於可用的實體記憶體時,會降低SQL Server的效能。
  這些地址空間是專門為SQL Server系統設定的,所以如果在同一硬體平臺上還有其它軟體(如檔案和列印共享,應用程
序服務等)在執行,那麼應該考慮到它們也佔用一部分記憶體。一般來說硬體平臺至少要配置32MB的記憶體,其中,Windows NT
至少要佔用16MB。1個簡單的法則是,給每一個併發的使用者增加100KB的記憶體。例如,如果有100個併發的使用者,則至少需要
32MB+100使用者*100KB=42MB記憶體,實際的使用數量還需要根據執行的實際情況調整。可以說,提高記憶體是提高系統效能的
最經濟的途徑。
2.3 磁碟子系統
  設計1個好的磁碟I/O系統是實現良好的SQL Server方案的一個很重要的方面。這裡討論的磁碟子系統至少有1個磁碟控
制裝置和1個或多個硬碟單元,還有對磁碟設定和檔案系統的考慮。智慧型SCSI-2磁碟控制器或磁碟組控制器是不錯的選
擇,其特點如下:
  (1)控制器快取記憶體。
  (2)匯流排主機板上有處理器,可以減少對系統CPU的中斷。
  (3)非同步讀寫支援。
  (4)32位RAID支援。
  (5)快速SCSI—2驅動。
  (6)超前讀快取記憶體(至少1個磁軌)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-630027/,如需轉載,請註明出處,否則將追究法律責任。

相關文章