數據和工作負荷示例
使用下例說明 SQL Server 性能工具的使用
create table testtable (nkey
接下來
declare @counter int
set @counter =
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 記錄數據庫服務器中所發生活動的詳細信息。tW.WinGwIt.COm可以配置 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 中的提示自動生成並調度索引創建作業以便在非尖峰時刻運行。定期運行 Profiler/Index Tuning Wizard(比如每周)以查看數據庫服務器中所執行的查詢是否有較大改動,如果是,則可能需要不同的索引。定期使用 Profiler/Index Tuning Wizard 有助於數據庫管理員在查詢工作負荷改變以及數據庫大小隨著時間而增加的同時,保持 SQL Server 以最佳狀態運行。
有關詳細信息,請在 SQL Server Books Online 中搜索“Index Tuning Wizard”和“Index Tuning Recommendations”。
將 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 f
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22173.html