自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實現(xiàn)SQL Server性能優(yōu)化并不難!

數(shù)據(jù)庫 SQL Server
以下的文章主要描述的是SQL Server性能優(yōu)化,我在一網(wǎng)站找到一個關于SQL Server性能優(yōu)化的資料,拿出來供大家分享。

文章主要描述的是SQL Server性能優(yōu)化,是SQL Server是企業(yè)信息的核心,其應用水平的高低對企業(yè)管理水平有直接的影響。所以選擇了一個高性能的數(shù)據(jù)庫產品不預示著就有一個好的數(shù)據(jù)庫應用系統(tǒng),如果數(shù)據(jù)庫系統(tǒng)設計不合理。

不僅會增加客戶端和服務器端程序的編程和維護的難度,而且還會影響系統(tǒng)實際運行的性能。

一般來講,在一個管理信息系統(tǒng)的分析、設計、測試和試運行階段,因為數(shù)據(jù)量較小,設計人員和測試人員往往只注意到功能的實現(xiàn),而很少會注意到性能的不足,等到系統(tǒng)投入實際運行一段時間后.

才發(fā)現(xiàn)系統(tǒng)的性能在降低,這時再來考慮提高系統(tǒng)性能則要花費更多的人力、物力,而其最終結果就是給整個系統(tǒng)又打上了一個補丁,所以設計階段是SQL Server性能優(yōu)化的重點。本文以SQL Server數(shù)據(jù)庫為例,從以下幾個方面討論如何實現(xiàn)數(shù)據(jù)庫系統(tǒng)的性能優(yōu)化。

 

數(shù)據(jù)庫設計

實現(xiàn)SQL Server性能優(yōu)化,首先要有一個好的數(shù)據(jù)庫設計方案。在實際工作中,許多SQL Server方案往往是由于數(shù)據(jù)庫設計得不好導致性能很差。實現(xiàn)良好的數(shù)據(jù)庫設計必須考慮這些問題:

1. 邏輯數(shù)據(jù)庫規(guī)范化問題

一般來說,邏輯數(shù)據(jù)庫設計會滿足規(guī)范化的前3級標準:

第1規(guī)范:沒有重復的組或多值的列;

第2規(guī)范: 每個非關鍵字段必須依賴于主關鍵字,不能依賴于一個組合式主關鍵字的某些組成部分;

第3規(guī)范: 一個非關鍵字段不能依賴于另一個非關鍵字段。

遵守這些規(guī)則的數(shù)據(jù)庫設計會產生較少的列和更多的表,因而也就減少了數(shù)據(jù)冗余,也減少了用于存儲數(shù)據(jù)的頁。

2. 生成物理數(shù)據(jù)庫

要想正確選擇基本物理實現(xiàn)策略,必須了解和利用好數(shù)據(jù)庫訪問格式和硬件資源的操作特點,特別是內存和磁盤子系統(tǒng)i/o。以下是一些常用技巧:

與每個表列相關的數(shù)據(jù)類型應該反映數(shù)據(jù)所需的最小存儲空間,特別是對于被索引的列更是如此。比如能使用smallint類型就不要用integer類型,這樣索引字段可以被更快地讀取,而且可以在一個數(shù)據(jù)頁上放置更多的數(shù)據(jù)行,因而也就減少了i/o操作。

把一個表放在某個物理設備上,再通過SQL Server的段把它的不分簇索引放在一個不同的物理設備上,這樣能提高性能。尤其是系統(tǒng)采用了多個智能型磁盤控制器和數(shù)據(jù)分離技術的情況下,這樣做的好處更加明顯。

用SQL Server段把一個頻繁使用的大表分割開,并放在多個單獨的智能型磁盤控制器的數(shù)據(jù)庫設備上,這樣也可以提高性能。因為有多個磁頭在查找,所以數(shù)據(jù)分離也能提高性能。

用SQL Server段把文本或圖像列的數(shù)據(jù)存放在一個單獨的物理設備上可以提高性能。一個專用的智能型的控制器能進一步提高性能。

應用系統(tǒng)設計

在應用系統(tǒng)的設計中,要著重考慮以下幾點:

1.合理使用索引

索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下:

在經(jīng)常進行連接,但是沒有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由SQL Server性能優(yōu)化器自動生成索引;在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引;在條件表達式中經(jīng)常用到的不同值較多的列上建立索引,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。 如果待排序的列有多個,可以在這些列上建立復合索引。

2. 避免或簡化排序

應當盡量簡化或避免對大型表進行重復的排序。當能夠利用索引自動以適當?shù)拇涡虍a生輸出時,優(yōu)化器就避免了排序這個步驟。為了避免不必要的排序,就要正確地增建索引,合理地合并數(shù)據(jù)庫表(盡管有時可能影響表的規(guī)范化,但相對于效率的提高是值得的)。如果排序不可避免,那么應當試圖簡化它,如縮小排序的列的范圍等。

3.消除對大型表行數(shù)據(jù)的順序存取

在嵌套查詢中,表的順序存取對查詢效率可能產生致命的影響。我們有時可以使用并集來避免順序存取。盡管也許在所有的檢查列上都有索引,但某些形式的where子句會強迫優(yōu)化器使用順序存取,這一點也應注意。

4. 避免相關子查詢

如果一個列同時在主查詢和where子句中出現(xiàn),很可能當主查詢中的列值改變之后,子查詢必須重新查詢一次。而且查詢嵌套層次越多,效率越低,因此應當盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。

5.避免困難的正規(guī)表達式

mathes和like關鍵字支持通配符匹配,但這種匹配特別耗時。例如:select * from customer where zipcode like “98_ _ _”,即使在zipcode字段上已建立了索引,在這種情況下也還是采用順序掃描的方式。如果把語句改為:select * from customer where zipcode >“98000”,在執(zhí)行查詢時就會利用索引來查詢,顯然會大大提高速度。

6.使用臨時表加速查詢

把表的一個子集進行排序并創(chuàng)建臨時表,有時能加速查詢。它有助于避免多重排序操作,而且在其他方面還能簡化優(yōu)化器的工作。臨時表中的行要比主表中的行少,而且物理順序就是所要求的順序,減少了磁盤i/o,所以查詢工作量可以得到大幅減少。但要注意,臨時表創(chuàng)建后不會反映主表的修改。在主表中數(shù)據(jù)頻繁修改的情況下,注意不要丟失數(shù)據(jù)。

操作系統(tǒng)相關SQL Server性能優(yōu)化

操作系統(tǒng)性能的好壞直接影響數(shù)據(jù)庫的使用性能,如果操作系統(tǒng)存在問題,如cpu過載、過度內存交換、磁盤i/o瓶頸等,在這種情況下,單純進行數(shù)據(jù)庫內部性能調整是不會改善系統(tǒng)性能的。我們可以通過windows nt的系統(tǒng)監(jiān)視器(system monitor)來監(jiān)控各種設備,發(fā)現(xiàn)性能瓶頸。

cpu 一種常見的性能問題就是缺乏處理能力。系統(tǒng)的處理能力是由系統(tǒng)的cpu數(shù)量、類型和速度決定的。如果系統(tǒng)沒有足夠的cpu處理能力,它就不能足夠快地處理事務以滿足需要。我們可以使用system monitor確定cpu的使用率,如果以75%或更高的速率長時間運行,就可能碰到了cpu瓶頸問題,這時應該升級cpu。但是升級前必須監(jiān)視系統(tǒng)的其他特性,如果是因為sql語句效率非常低,優(yōu)化語句就有助于解決較低的cpu利用率。而當確定需要更強的處理能力,可以添加cpu或者用更快的cpu 替換。

內存 SQL Server可使用的內存量是SQL Server性能最關鍵因素之一。而內存同i/o子系統(tǒng)的關系也是一個非常重要的因素。例如,在i/o操作頻繁的系統(tǒng)中,SQL Server用來緩存數(shù)據(jù)的可用內存越多,必須執(zhí)行的物理i/o也就越少。這是因為數(shù)據(jù)將從數(shù)據(jù)緩存中讀取而不是從磁盤讀取。同樣,內存量的不足會引起明顯的磁盤讀寫瓶頸,因為系統(tǒng)緩存能力不足會引起更多的物理磁盤i/o。

可以利用system monitor檢查SQL Server的buffer cache hit ratio計數(shù)器,如果命中率經(jīng)常低于90%,就應該添加更多的內存。

i/o子系統(tǒng) 由i/o子系統(tǒng)發(fā)生的瓶頸問題是數(shù)據(jù)庫系統(tǒng)可能遇到的最常見的同硬件有關的問題。配置很差的i/o子系統(tǒng)引起性能問題的嚴重程度僅次于編寫很差的sql語句。i/o子系統(tǒng)問題是這樣產生的,一個磁盤驅動器能夠執(zhí)行的i/o操作是有限的,一般一個普通的磁盤驅動器每秒只能處理85次i/o操作,如果磁盤驅動器超載,到這些磁盤驅動器的i/o操作就要排隊,sql的i/o延遲將很長。這可能會使鎖持續(xù)的時間更長,或者使線程在等待資源的過程中保持空閑狀態(tài),其結果就是整個系統(tǒng)的性能受到影響。

解決i/o子系統(tǒng)有關的問題也許是最容易的,多數(shù)情況下,增加磁盤驅動器就可以解決這個性能問題。

當然,影響性能的因素很多,而應用又各不相同,找出一個通用的SQL Server性能優(yōu)化方案是很困難的,只能是在系統(tǒng)開發(fā)和維護的過程中針對運行的具體情況,不斷加以調整。

【編輯推薦】

  1. SQL Server置疑的出現(xiàn)的原因,現(xiàn)象與破解
  2. 創(chuàng)建SQL Server全文檢索的2方案
  3. 實現(xiàn)SQL Server 2000全文索引遷移步驟
  4. SQL Server全文索引的實例演示
  5. SQL Server全文索引使用四大步驟

 

責任編輯:佚名 來源: csdn.net
相關推薦

2010-06-13 14:39:47

MySQL SQL

2010-07-01 13:29:56

SQL Server數(shù)

2010-07-01 15:26:05

SQL Server

2010-07-08 13:38:42

SQL Server不

2010-06-17 16:59:51

SQL Server身

2010-06-28 11:40:44

SQL Server

2010-07-07 14:53:04

SQL Server數(shù)

2010-06-09 15:15:34

MySQL定時執(zhí)行

2010-06-18 13:25:01

SQL Server查

2010-06-18 11:04:39

SQL Server

2010-06-17 11:02:27

SQL Server

2010-05-17 14:08:18

MySQL 多級同步

2010-05-26 13:03:34

MySQL top n

2010-05-31 14:50:49

MySQL數(shù)據(jù)庫性能

2010-06-13 15:57:57

MySQL 定時數(shù)據(jù)備

2018-04-19 09:02:14

SQL ServerSQL性能優(yōu)化

2010-10-08 10:03:16

2010-05-25 11:33:27

MySQL亂碼

2019-03-11 16:24:04

虛擬機JVMJava

2010-05-17 08:47:08

MySQL 定時數(shù)據(jù)備
點贊
收藏

51CTO技術棧公眾號