程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 性能優化工具

SQL Server 性能優化工具

編輯:關於SqlServer

數據和工作負荷示例

使用下例說明 SQL Server 性能工具的使用。首先創建下表。

create table testtable (nkey1 int identity, col2 char(300) default 'abc', ckey1 char(1))

接下來,在這個表中填充 10,000 行測試數據。可以為列 nkey1 中所填充的數據創建非聚集索引。可以為列 ckey1 中的數據創建聚集索引,col2 中的數據僅僅是填充內容,將每一行增加 300 字節。

declare @counter int

set @counter = 1

while (@counter <= 2000)

begin

insert testtable (ckey1) values ('a')

insert testtable (ckey1) values ('b')

insert testtable (ckey1) values ('c')

insert testtable (ckey1) values ('d')

insert testtable (ckey1) values ('e')

set @counter = @counter + 1

end

數據庫服務器將進行下面的兩個查詢:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

Profiler

SQL Server Profiler 記錄數據庫服務器中所發生活動的詳細信息。可以配置 Profiler 以便用大量的可配置性能信息監視並記錄在 SQL Server 中執行查詢的一個或多個用戶。可在 Profiler 中記錄的性能信息有:I/O 統計信息、CPU 統計信息、鎖定請求、T-SQL 和 RPC 統計信息、索引和表掃描、警告和引發的錯誤、數據庫對象的創建/除去、連接/斷開、存儲過程操作、游標操作等等。有關 SQL Profiler 可記錄的全部信息,請在 SQL Server Books Online 中搜索字符串“Profiler”。

將 Profiler 信息裝載到 .trc 文件中以便用於 Index Tuning Wizard 中

Profiler 和 Index Tuning Wizard 是強大的工具組合,以幫助數據庫管理員在表中創建適當的索引。Profiler 將查詢所消耗的資源記錄在 .trc 文件中。.trc 文件可以由 Index Tuning Wizard 讀取,Index Tuning Wizard 同時考慮 .trc 信息和數據庫表,然後建議應創建什麼樣的索引。Index Tuning Wizard 可讓管理員選擇是自動創建數據庫的適當索引,調度索引以便在以後自動創建還是產生一個可以在以後查看和執行的 T-SQL 腳本。

以下是分析查詢負荷的步驟:

設置 Profiler

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入此跟蹤的名稱。

選擇 Capture to File:復選框,然後選擇要將 Profiler 信息輸出到其中的 .trc 文件。

單擊 OK。

運行工作負荷

啟動 Query Analyzer(從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Query Analyzer 或者從開始菜單中選擇開始\程序\Microsoft SQL Server 7.0\Query Analyzer)。

連接到 SQL Server 並設定將在其中創建表的當前數據庫。

鍵入或復制以下查詢並將它們粘貼到 Query Analyzer 的查詢窗口:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

按 CTRL+E 執行這兩個查詢。

停止 Profiler

單擊紅色的正方形以停止 Profiler 跟蹤。將 .trc 裝載到 Index Tuning Wizard

從 Profiler 菜單中選擇 Tools\Index Tuning WizardsU 啟動 Index Tuning Wizard。單擊 Next。

選擇要分析的數據庫。單擊 Next。

保持 I have a saved workload file 選項按鈕被選,然後單擊 Next。

選擇 My workload file 選項按鈕,找到用 Profiler 創建的 .trc 文件,然後單擊 Next。

在 Select Tables to Tune 對話框中,選擇需要進行分析的表,然後單擊 Next。

Index Tuning Wizard 將在 Index Recommendations 對話框中指出應創建的索引。單擊 Next。

此向導可讓您選擇是立即創建索引,調度將在以後自動執行的索引創建任務還是創建帶創建索引命令的 T-SQL 腳本。選擇需要的選項,然後單擊 Next。

單擊 Finish。

Index Tuning Wizard 為示例數據庫和工作負荷生成的 T-SQL。

/* Created by:Index Tuning Wizard */

/* Date: 9/7/98 */

/* Time:6:42:00 PM */

/* Server:HENRYLNT2 */

/* Database :test */

/* Workload file :E:\mssql7\Binn\profiler_load.sql */

USE [test]

BEGIN TRANSACTION

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

COMMIT TRANSACTION

Index Tuning Wizard 為示例表和數據所建議的索引就是我們預期的索引。ckey1 只有 5 個唯一值,且每一個值都有 2,000 行。假定其中的一個示例查詢 (select ckey1, col2 from testtable where ckey1 = 'a') 要求根據 ckey1 中的某個值對表進行檢索,那麼在 ckey1 列中創建聚集索引是有意義的。第二個查詢 (select nkey1, col2 from testtable where nkey1 = 5000) 根據列 nkey1 的值提取一行。Nkey1 唯一,且有 10,000 行,因此在該列創建非聚集的索引是有意義的。

Profiler/Index Tuning Wizard 組合在涉及許多表和許多查詢的實際數據庫服務器環境中功能非常強大。當數據庫正在進行典型查詢時,請使用 Profiler 記錄 .trc 文件。然後將 .trc 文件裝載到 Index Tuning Wizard,以確定是否創建了正確的索引。根據 Index Tuning Wizard 中的提示自動生成並調度索引創建作業以便在非尖峰時刻


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。運行。定期運行 Profiler/Index Tuning Wizard(比如每周)以查看數據庫服務器中所執行的查詢是否有較大改動,如果是,則可能需要不同的索引。定期使用 Profiler/Index Tuning Wizard 有助於數據庫管理員在查詢工作負荷改變以及數據庫大小隨著時間而增加的同時,保持 SQL Server 以最佳狀態運行。

將 Profiler 信息加載到 SQL Server 表以進行分析



Profiler 提供的另一個選項是將信息記錄在 SQL Server 表中。完成後,就可以查詢整個表以確定是否有某些查詢消耗了過多資源。

將 Profiler 信息記錄在 SQL Server 表中

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入跟蹤的名稱。



單擊 Capture to Table:復選框,然後選擇要將 Profiler 信息輸出到其中的 SQL Server 表。

單擊 OK。

結束後,單擊紅色的正方形停止 Profiler 跟蹤。

用 Query Analyzer 分析 Profiler 中記錄的信息

在將這些信息記錄到 SQL Server 表中後,可以用 Query Analyzer 計算出系統中的哪些查詢消耗資源最多。這樣,數據庫管理員就可以集中時間改進最需要幫助的查詢。例如,通常用以下查詢分析從 Profiler 記錄到 SQL Server 表中的數據。此查詢檢索數據庫服務器中消耗 CPU 資源最多的頭 3 項。返回讀和寫 I/O 信息以及查詢的持續時間(用毫秒計)。如果用 Profiler 記錄了大量的信息,那麼在這個表中創建索引以加快分析查詢是有意義的。例如,如果 CPU 即將成為分析這個表的一個重要標准,那麼在 CPU 列創建非聚集索引應該是一個不錯的主意。

select top 3 TextData,CPU,Reads,Writes,Duration from profiler_out_table order by cpu desc

有關詳細信息,請在 SQL Server Books Online 中搜索字符串“VIEwing and Analyzing Traces”、“Troubleshooting SQL Server Profiler”、“Tips for Using SQL Server”、“Common SQL Server Profiler ScenariOS”、“Starting SQL Server Profiler”和“Monitoring with SQL Server Profiler”。

Query Analyzer

I/O 統計信息

Query Analyzer 的 Connections Options 對話框 General 選項

卡中提供了一個 Show stats I/O 選項。選擇此復選框可以獲取有關 Query Analyzer 中正在執行的查詢所消耗 I/O 量的信息。

例如,當選擇 Show stats I/O 選項時,查詢“select ckey1, col2 from testtable where ckey1 = 'a'”除返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 382, read-ahead reads 400.

同樣,當選擇 Show stats I/O 選項時,查詢“select nkey1, col2 from testtable where nkey1 = 5000”除了返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 282, read-ahead reads 400.

使用 I/O 統計信息是一種監視查詢調整效果的有效方法。例如,在此示例表中創建 Index Tuning Wizard 在上面所推薦的兩個索引,然後再次運行查詢。

在“select ckey1,col2 from testtable where ckey1 = 'a'”的查詢中,聚集索引改進性能的情況如下所示。假定查詢需要提取該表的 20%,則性能改進應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 91, physical reads 5, read-ahead reads 32.

在“select nkey1,col2 from testtable where nkey1 = 5000”的查詢中,創建非聚集索引對於查詢的性能有著很顯著的影響。假定此查詢只需要從 10,000 行的表中提取一行,那麼用非聚集索引改善性能應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0.

ShowPlan

通過顯示 Query optimizer 正在執行的任務的詳細信息,使用 ShowPlan 可將注意力集中在有問題的 SQL 查詢上。SQL Server 7.0 提供 ShowPlan 的文本版和圖形版。通過用 CTRL+L 執行 SQL 查詢,可以將 Graphical ShowPlan 的輸出顯示在 Query Analyzer 的 Results 窗格中。圖標表示如果查詢已執行,那麼 Query optimizer 應該已執行的操作。箭頭表示查詢的數據流的方向。

將鼠標放置在操作圖標上,可以顯示出各個操作的詳細信息。執行 set showplan_all on 命令可以在基於文本的 ShowPlan 中顯示出等價的信息。如果要跳過操作的詳細信息的顯示,以減少顯示 Query optimizer 操作的基於文本的 ShowPlan 的輸出,可執行命令 set showplan_text on。

數據和工作負荷示例

使用下例說明 SQL Server 性能工具的使用。首先創建下表。

create table testtable (nkey1 int identity, col2 char(300) default 'abc', ckey1 char(1))

接下來,在這個表中填充 10,000 行測試數據。可以為列 nkey1 中所填充的數據創建非聚集索引。可以為列 ckey1 中的數據創建聚集索引,col2 中的數據僅僅是填充內容,將每一行增加 300 字節。

declare @counter int

set @counter = 1

while (@counter <= 2000)

begin

insert testtable (ckey1) values ('a')

insert testtable (ckey1) values ('b')

insert testtable (ckey1) values ('c')

insert testtable (ckey1) values ('d')

insert testtable (ckey1) values ('e')

set @counter = @counter + 1

end

數據庫服務器將進行下面的兩個查詢:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

Profiler

SQL Server Profiler 記錄數據庫服務器中所發生活動的詳細信息。可以配置 Profiler 以便用大量的可配置性能信息監視並記錄在 SQL Server


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。中執行查詢的一個或多個用戶。可在 Profiler 中記錄的性能信息有:I/O 統計信息、CPU 統計信息、鎖定請求、T-SQL 和 RPC 統計信息、索引和表掃描、警告和引發的錯誤、數據庫對象的創建/除去、連接/斷開、存儲過程操作、游標操作等等。有關 SQL Profiler 可記錄的全部信息,請在 SQL Server Books Online 中搜索字符串“Profiler”。

將 Profiler 信息裝載到 .trc 文件中以便用於 Index Tuning Wizard 中

Profiler 和 Index Tuning Wizard 是強大的工具組合,以幫助數據庫管理員在表中創建適當的索引。Profiler 將查詢所消耗的資源記錄在 .trc 文件中。.trc 文件可以由 Index Tuning Wizard 讀取,Index Tuning Wizard 同時考慮 .trc 信息和數據庫表,然後建議應創建什麼樣的索引。Index Tuning Wizard 可讓管理員選擇是自動創建數據庫的適當索引,調度索引以便在以後自動創建還是產生一個可以在以後查看和執行的 T-SQL 腳本。

以下是分析查詢負荷的步驟:

設置 Profiler

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入此跟蹤的名稱。

選擇 Capture to File:復選框,然後選擇要將 Profiler 信息輸出到其中的 .trc 文件。

單擊 OK。

運行工作負荷

啟動 Query Analyzer(從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Query Analyzer 或者從開始菜單中選擇開始\程序\Microsoft SQL Server 7.0\Query Analyzer)。

連接到 SQL Server 並設定將在其中創建表的當前數據庫。



鍵入或復制以下查詢並將它們粘貼到 Query Analyzer 的查詢窗口:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

按 CTRL+E 執行這兩個查詢。 停止 Profiler

單擊紅色的正方形以停止 Profiler 跟蹤。將 .trc 裝載到 Index Tuning Wizard

從 Profiler 菜單中選擇 Tools\Index Tuning WizardsU 啟動 Index Tuning Wizard。單擊 Next。

選擇要分析的數據庫。單擊 Next。

保持 I have a saved workload file 選項按鈕被選,然後單擊 Next。

選擇 My workload file 選項按鈕,找到用 Profiler 創建的 .trc 文件,然後單擊 Next。

在 Select Tables to Tune 對話框中,選擇需要進行分析的表,然後單擊 Next。

Index Tuning Wizard 將在 Index Recommendations 對話框中指出應創建的索引。單擊 Next。

此向導可讓您選擇是立即創建索引,調度將在以後自動執行的索引創建任務還是創建帶創建索引命令的 T-SQL 腳本。選擇需要的選項,然後單擊 Next。

單擊 Finish。

Index Tuning Wizard 為示例數據庫和工作負荷生成的 T-SQL。

/* Created by:Index Tuning Wizard */

/* Date: 9/7/98 */

/* Time:6:42:00 PM */

/* Server:HENRYLNT2 */

/* Database :test */

/* Workload file :E:\mssql7\Binn\profiler_load.sql */

USE [test]

BEGIN TRANSACTION

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

COMMIT TRANSACTION

Index Tuning Wizard 為示例表和數據所建議的索引就是我們預期的索引。ckey1 只有 5 個唯一值,且每一個值都有 2,000 行。假定其中的一個示例查詢 (select ckey1, col2 from testtable where ckey1 = 'a') 要求根據 ckey1 中的某個值對表進行檢索,那麼在 ckey1 列中創建聚集索引是有意義的。第二個查詢 (select nkey1, col2 from testtable where nkey1 = 5000) 根據列 nkey1 的值提取一行。Nkey1 唯一,且有 10,000 行,因此在該列創建非聚集的索引是有意義的。

Profiler/Index Tuning Wizard 組合在涉及許多表和許多查詢的實際數據庫服務器環境中功能非常強大。當數據庫正在進行典型查詢時,請使用 Profiler 記錄 .trc 文件。然後將 .trc 文件裝載到 Index Tuning Wizard,以確定是否創建了正確的索引。根據 Index Tuning Wizard 中的提示自動生成並調度索引創建作業以便在非尖峰時刻運行。定期運行 Profiler/Index Tuning Wizard(比如每周)以查看數據庫服務器中所執行的
查詢是否有較大改動,如果是,則可能需要不同的索引。定期使用 Profiler/Index Tuning Wizard 有助於數據庫管理員在查詢工作負荷改變以及數據庫大小隨著時間而增加的同時,保持 SQL Server 以最佳狀態運行。

將 Profiler 信息加載到 SQL Server 表以進行分析



Profiler 提供的另一個選項是將信息記錄在 SQL Server 表中。完成後,就可以查詢整個表以確定是否有某些查詢消耗了過多資源。



將 Profiler 信息記錄在 SQL Server 表中

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入跟蹤的名稱。

單擊 Capture to Table:復選框,然後選擇要將 Profiler 信息輸出到其中的 SQL Server 表。

單擊 OK。

結束後,單擊紅色的正方形停止 Profiler 跟蹤。

用 Query Analyzer 分析 Profiler 中記錄的信息

在將這些信息記錄到 SQL Server 表中後,可以用 Query Analyzer 計算出系統中的哪些查詢消耗資源最多。這樣,數據庫管理員就可以集中時間改進最需要幫助的查詢。例如,通常用以下查詢分析從 Profiler 記錄到 SQL Server 表中的數據。此查詢檢索數據庫服務器中消耗 CPU 資源最多的頭 3 項。返回讀和寫 I/O 信息以及查詢的持續時間(用毫秒計)。如果用 Profiler 記錄了大量的信息,那麼在這個表中創建索引以加快分析查詢是有意義的。例如,如果 CPU


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。 即將成為分析這個表的一個重要標准,那麼在 CPU 列創建非聚集索引應該是一個不錯的主意。

select top 3 TextData,CPU,Reads,Writes,Duration from profiler_out_table order by cpu desc

有關詳細信息,請在 SQL Server Books Online 中搜索字符串“VIEwing and Analyzing Traces”、“Troubleshooting SQL Server Profiler”、“Tips for Using SQL Server”、“Common SQL Server Profiler ScenariOS”、“Starting SQL Server Profiler”和“Monitoring with SQL Server Profiler”。

Query Analyzer

I/O 統計信息

Query Analyzer 的 Connections Options 對話框 General 選項卡中提供了一個 Show stats I/O 選項。選擇此復選框可以獲取有關 Query Analyzer 中正在執行的查詢所消耗 I/O 量的信息。

例如,當選擇 Show stats I/O 選項時,查詢“select ckey1, col2 from testtable where ckey1 = 'a'”除返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 382, read-ahead reads 400.

同樣,當選擇 Show stats I/O 選項時,查詢“select nkey1, col2 from testtable where nkey1 = 5000”除了返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 282, read-ahead reads 400.

使用 I/O 統計信息是一種監視查詢調整效果的有效方法。例如,在此示例表中創建 Index Tuning Wizard 在上面所推薦的兩個索引,然後再次運行查詢。

在“select ckey1,col2 from testtable where ckey1 = 'a'”的查詢中,聚集索引改進性能的情況如下所示。假定查詢需要提取該表的 20%,則性能改進應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 91, physical reads 5, read-ahead reads 32.

在“select nkey1,col2 from testtable where nkey1 = 5000”的查詢中,創建非聚集索引對於查詢的性能有著很顯著的影響。假定此查詢只需要從 10,000 行的表中提取一行,那麼用非聚集索引改善性能應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 5, physical reads 0

read-ahead reads 0.

ShowPlan

通過顯示 Query optimizer 正在執行的任務的詳細信息,使用 ShowPlan 可將注意力集中在有問題的 SQL 查詢上。SQL Server 7.0 提供 ShowPlan 的文本版和圖形版。通過用 CTRL+L 執行 SQL 查詢,可以將 Graphical ShowPlan 的輸出顯示在 Query Analyzer 的 Results 窗格中。圖標表示如果查詢已執行,那麼 Query optimizer 應該已執行的操作。箭頭表示查詢的數據流的方向。將鼠標放置在操作圖標上,可以顯示出各個操作的詳細信息。執行 set showplan_all on 命令可以在基於文本的 ShowPlan 中顯示出等價的信息。如果要跳過操作的詳細信息的顯示,以減少顯示 Query optimizer 操作的基於文本的 ShowPlan 的輸出,可執行命令 set showplan_text on。

數據和工作負荷示例

使用下例說明 SQL Server 性能工具的使用。首先創建下表。

create table testtable (nkey1 int identity, col2 char(300) default 'abc', ckey1 char(1))

接下來,在這個表中填充 10,000 行測試數據。可以為列 nkey1 中所填充的數據創建非聚集索引。可以為列 ckey1 中的數據創建聚集索引,col2 中的數據僅僅是填充內容,將每一行增加 300 字節。

declare @counter int

set @counter = 1

while (@counter <= 2000)

begin

insert testtable (ckey1) values ('a')

insert testtable (ckey1) values ('b')

insert testtable (ckey1) values ('c')

insert testtable (ckey1) values ('d')

insert testtable (ckey1) values ('e')

set @counter = @counter + 1

end

數據庫服務器將進行下面的兩個查詢:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

Profiler

SQL Server Profiler 記錄數據庫服務器中所發生活動的詳細信息。可以配置 Profiler 以便用大量的可配置性能信息監視並記錄在 SQL Server 中執行查詢的一個或多個用戶。可在 Profiler 中記錄的性能信息有:I/O 統計信息、CPU 統計信息、鎖定請求、T-SQL 和 RPC 統計信息、索引和表掃描、警告和引發的錯誤、數據庫對象的創建/除去、連接/斷開、存儲過程操作、游標操作等等。有關 SQL Profiler 可記錄的全部信息,請在 SQL Server Books Online 中搜索字符串“Profiler”。

將 Profiler 信息裝載到 .trc 文件中以便用於 Index Tuning Wizard 中

Profiler 和 Index Tuning Wizard 是強大的工具組合,以幫助數據庫管理員在表中創建適當的索引。Profiler 將查詢所消耗的資源記錄在 .trc 文件中。.trc 文件可以由 Index Tuning Wizard 讀取,Index Tuning Wizard 同時考慮 .trc 信息和數據庫表,然後建議應創建什麼樣的索引。Index Tuning Wizard 可讓管理員選擇是自動創建數據庫的適當索引,調度索引以便在以後自動創建還是產生一個可以在以後查看和執行的 T-SQL 腳本。

以下是分析查詢負荷的步驟:

設置 Profiler

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入此跟蹤的名稱。

選擇 Capture to File:復選框,然後選擇要將 Profiler 信息輸出到其中的 .trc 文件。

單擊 OK。



運行工作負荷

啟動 Query Analyzer(從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Query Analyzer 或者從開始菜單中選擇開始\程序\Microsoft SQL Serve


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。r 7.0\Query Analyzer)。

連接到 SQL Server 並設定將在其中創建表的當前數據庫。

鍵入或復制以下查詢並將它們粘貼到 Query Analyzer 的查詢窗口:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

按 CTRL+E 執行這兩個查詢。 停止 Profiler

單擊紅色的正方形以停止 Profiler 跟蹤。將 .trc 裝載到 Index Tuning Wizard

從 Profiler 菜單中選擇 T
ools\Index Tuning WizardsU 啟動 Index Tuning Wizard。單擊 Next。

選擇要分析的數據庫。單擊 Next。

保持 I have a saved workload file 選項按鈕被選,然後單擊 Next。

選擇 My workload file 選項按鈕,找到用 Profiler 創建的 .trc 文件,然後單擊 Next。

在 Select Tables to Tune 對話框中,選擇需要進行分析的表,然後單擊 Next。

Index Tuning Wizard 將在 Index Recommendations 對話框中指出應創建的索引。單擊 Next。

此向導可讓您選擇是立即創建索引,調度將在以後自動執行的索引創建任務還是創建帶創建索引命令的 T-SQL 腳本。選擇需要的選項,然後單擊 Next。

單擊 Finish。

Index Tuning Wizard 為示例數據庫和工作負荷生成的 T-SQL。

/* Created by:Index Tuning Wizard */

/* Date: 9/7/98 */

/* Time:6:42:00 PM */

/* Server:HENRYLNT2 */

/* Database :test */

/* Workload file :E:\mssql7\Binn\profiler_load.sql */

USE [test]

BEGIN TRANSACTION

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

COMMIT TRANSACTION

Index Tuning Wizard 為示例表和數據所建議的索引就是我們預期的索引。ckey1 只有 5 個唯一值,且每一個值都有 2,000 行。假定其中的一個示例查詢 (select ckey1, col2 from testtable where ckey1 = 'a') 要求根據 ckey1 中的某個值對表進行檢索,那麼在 ckey1 列中創建聚集索引是有意義的。第二個查詢 (select nkey1, col2 from testtable where nkey1 = 5000) 根據列 nkey1 的值提取一行。Nkey1 唯一,且有 10,000 行,因此在該列創建非聚集的索引是有意義的。

Profiler/Index Tuning Wizard 組合在涉及許多表和許多查詢的實際數據庫服務器環境中功能非常強大。當數據庫正在進行典型查詢時,請使用 Profiler 記錄 .trc 文件。然後將 .trc 文件裝載到 Index Tuning Wizard,以確定是否創建了正確的索引。根據 Index Tuning Wizard 中的提示自動生成並調度索引創建作業以便在非尖峰時刻運行。定期運行 Profiler/Index Tuning Wizard(比如每周)以查看數據庫服務器中所執行的查詢是否有較大改動,如果是,則可能需要不同的索引。

定期使用 Profiler/Index Tuning Wizard 有助於數據庫管理員在查詢工作負荷改變以及數據庫大小隨著時間而增加的同時,保持 SQL Server 以最佳狀態運行。

將 Profiler 信息加載到 SQL Server 表以進行分析



Profiler 提供的另一個選項是將信息記錄在 SQL Server 表中。完成後,就可以查詢整個表以確定是否有某些查詢消耗了過多資源。

將 Profiler 信息記錄在 SQL Server 表中

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入跟蹤的名稱。

單擊 Capture to Table:復選框,然後選擇要將 Profiler 信息輸出到其中的 SQL Server 表。

單擊 OK。

結束後,單擊紅色的正方形停止 Profiler 跟蹤。

用 Query Analyzer 分析 Profiler 中記錄的信息

在將這些信息記錄到 SQL Server 表中後,可以用 Query Analyzer 計算出系統中的哪些查詢消耗資源最多。這樣,數據庫管理員就可以集中時間改進最需要幫助的查詢。例如,通常用以下查詢分析從 Profiler 記錄到 SQL Server 表中的數據。此查詢檢索數據庫服務器中消耗 CPU 資源最多的頭 3 項。返回讀和寫 I/O 信息以及查詢的持續時間(用毫秒計)。如果用 Profiler 記錄了大量的信息,那麼在這個表中創建索引以加快分析查詢是有意義的。例如,如果 CPU 即將成為分析這個表的一個重要標准,那麼在 CPU 列創建非聚集索引應該是一個不錯的主意。

select top 3 TextData,CPU,Reads,Writes,Duration from profiler_out_table order by cpu desc

有關詳細信息,請在 SQL Server Books Online 中搜索字符串“VIEwing and Analyzing Traces”、“Troubleshooting SQL Server Profiler”、“Tips for Using SQL Server”、“Common SQL Server Profiler ScenariOS”、“Starting SQL Server Profiler”和“Monitoring with SQL Server Profiler”。

Query Analyzer

I/O 統計信息

Query Analyzer 的 Connections Options 對話框 General 選項卡中提供了一個 Show stats I/O 選項。選擇此復選框可以獲取有關 Query Analyzer 中正在執行的查詢所消耗 I/O 量的信息。

例如,當選擇 Show stats I/O 選項時,查詢“select ckey1, col2 from testtable where ckey1 = 'a'”除返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 382, read-ahead reads 400.

同樣,當選擇 Show stats I/O 選項時,查詢“select nkey1, col2 from testtable where nkey1 = 5000”除了返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical read


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。s 400, physical reads 282, read-ahead reads 400.

使用 I/O 統計信息是一種監視查詢調整效果的有效方法。例如,在此示例表中創建 Index Tuning Wizard 在上面所推薦的兩個索引,然後再次運行查詢。

在“select ckey1,col2 from testtable where ckey1 = 'a'”的查詢中,聚集索引改進性能的情況如下所示。假定查詢需要提取該表的 20%,則性能改進應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 91, physical reads 5, read-ahead reads 32.

在“select nkey1,

col2 from testtable where nkey1 = 5000”的查詢中,創建非聚集索引對於查詢的性能有著很顯著的影響。假定此查詢只需要從 10,000 行的表中提取一行,那麼用非聚集索引改善性能應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0.

ShowPlan

通過顯示 Query optimizer 正在執行的任務的詳細信息,使用 ShowPlan 可將注意力集中在有問題的 SQL 查詢上。SQL Server 7.0 提供 ShowPlan 的文本版和圖形版。通過用 CTRL+L 執行 SQL 查詢,可以將 Graphical ShowPlan 的輸出顯示在 Query Analyzer 的 Results 窗格中。圖標表示如果查詢已執行,那麼 Query optimizer 應該已執行的操作。箭頭表示查詢的數據流的方向。將鼠標放置在操作圖標上,可以顯示出各個操作的詳細信息。執行 set showplan_all on 命令可以在基於文本的 ShowPlan 中顯示出等價的信息。如果要跳過操作的詳細信息的顯示,以減少顯示 Query optimizer 操作的基於文本的 ShowPlan 的輸出,可執行命令 set showplan_text on。

數據和工作負荷示例

使用下例說明 SQL Server 性能工具的使用。首先創建下表。

create table testtable (nkey1 int identity, col2 char(300) default 'abc', ckey1 char(1))

接下來,在這個表中填充 10,000 行測試數據。可以為列 nkey1 中所填充的數據創建非聚集索引。可以為列 ckey1 中的數據創建聚集索引,col2 中的數據僅僅是填充內容,將每一行增加 300 字節。

declare @counter int

set @counter = 1

while (@counter <= 2000)

begin

insert testtable (ckey1) values ('a')

insert testtable (ckey1) values ('b')

insert testtable (ckey1) values ('c')

insert testtable (ckey1) values ('d')

insert testtable (ckey1) values ('e')

set @counter = @counter + 1

end

數據庫服務器將進行下面的兩個查詢:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

Profiler

SQL Server Pro
filer 記錄數據庫服務器中所發生活動的詳細信息。可以配置 Profiler 以便用大量的可配置性能信息監視並記錄在 SQL Server 中執行查詢的一個或多個用戶。可在 Profiler 中記錄的性能信息有:I/O 統計信息、CPU 統計信息、鎖定請求、T-SQL 和 RPC 統計信息、索引和表掃描、警告和引發的錯誤、數據庫對象的創建/除去、連接/斷開、存儲過程操作、游標操作等等。有關 SQL Profiler 可記錄的全部信息,請在 SQL Server Books Online 中搜索字符串“Profiler”。

將 Profiler 信息裝載到 .trc 文件中以便用於 Index Tuning Wizard 中

Profiler 和 Index Tuning Wizard 是強大的工具組合,以幫助數據庫管理員在表中創建適當的索引。Profiler 將查詢所消耗的資源記錄在 .trc 文件中。.trc 文件可以由 Index Tuning Wizard 讀取,Index Tuning Wizard 同時考慮 .trc 信息和數據庫表,然後建議應創建什麼樣的索引。Index Tuning Wizard 可讓管理員選擇是自動創建數據庫的適當索引,調度索引以便在以後自動創建還是產生一個可以在以後查看和執行的 T-SQL 腳本。

以下是分析查詢負荷的步驟:

設置 Profiler

從 SQL Server Enterprise Manager 菜單中選擇 Tools/S

QL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入此跟蹤的名稱。

選擇 Capture to File:復選框,然後選擇要將 Profiler 信息輸出到其中的 .trc 文件。

單擊 OK。

運行工作負荷

啟動 Query Analyzer(從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Query Analyzer 或者從開始菜單中選擇開始\程序\Microsoft SQL Server 7.0\Query Analyzer)。

連接到 SQL Server 並設定將在其中創建表的當前數據庫。

鍵入或復制以下查詢並將它們粘貼到 Query Analyzer 的查詢窗口:

select ckey1,col2 from testtable where ckey1 = 'a'

select nkey1,col2 from testtable where nkey1 = 5000

按 CTRL+E 執行這兩個查詢。 停止 Profiler

單擊紅色的正方形以停止 Profiler 跟蹤。將 .trc 裝載到 Index Tuning Wizard

從 Profiler 菜單中選擇 Tools\Index Tuning WizardsU 啟動 Index Tuning Wizard。單擊 Next。

選擇要分析的數據庫。單擊 Next。

保持 I have a saved workload file 選項按鈕被選,然後單擊 Next。

選擇 My workload file 選項按鈕,找到用 Profiler 創建的 .trc 文件,然後單擊 Next。

在 Select Tables to Tune 對話框中,選擇需要進行分析的表,然後單擊 Next。

Index Tuning Wizard 將在 Index Recommendations 對話框中指出應創建的索引。單擊 Next。

此向導可讓您選擇是立即創建索引,調度將在以後自動執行的索引創建任務還是創建帶創建索引命令的 T-SQL 腳本。選擇需要的選項,然後單擊 Next。

單擊 Finish。

Index Tuning Wizard 為示例數據庫和工作負荷生成的 T-SQL。

/* Created by:Index Tuning Wizard */

/* Date: 9


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。/7/98 */

/* Time:6:42:00 PM */

/* Server:HENRYLNT2 */

/* Database :test */

/* Workload file :E:\mssql7\Binn\profiler_load.sql */

USE [test]

BEGIN TRANSACTION

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

CREATE CLUSTERED INDEX [testtable2] ON [dbo].[testtable] ([ckey1])

if (@@error <> 0) rollback transaction

COMMIT TRANSACTION

Index Tuning Wizard 為示例表和數據所建議的索引就是我們預期的索引。ckey1 只有 5 個唯一值,且每一個值都有 2,000 行。假定其中的一個示例查詢 (select ckey1, col2 from testtable where ckey1 = 'a') 要求根據 ckey1 中的某個值對表進行檢索,那麼在 ckey1 列中創建聚集索引是有意義的。第二個查詢 (select nkey1, col2 from testtable where nkey1 = 5000) 根據列 nkey1 的值提取一行。Nkey1 唯一,且有 10,000 行,因此在該列創建非聚集的索引是有意義的。

Profiler/Index Tuning Wizard 組合在涉及許多表和許多查詢的實際數據庫服務器環境中功能非常強大。當數據庫正在進行典型查詢時,請使用 Profiler 記錄 .trc 文件。

然後將 .trc 文件裝載到 Index Tuning Wizard,以確定是否創建了正確的索引。根據 Index Tuning Wizard 中的提示自動生成並調度索引創建作業以便在非尖峰時刻運行。定期運行 Profiler/Index Tuning Wizard(比如每周)以查看數據庫服務器中所執行的查詢是否有較大改動,如果是,則可能需要不同的索引。定期使用 Profiler/Index Tuning Wizard 有助於數據庫管理員在查詢工作負荷改變以及數據庫大小隨著時間而增加的同時,保持 SQL Server 以最佳狀態運行。

將 Profiler 信息加載到 SQL Server 表以進行分析



Profiler 提供的另一個選項是將信息記錄在 SQL Server 表中。完成後,就可以查詢整個表以確定是否有某些查詢消耗了過多資源。

將 Profiler 信息記錄在 SQL Server 表中

從 SQL Server Enterprise Manager 菜單中選擇 Tools/SQL Server Profiler 啟動 Profiler。

按 CTRL+N 組合鍵新建 Profiler 跟蹤。

鍵入跟蹤的名稱。

單擊 Capture to Table:復選框,然後選擇要將 Profiler 信息輸出到其中的 SQL Server 表。

單擊 OK。

結束後,單擊紅色的正方形停止 Profiler 跟蹤。

用 Query Analyzer 分析 Profiler 中記錄的信息

在將這些信息記錄到 SQL Server 表中後,可以用 Query Analyzer 計算出系統中的哪些查詢消耗資源最多。這樣,數據庫管理員就可以集中時間改進最需要幫助的查詢。例如,通常用以下查詢分析從 Profiler 記錄到 SQL Server 表中的數據。此查詢檢索數據庫服務器中消耗 CPU 資源最多的頭 3 項。返回讀和寫 I/O 信息以及查詢的持續時間(用毫秒計)。如果用 Profiler 記錄了大量的信息,那麼在這個表中創建索引以加快分析查詢是有意義的。例如,如果 CPU 即將成為分析這個表的一個重要標准,那麼在 CPU 列創建非聚集索引應該是一個不錯的主意。

select top 3 TextData,CPU,Reads,Writes,Duration from profiler_out_table order by cpu desc

有關詳細信息,請在 SQL Server Books Online 中搜索字符串“VIEwing and Analyzing Traces”、“Troubleshooting SQL Server Profiler”、“Tips for Using SQL Server”、“Common SQL Server Profiler ScenariOS”、“Starting SQL Server Profiler”和“Monitoring with SQL Server Profiler”。

Query Analyzer

I/O 統計信息

Query Analyzer 的 Connections Options 對話框 General 選項卡中提供了一個 Show stats I/O 選項。選擇此復選框可以獲取有關 Query Analyzer 中正在執行的查詢所消耗 I/O 量的信息。

例如,當選擇 Show stats I/O 選項時,查詢“select ckey1, col2 from testtable where ckey1 = 'a'”除返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 382, read-ahead reads 400.

同樣,當選擇 Show stats I/O 選項時,查詢“select nkey1, col2 from testtable where nkey1 = 5000”除了返回結果集以外,還返回以下 I/O 信息:

Table 'testtable'.Scan count 1, logical reads 400, physical reads 282, read-ahead reads 400.

使用 I/O 統計信息是一種監視查詢調整效果的有效方法。例如,在此示例表中創建 Index Tuning Wizard 在上面所推薦的兩個索引,然後再次運行查詢。

在“select ckey1,col2 from testtable where ckey1 = 'a'”的查詢中,聚集索引改進性能的情況如下所示。

假定查詢需要提取該表的 20%,則性能改進應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 91, physical
在“select nkey1,col2 from testtable where nkey1 = 5000”的查詢中,創建非聚集索引對於查詢的性能有著很顯著的影響。假定此查詢只需要從 10,000 行的表中提取一行,那麼用非聚集索引改善性能應該是比較合理的:

Table 'testtable'.Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0.

ShowPlan

通過顯示 Query optimizer 正在執行的任務的詳細信息,使用 ShowPlan 可將注意力集中在有問題的 SQL 查詢上。SQL Server 7.0 提供 ShowPlan 的文本版和圖形版。通過用 CTRL+L 執行 SQL 查詢,可以將 Graphical ShowPlan 的輸出顯示在 Query Analyzer 的 Results 窗格中。圖標表示如果查詢已執行,那麼 Query optimizer 應該已執行的操作。箭頭表示查詢的數據流的方向。將鼠標放置在操作圖標上,可以顯示出各個操作的詳細信息。執行 set showplan_all on 命令可以在基於文本的 ShowPlan 中顯示出等價的信息。如果要跳過操作的詳細信息的顯示,以減少顯示 Query optimize


您正在看的SQLserver教程是:SQL Server 性能優化工具(1)。r 操作的基於文本的 ShowPlan 的輸出,可執行命令 set showplan_text on。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved