天地(常州)自動化股份有限公司 馬汝超
?
Sql Server數據庫優(yōu)化技術方案
天地(常州)自動化股份有限公司 馬汝超
【摘要】本文主要探討了提高SQL Server數據庫性能用到的一些數據庫優(yōu)化技術,其中包括物理布局、處理器關聯、內存匹配、表和索引分區(qū)和數據壓縮等。
【關鍵詞】SQL Server;性能;優(yōu)化
隨著全球信息體系和網絡智能化的發(fā)展,信息資源日益成為重要的生產要素,而快速處理這些日益遞增的龐大數據,必然要充分運用數據庫技術。SQL Server作為企業(yè)級數據庫在實際應用中發(fā)揮著重要作用。但數據庫的響應速度在其使用過程中影響著整個數據庫系統(tǒng)乃至其上層應用系統(tǒng)的性能,這對數據庫有了更高的性能要求。因此如何運行數據庫優(yōu)化技術來提高其性能是一個重要的課題。
數據庫文件的物理布局直接影響到數據庫管理系統(tǒng)的I/O性能。在數據庫使用過程中,往往遇到計算機CPU占用率低但數據庫性能差的情況發(fā)生,此問題主要原因往往來源于磁盤I/O瓶頸。因為CPU處理速度遠遠高于磁盤I/O的速度,當進行大量數據查詢等操作時,處理器要從負載過重的物理磁盤中讀取數據,此時要排隊等待磁盤子系統(tǒng)中未決數據請求響應,從而引起上述低性能情況的發(fā)生。因此合理安排數據庫文件的物理布局至關重要。
Sql Server數據庫由主數據文件(.mdf)、輔助文件(.ndf)以及事務日志文件(.ldf)組成,并存儲在物理磁盤或磁盤陣列邏輯單元(LUN)中。為了使系統(tǒng)能更快的運行,應將數據文件和日志文件放到單獨或專用的物理LUN上,將很少使用的數據保存在較慢的物理LUN上。另外Tempdb作為速度最快的動態(tài)數據庫,應將其主數據文件和日志文件放置在專用或快速I/O子系統(tǒng)中以得到好的性能。
處理器關聯將數據庫線程運行在指定的處理器上,通過消除重新加載不同處理器之間的線程遷移活動,來提高數據庫系統(tǒng)性能。關于處理器關聯Sql Server提供了關聯掩碼和關聯I/O掩碼兩種配置選項,其主要目的是為了將數據庫實例限制在處理器子集上運行。關聯掩碼選項用于動態(tài)控制CPU關聯,可以按需啟動和關閉用于在數據庫中綁定進程線程的CPU計劃程序。但當服務器運行條件改變時,可能需要重新調整關聯掩碼配置。關聯I/O掩碼選項將數據庫磁盤 I/O與指定的CPU子集綁定。在高端數據庫聯機事務處理環(huán)境中,此擴展可以提高數據庫線程執(zhí)行I/O的性能。如果數據庫在專用服務器上運行,建議允許數據庫使用所有處理器以確保獲得最佳性能。
由于訪問內存數據的速度比磁盤I/O子系統(tǒng)的速度快很多,高效使用內存資源將對數據庫系統(tǒng)性能產生很大影響。由于系統(tǒng)內存資源有限,過高占用內存必然會導致操作系統(tǒng)和其他關鍵應用服務內存不足的現象發(fā)生。過少占用內存,將導致操作系統(tǒng)開始將頁面錯誤移動到物理磁盤,從而增加磁盤I/O以及CPU資源的開銷。
SQL Server提供了最小服務器內存和最大服務器內存選項來控制數據庫內存使用許可。數據庫服務進程從啟動開始其運行內存根據需要逐步增長,一旦內存使用量超過最小內存設定值,數據庫將不會釋放任何低于該量的內存。最大服務器內存則設置內存上限,它會阻止數據庫占用過多內存。數據庫用戶在配置相關內存時,需要考慮操作系統(tǒng)和其他關鍵應用服務要有足夠的內存。在滿足這一前提下,讓數據庫使用盡可能多的內存,并保證內存使用數量的穩(wěn)定性。
通常我們建立數據庫表時,往往將表數據存放在一個文件里。但當這些表或數據庫達到一定規(guī)模時,就難以進行數據庫維護、備份還原等操作。為了解決超大表的使用與維護問題,數據庫引入了分區(qū)技術。分區(qū)是一種物理數據庫設計技術,主要是將大型的對象分成更小的塊,其主要目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。
分區(qū)的基本單位是行,但必須在單個數據庫內進行操作。使用分區(qū)時,一張表的數據會被拆分成多個小文件,并按照指定的規(guī)則分放到不同的文件組單元中,還可以把這些小文件放在不同的磁盤中供多個處理器并行處理。當對分區(qū)表數據進行查詢等操作時,分區(qū)表將被視為單個邏輯實體,對數據庫用戶來講和訪問普通表沒什么差別。
Sql Server數據庫提供了數據壓縮功能,并且啟用數據壓縮時無須修改應用程序。數據壓縮可有效減少數據的占用空間和讀寫相同數據花費的I/O等,以有效緩解I/O壓力。但由于數據在讀寫時需要壓縮和解壓縮,因此會消耗一定的CPU資源,但不代表在相同負載下,啟用數據壓縮會導致CPU使用率變高,某些操作會因為數據頁數量的減少而降低CPU的消耗。
Sql Server數據庫可壓縮對象有:存儲為堆的整個表、存儲為聚集索引的整個表、整個非聚集索引、整個索引視圖、已分區(qū)表和已分區(qū)索引等。對于已分區(qū)表或索引,可為每個分區(qū)配置壓縮選項。
提高SQL Server數據庫性能,需要考慮多種因素。合理安排數據庫文件物理布局,可以有效減輕磁盤I/O子系統(tǒng)的負擔,建議將數據庫主數據文件放在由快速磁盤構成的物理LUN上,Tempdb文件放在快速I/O子系統(tǒng)中。合理設置或調整處理器關聯以及內存匹配,但要避免產生負面影響。對數據庫中大型對象應創(chuàng)建分區(qū),有助于數據庫維護以及實現多處理器并行處理。數據壓縮可以用來提高I/O性能,但不要過度的增加處理器負擔。
參考文獻
[1]Ann Bachrach, Daniel Yu, Darmadi Komo,等. SQL Server 2012新功能簡介白皮書,2012.
[2][美]Adam Jorgensen Steven Wort.等.SQL Server 2012管理高級教程[M].宋沄劍,曹仰杰,譯.北京:清華大學出版社,2013.
[3]衛(wèi)琳.SQL Server2012數據庫應用與開發(fā)教程[M].北京:清華大學出版社,2014.
[4][美]Paul Atkinson Robert Vieira.SQL Server2012編程入門經典[M].王軍,牛志玲,譯.北京:清華大學出版社,2013.
馬汝超(1985-),男,河南商丘人,中國礦業(yè)大學本科畢業(yè),軟件工程師,現供職于天地(常州)自動化股份有限公司,研究方向:從事軟件開發(fā)應用工作。
作者簡介: