sql server數(shù)據庫優(yōu)化的10多種方法_第1頁
sql server數(shù)據庫優(yōu)化的10多種方法_第2頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、SQL Server數(shù)據庫優(yōu)化的10多種方法巧妙優(yōu)化SQL Server數(shù)據庫的幾種方法,在實際操作中導致查詢速度慢的原因有很多,其中最為常見有以下的幾種:沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程序設計的缺陷)。I/O吞吐量小,形成了瓶頸效應。沒有創(chuàng)建計算列導致查詢不優(yōu)化SQL Server數(shù)據庫。內存不足。網絡速度慢。查詢出的數(shù)據量過大(可以采用多次查詢,其他的方法降低數(shù)據量)。鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷)。sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。返回了不必要的行和列。查詢語句不好,沒有優(yōu)化。可以通過如下方法來優(yōu)化查詢 :1

2、、把數(shù)據、日志、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數(shù)據量(尺寸)越大,提高I/O越重要。2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse)。3、升級硬件。4、根據查詢條件,建立索引,優(yōu)化索引、優(yōu)化SQL Server數(shù)據庫訪問方式,限制結果集的數(shù)據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用字節(jié)數(shù)小的列建索引好(參照索引的創(chuàng)建),不要對有限的幾個值的字段建單一索引如性別字段。5、提高網速。6、擴大服務器的內存,Windows 2000和SQL server 2000能支持4-8G的內存。配

3、置虛擬內存:虛擬內存大小應基于計算機上并發(fā)運行的服務進行配置。運行 Microsoft SQL Server? 2000 時,可考慮將虛擬內存大小設置為計算機中安裝的物理內存的 1.5 倍。如果另外安裝了全文檢索功能,并打算運行 Microsoft 搜索服務以便執(zhí)行全文索引和查詢,可考慮:將虛擬內存大小配置為至少是計算機中安裝的物理內存的 3 倍。將 SQL Server max server memory 服務器配置選項配置為物理內存的 1.5 倍(虛擬內存大小設置的一半)。7、增加服務器 CPU個數(shù);但是必須明白并行處理串行處理更需要資源例如內存。使用并行還是串行程是MsSQL自動評估選擇

4、的。單個任務分解成多個任務,就可以在處理器上運行。例如耽擱查詢的排序、連接、掃描和GROUP BY字句同時執(zhí)行,SQL SERVER根據系統(tǒng)的負載情況決定最優(yōu)的并行等級,復雜的需要消耗大量的CPU的查詢最適合并行處理。但是更新操作Update,Insert, Delete還不能并行處理。8、如果是使用like進行查詢的話,簡單的使用index是不行的,但是全文索引,耗空間。 like a% 使用索引 like %a 不使用索引用 like %a% 查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。對于字段的值很長的建全文索引。9、DB Server 和APPLi

5、cation Server 分離;OLTP和OLAP分離。10、分布式分區(qū)視圖可用于實現(xiàn)數(shù)據庫服務器聯(lián)合體。聯(lián)合體是一組分開管理的服務器,但它們相互協(xié)作分擔系統(tǒng)的處理負荷。這種通過分區(qū)數(shù)據形成數(shù)據庫服務器聯(lián)合體的機制能夠擴大一組服務器,以支持大型的多層 Web 站點的處理需要。有關更多信息,參見設計聯(lián)合數(shù)據庫服務器。(參照SQL幫助文件分區(qū)視圖)在實現(xiàn)分區(qū)視圖之前,必須先水平分區(qū)表。在創(chuàng)建成員表后,在每個成員服務器上定義一個分布式分區(qū)視圖,并且每個視圖具有相同的名稱。這樣,引用分布式分區(qū)視圖名的查詢可以在任何一個成員服務器上運行。系統(tǒng)操作如同每個成員服務器上都有一個原始表的復本一樣,但其實每個

6、服務器上只有一個成員表和一個分布式分區(qū)視圖。數(shù)據的位置對應用程序是透明的。11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收縮數(shù)據和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 設置自動收縮日志.對于大的數(shù)據庫不要設置數(shù)據庫自動增長,它會降低服務器的性能。在T-sql的寫法上有很大的講究,下面列出常見的要點:首先,DBMS處理查詢計劃的過程是這樣的:查詢語句的詞法、語法檢查。將語句提交給DBMS的查詢優(yōu)化器。優(yōu)化器做代數(shù)優(yōu)化和存取路徑的優(yōu)化SQL Server數(shù)據庫。由預編譯模塊生成查詢規(guī)劃。然后在合適的時間提交給系統(tǒng)處理執(zhí)行。最后將執(zhí)行結果

7、返回給用戶其次,看一下SQL SERVER的數(shù)據存放的結構:一個頁面的大小為8K(8060)字節(jié),8個頁面為一個盤區(qū),按照B樹存放。12、Commit和rollback的區(qū)別 Rollback:回滾所有的事物。 Commit:提交當前的事物. 沒有必要在動態(tài)SQL里寫事物,如果要寫請寫在外面如: begin tran exec(s) commit trans 或者將動態(tài)SQL 寫成函數(shù)或者存儲過程。SPAN13、在查詢Select語句中用Where字句限制返回的行數(shù),避免表掃描,如果返回不必要的數(shù)據,浪費了服務器的I/O資源,加重了網絡的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其

8、他的聯(lián)接訪問表,后果嚴重。 HYPERLINK /gohands/article/details/2243300 SQL Server調優(yōu)的五個步驟分類: HYPERLINK /gohands/article/category/73805 數(shù)據庫2008-04-02 09:391175人閱讀 HYPERLINK /gohands/article/details/2243300 l comments 評論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /gohands/article/details/2243300 l report o 舉

9、報 舉報 HYPERLINK /tag/sql%20server t _blank sql server HYPERLINK /tag/%e6%95%b0%e6%8d%ae%e5%ba%93 t _blank 數(shù)據庫 HYPERLINK /tag/%e7%a3%81%e7%9b%98 t _blank 磁盤 HYPERLINK /tag/%e4%bc%98%e5%8c%96 t _blank 優(yōu)化 HYPERLINK /tag/%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96 t _blank 性能優(yōu)化 HYPERLINK /tag/%e5%b7%a5%e4%bd%9c

10、 t _blank 工作步驟1 優(yōu)化應用工作量優(yōu)化應用性能的第一步是優(yōu)化工作量。在該部分調優(yōu)方法論中列出的優(yōu)化步驟能夠解決很多常見的性能和可延展性問題。這些優(yōu)化可以幫助降低由于特殊的設計或低效的實施導致的性能瓶頸影響,并且可以保證系統(tǒng)資源能夠充分和有效利用。例如,解決低效率的查詢計劃或低效率的緩存等問題將會更加有效率地發(fā)揮SQL服務器緩存機制,從而整體上降低I/O操作。 編譯/重新編譯- 數(shù)據庫,CPU確定是否存在顯著的CPU競爭,如果存在,請關注重新編譯次數(shù)多的那些T-SQL語句,它們占用大量CPU資源。如果應用中SQL代碼重新編譯次數(shù)很多,可以考慮下面優(yōu)化方法:評估有關的語句的作用,將數(shù)據

11、修改代碼和數(shù)據定義命令相分離。解決過時的索引統(tǒng)計。使用變量或其他邏輯替代臨時表。微軟忠告:頻繁地編譯/重新編譯會消耗很高的CPU和磁盤I/O資源,會增加整體的工作量競爭。 低效率的查詢計劃-數(shù)據庫,CPU確定是否存在明顯的CPU競爭,如果有,請確定無效率查詢計劃是如何占用過多的cpu資源。是否存在數(shù)據庫模式,應用需求,用戶使用的報表工具,或其它條件促使在生產環(huán)境下執(zhí)行無效率的查詢,使用Hash連接和排序操作的查詢,結果會消耗很高的CPU和I/O。步驟2 減少讀/寫活動一旦你的應用代碼被調優(yōu),接下來達到最佳性能就是減少應用運行時讀寫活動量或I/O,一個最常見的應用代碼錯誤是編寫低效率的數(shù)據查詢操

12、作;查詢返回很多的數(shù)據-太多的列或行-SQLServer會負載很大。無論是應用設計允許用戶創(chuàng)建自己的(通常無效率的),不限定每頁結果的查詢,還是后端代碼使用嵌套查詢,這些查詢會返回很多的數(shù)據(包括用視圖或表值函數(shù)寫的查詢),你的應用做為一個整體可能會訪問更多的遠超過需要的數(shù)據。在一些情況下,檢查完你的應用代碼后,你可能會認識到你的代碼將會返回底層表中的所有數(shù)據,來滿足查詢需要!分析存在的索引和它們維護模式,確定添加索引是否合適,分析數(shù)據庫文件的增長情況會幫你極大減少應用的讀寫活動量,可以釋放寶貴的磁盤資源。 無效率的或缺失的索引-DB I/O確定是否存在明顯的磁盤I/O競爭,如果存在,需要分析

13、缺失或或無效率的索引是如何導致磁盤I/O瓶頸的。DBA們必須評估應用的 SQL代碼保證語句盡可能有效率地執(zhí)行;這項任務通常必需創(chuàng)建索引來最有效地提取數(shù)據。如果應用的SQL代碼發(fā)生變化,訪問不同的表或從目的表選擇更多的/不同的列,當前的索引可能會不起作用。需要分析說明SQL 代碼無效率使用存在的索引或語句正在用表掃描搜集數(shù)據的地方。 磁盤I/O-數(shù)據庫文件的增長-DB I/O確定是否存在明顯的磁盤I/O競爭,如果存在,需要關注頻繁使用擴展段的數(shù)據庫。DBA們應關注在一定的時間窗口內頻繁使用擴展段的數(shù)據庫。當SQL Server增大數(shù)據庫文件時,文件傾向于破碎,操作將非常消耗CPU和I/O。 磁盤

14、I/O-數(shù)據庫文件配置-DB I/O確定是否存在明顯的磁盤I/O競爭,如果存在,請關注配置糟糕的數(shù)據庫文件是如何導致數(shù)據庫內鎖競爭的增加,進而形成資源瓶頸,減少應用之間的競爭。DBA應考察可能導致閂競爭的一些數(shù)據庫文件的配置問題,包括:數(shù)據文件和日志文件配置在同一磁盤設備上。數(shù)據庫文件數(shù)量少于可用的CPU數(shù)量,特別是TempDB數(shù)據庫。數(shù)據庫文件數(shù)量少于可用的磁盤I/O設備數(shù)量。步驟3 減少競爭現(xiàn)在,已經優(yōu)化應用的I/O訪問,下一步要完成的性能優(yōu)化就是確保高度的并發(fā)不會導致對象競爭情況的增加。即使數(shù)據訪問被優(yōu)化了,使用鎖和閂鎖的SQL Server引擎,會同步和保護數(shù)據訪問,在高負載下也會出現(xiàn)

15、阻塞問題。智能的事務控制邏輯,可保證事務不會執(zhí)行過長時間,或者只在適當?shù)脭?shù)據上加鎖,因而其是達到高并發(fā)的關鍵。使用適當?shù)氖聞崭綦x層可保證減少不必要的讀操作阻塞,評估鎖提示的需要可保證鎖的不必要的保持,這些都可以極大提高應用的性能。為了減少或消除閂鎖問題,保證應用不要將DDL和DML的操作混在一起。一旦解決這些問題,你就應該分析你的應用時如何訪問數(shù)據的,以便確定是否可以通過數(shù)據分區(qū)的方式提高應用性能。 阻塞鎖-對象競爭-數(shù)據庫鎖確定是否存在明顯的鎖競爭,如果存在,看看經常出現(xiàn)鎖競爭的數(shù)據庫表,幫助識別故障點和缺失的索引,應用傾向于訪問數(shù)據庫中的某些特定的表多一些。當隔離層設置不正確時,事務會執(zhí)行

16、很長時間,由于涉及到的索引導致不能訪問數(shù)據,處理發(fā)生沖突或發(fā)生阻塞等。許多應用管理員沒有意識到數(shù)據庫遭受阻塞的程度;我們需要分析和發(fā)現(xiàn)由頻繁的短期鎖大量累積而導致的明顯競爭。 阻塞鎖-鎖類型-數(shù)據庫鎖確定是否存在明顯的鎖競爭,如果存在,按照數(shù)據庫分析鎖的類型。某些應用以不同的方式訪問不同的特定數(shù)據庫。其原因可能是不同的開發(fā)人員開發(fā)的代碼不同,或需求不斷變化等等。按照數(shù)據庫顯示不同的SQL Server鎖類型的分析結果,顯示鎖的行為與整體活動時間的比較分析的重要程度,這些將有助于應用程序開發(fā)人員正確地修改他們的應用代碼。 內存緩沖區(qū)閂鎖-數(shù)據庫閂鎖確定是否存在明顯的內存緩沖區(qū)閂鎖競爭,如果存在,

17、很多的內存緩沖區(qū)閂鎖等待是I/O瓶頸和熱頁的跡象。因為內存緩沖區(qū)閂鎖與I/O競爭沒有直接關系,因而這對SQL Server的可用內存數(shù)量是很關鍵的。 內部高速緩存閂鎖競爭- 數(shù)據庫閂鎖確定是否存在明顯的內部高速緩存閂鎖競爭,如果存在,識別出哪里存在大部分競爭。內部高速緩存閂鎖可用在多種不同的情況;可能最常見的例子是內部高速緩存的競爭(不是緩沖池頁),尤其當使用堆,text或兩者同時使用的時候。如果解決LOG和PAGELATCH_UP的競爭后沒有作用,通常將數(shù)據分區(qū)可以很好緩解內部高速緩存閂鎖的競爭。步驟4 解決資源瓶頸到目前為止,你已經確保你的查詢正確地使用了底層的系統(tǒng)資源,并且盡可能有效地訪

18、問數(shù)據?,F(xiàn)在你應該確定是否有資源瓶頸使你的應用慢下來。在應用上你可以做許多調優(yōu)工作,在某些情況下外部因素仍是性能優(yōu)化的最后障礙。這部分調優(yōu)方法描述了特定資源的瓶頸。例如,SQL Server有足夠的內存來支持良好的性能嗎?有竊取SQL Server內存的外部應用程序嗎?你的硬盤性能能足夠支持你的工作量嗎?你的應用能有效率地記錄日志嗎,記錄日志的時間是否需要提高?最后,并行可以幫助你的查詢執(zhí)行更快,還是SQL Server花費更多的時間協(xié)調并發(fā)線程,從而使得并發(fā)帶來更多的阻礙?應該考慮到應用性能的這些方面,可以保證充分利用底層系統(tǒng)資源,并且可以幫助確定哪些硬件需要擴容。 內存壓力-系統(tǒng)內存確定是否存在明顯的內存壓力,如果存在,請分析: 外部的內存壓力可以影響SQL Server的性能。許多DBA和DBA的經理們不明白病毒檢測軟件的配置不當和在一個exchange server上安裝SQL Server所帶來的影響。 SQL Server沒有足夠的內存達到理想的功能。如果SQL Server不能分配給緩存足夠的內存,頁的平均壽命將減少,系統(tǒng)范圍內存分頁交換就會增加。 日志等待確定是否有明顯的日志等待,如果有,分析有多少因素減慢SQL Server記錄日志。步驟5 基線偏離分析毫無疑

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論