性能分析—查詢運行慢的緣由(SQLServer2008寶典)

影響查詢語句執行性能的常見因素數據庫

1.網絡通訊的速度較慢或者網絡通訊不穩定。性能優化

2.數據庫服務器的內存不足,或者沒有足夠的內存供SQL Server使用。服務器

3.Select的語句設計不合理。網絡

4.數據庫結構的設計不合理,致使數據庫中存在大量重複數據。函數

5.沒有建立索引或者索引的設計不合理。性能

6.沒有建立有效的索引視圖。學習

7.索引列上缺乏有用的統計信息或者統計信息過時。優化

8.缺乏有效的分區設計設計

如何定位致使查詢運行慢的緣由3d

1.首先能夠判斷影響性能的因素是否與查詢語句相關,仍是因爲數據庫服務器的硬件配置形成的。

2.若是肯定影響性能的因素與查詢語句相關,則可使用SQL Server profile對SQL Server進行跟蹤,經過對跟蹤數據的分析,肯定執行時間較長或佔用系統資源較多的查詢語句。

3.在肯定了影響數據庫性能的查詢語句後,能夠經過顯示計劃來了解執行查詢語句的過程,經過對查詢語句執行過程的分析,或者經過SQLServer數據庫引擎優化顧問來分析查詢語句能夠優化的地方。(參照SqlServer2008學習筆記:平常維護、深刻管理、性能優化.pdf的第5章)

4.判斷是否使用了有效的統計信息。SQLServer能夠自動統計表中各列上值的分佈狀況,定時根據表中數據的狀況更新統計信息,有助於提升查詢語句的執行效率。

5.確認表的索引設計是否合理。有效的使用和設計索引能夠大大提升查詢效率。(參照SqlServer2008學習筆記:平常維護、深刻管理、性能優化.pdf的第5章)

6.對於數據量很大的表,能夠考慮對錶進行分區,將表中的數據分散在不一樣的分區中,從而縮小查詢數據的範圍,提升查詢效率。(數據分區,參照第19章介紹)。

Select語句優化

在Select語句中應該儘量不返回多餘的數據,須要從行和列兩方面進行優化,控制儘可能少的輸出數據。

分區技術的分類

能夠將大型表拆分紅更小的單個的表,也能夠將表放置在不一樣的磁盤驅動器上,從而實現分區技術。

1.硬件分區:能夠經過增長冗餘的硬件設備,將數據庫存儲和查詢任務分配到不一樣的硬件設備上,構建高效的數據庫硬件體系結構。

2.水平分區:水平分區將表分紅多個表,每一個表中包含的數據列數相同,只是將原來的結果集以行的單位進行了拆分。例如,按照時間進行分區也是一種經常使用的分區方法。

3.垂直分區:垂直分區也是將表分紅多個表,單每一個表包含的行數相同,只是將原表的結果集以列進行拆分。對於包含列數較多的大型表而言,若是須要常常訪問其中的幾列數據,則能夠對其進行垂直分區,從而減小分區表中數據的數量,提升查詢效率。

分區表技術解析:對於大型表而言,它的索引數據量也會變得很大,僅依靠建立索引來優化查詢是不夠的。分區能夠將數據細分到不一樣的區域中,使每一個區域的數據更少、更易維護。在分區表上建立的索引頁會體如今各個分區中,從而減小了分區索引所須要維護的數據量,更好的提升查詢的效率。如今數據庫服務器中一般會配置多個CPU,在分區表上執行查詢語句時,每一個CPU能夠獨立地對每一個分區中的數據進行查詢,而後再將結果集合並。所以,在配置多個CPU的數據庫服務器上,對大型表進行分區能更好的利用系統的硬件資源,提升數據庫的工做效率。

分區表採用水平分區技術,將數據按某種規則劃分紅不一樣的區域,保存在不一樣的文件組中。一般在同時知足下面兩種狀況時須要使用分區表。

1.表中已經存在大量的數據,或者預計表中將會保存大量的數據。

2.不能按預期對錶中的數據執行查詢或更新。例如,對當前月份的數據主要執行insert、update、delete等操做,而對之前月份的數據主要執行Select操做,此時能夠按照月份建立分區表。

事例:以信用卡刷卡消費爲例介紹建立和使用分區表的方法。由於銀行的信用卡擁有大量的客戶,他們在刷卡消費時,會產生大量的數據,保存在銀行的後臺數據庫中,若是不對數據庫進行任何優化,在對這些數據進行查詢和統計時將很是的慢,同時會佔用大量的系統資源。

解決方案:建立數據庫Credit,而後建立表Consume2009,用於保存2009年全部信用卡刷卡消費的數據。能夠在分區表上建立索引,稱爲分區索引。在對錶或索引分區前,須要建立兩個數據庫對象,即分區函數和分區方案。

分區函數用於定義根據指定的列(分區依據列)的值將表或索引中的記錄映射到不一樣的分區中。例如:在表Consume能夠把ConsumeDate列做爲分區依據列,將不一樣月份的消費記錄保存在不一樣的分區中。分區方案將分區函數指定的每個分區映射到文件組上。

肯定分區依據列和分區數

在建立分區表和分區索引以前,要肯定分區的方案,首先須要肯定分區的依據和分區數量,例如,按照信用卡消費的月份對數據庫Credit中的表Consume2009進行分區,能夠將Consume2009表分爲12個區。

Sql Server規定一張表最多隻能有1000個分區。

建立文件組

在建立分區表以前,須要建立數據庫的文件組。建議建立與分區數量相同的文件組,在條件容許的狀況下,能夠將不一樣的文件組放置在不一樣的磁盤上,從而提升查詢大型表的效率。可使用 ALTER DATABASE <數據庫名> ADD FILEGROUP <文件組名> 語句建立文件組名

以上面的Credit數據庫爲例。

ALTER DATABASE Credit ADD FILEGROUP filegroup1

ALTER DATABASE Credit ADD FILEGROUP filegroup2

ALTER DATABASE Credit ADD FILEGROUP filegroup3

ALTER DATABASE Credit ADD FILEGROUP filegroup4

ALTER DATABASE Credit ADD FILEGROUP filegroup5

ALTER DATABASE Credit ADD FILEGROUP filegroup6

ALTER DATABASE Credit ADD FILEGROUP filegroup7

ALTER DATABASE Credit ADD FILEGROUP filegroup8

ALTER DATABASE Credit ADD FILEGROUP filegroup9

ALTER DATABASE Credit ADD FILEGROUP filegroup10

ALTER DATABASE Credit ADD FILEGROUP filegroup11

ALTER DATABASE Credit ADD FILEGROUP filegroup12

文件組建立好以後就能夠向文件組中添加文件

clip_image001

其餘文件組中添加文件依次類推。

執行完上面的腳本後,打開數據庫Credit的屬性對話框,在"選擇頁"列表中選擇"文件",能夠查看到新建的12文件以及他們所屬的文件組。

分區技術應用場景

在須要使用分區技術的數據庫中,數據庫管理員的主要任務是合理規劃和建立分區表,並建立分區索引。可使用嚮導建立分區表,但一般建議使用CREATE PARTITION FUNCTION 命令和CREATE PARTITION SCHEME命令來建立分區函數和分區方案,由於這樣還能夠往後重複使用。在維護採用分區技術的數據庫時,有時須要對分區執行合併和分區操做

使用CREATE PARTITION FUNCTION語句建立分區函數

分區函數的功能是指定如何對錶或索引進行分區,它能夠將數據映射到一組分區上。在分區函數中須要指定分區數量、分區依據列和每一個分區的分區依據列範圍。分區依據只能是一列。可使用CREATE PARTITION FUNCTION 語句建立建立分區函數,其基本語法結構以下:

clip_image002

語法語句解析:

AS RANGE 子句指定在對錶中數據進行分區時,數據庫引擎按升序從左向右排序的狀況下,每一個指定的分區邊界值屬於左側分區仍是右側分區。

FOR VALUES子句指定分區的邊界間隔值。

在CREATE PARTITION FUNCTION語句中不須要指定具體的分區列,分區列由CREATE TABLE 語句或CREATE INDEX 語句在建立分區表或分區索引時定義。換言之,分區函數只是定義了分區的方法,此方法具體應用在哪一個表的哪一個列上,則須要在建立表或索引時指定。例如:建立分區函數Consume2009PartitionFunction1,按銷售月份對銷售數據進行分區,語句內容以下

clip_image003

使用DROP PARTITION FUNCTION 語句刪除分區函數

可使用DROP PARTITION FUNCTION 語句刪除分區函數,其基本語法結構以下:

DROP PARTITION FUNCTION <函數名>,注意只有在沒有分區方案使用該分區函數時,才能對其進行刪除。

使用CREATE PARTITION SCHEME 語句建立分區方案

建立分區函數後,必須將其與指定的分區方案向關聯。分區方案用於指定分區對應的文件組,即便多個分區同時位於一個文件組,也須要分別爲每一個分區定義所屬的文件組。

可使用CREATE PARTITION SCHEME 語句建立分區方案,具體語句結構以下:

CREATE PARTITION SCHEME <分區方案名>

AS PARTITION <分區函數名>

TO(文件組名1,文件組名2……)

例如:爲分區函數Consume2009PartitionFunction1指定對應的文件組,可使用下面的語句。

CREATE PARTITINO SCHEME Consume2009PartitionScheme1

AS PARTITION Consume2009PartitionFunction1

TO (FileGroup1,FileGroup2,FileGroup3,FileGroup4,FileGroup5,FileGroup6,FileGroup7,FileGroup8,FileGroup9,FileGroup10,FileGroup11,FileGroup12)

使用DROP PARTITION SCHEME 語句刪除分區方案

相關文章
相關標籤/搜索