日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql server 2005 优化方法

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server 2005 优化方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sql server 2005 優化方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

?

一分析實例級的等待

?

--可能存在的性能問題

()IO等待;

()存儲過程和代碼的重新編譯;

()tempdb數據庫頁可能是瓶頸;

?

?

--1 不用重新啟動數據庫實例,重置'sys.dm_os_wait_stats'

DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR);

?

?

--2 查詢累計值達到系統等待時間%的重量級等待

WITH Waits AS

(

? SELECT

??? wait_type,

??? wait_time_ms / 1000. AS wait_time_s,

??? 100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct,

??? ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn

? FROM sys.dm_os_wait_stats

? WHERE wait_type NOT LIKE '%SLEEP%'

? -- filter out additional irrelevant waits

)

SELECT

? W1.wait_type,

? CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s,

? CAST(W1.pct AS DECIMAL(12, 2)) AS pct,

? CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct

FROM Waits AS W1

? JOIN Waits AS W2

??? ON W2.rn <= W1.rn

GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct

HAVING SUM(W2.pct) - W1.pct < 90 -- percentage threshold

ORDER BY W1.rn;

?

--3 找出高峰期

-- Create the WaitStats table

USE Performance;

GO

IF OBJECT_ID('dbo.WaitStats') IS NOT NULL

? DROP TABLE dbo.WaitStats;

GO

?

SELECT GETDATE() AS dt,

? wait_type, waiting_tasks_count, wait_time_ms,

? max_wait_time_ms, signal_wait_time_ms

INTO dbo.WaitStats

FROM sys.dm_os_wait_stats

WHERE 1 = 2;

?

ALTER TABLE dbo.WaitStats

? ADD CONSTRAINT PK_WaitStats PRIMARY KEY(dt, wait_type);

CREATE INDEX idx_type_dt ON dbo.WaitStats(wait_type, dt);

GO

?

-- Load waitstats data on regular intervals

INSERT INTO Performance.dbo.WaitStats

? SELECT GETDATE(),

??? wait_type, waiting_tasks_count, wait_time_ms,

??? max_wait_time_ms, signal_wait_time_ms

FROM sys.dm_os_wait_stats;

GO

?

-- Creation script for fn_interval_waits function

IF OBJECT_ID('dbo.fn_interval_waits') IS NOT NULL

? DROP FUNCTION dbo.fn_interval_waits;

GO

?

CREATE FUNCTION dbo.fn_interval_waits

? (@fromdt AS DATETIME, @todt AS DATETIME)

RETURNS TABLE

AS

?

RETURN

? WITH Waits AS

? (

??? SELECT dt, wait_type, wait_time_ms,

????? ROW_NUMBER() OVER(PARTITION BY wait_type

??????????????????????? ORDER BY dt) AS rn

??? FROM dbo.WaitStats

??? WHERE dt >= @fromdt

????? AND dt < @todt + 1

? )

? SELECT Prv.wait_type, Prv.dt AS start_time,

??? CAST((Cur.wait_time_ms - Prv.wait_time_ms)

?????????? / 1000. AS DECIMAL(12, 2)) AS interval_wait_s

? FROM Waits AS Cur

??? JOIN Waits AS Prv

????? ON Cur.wait_type = Prv.wait_type

????? AND Cur.rn = Prv.rn + 1

????? AND Prv.dt <= @todt;

GO

?

-- Return interval waits

SELECT wait_type, start_time, interval_wait_s

FROM dbo.fn_interval_waits('20060212', '20060215') AS F

ORDER BY SUM(interval_wait_s) OVER(PARTITION BY wait_type) DESC,

? wait_type, start_time;

GO

?

-- Prepare view for pivot table

IF OBJECT_ID('dbo.VIntervalWaits') IS NOT NULL

? DROP VIEW dbo.VIntervalWaits;

GO

?

CREATE VIEW dbo.VIntervalWaits

AS

?

SELECT wait_type, start_time, interval_wait_s

FROM dbo.fn_interval_waits('20060212', '20060215') AS F;

GO

?

--利用excel創建透視圖分析

?

二聯系等待和隊列

?

--1 利用性能計數器監控cpu利用率,I/O隊列,緩存命中率,內存計數器等。

?

--2 為服務器維護的每個性能計數器返回一行

SELECT

? object_name,

? counter_name,

? instance_name,

? cntr_value,

? cntr_type

FROM sys.dm_os_performance_counters;

?

?

三確定方案

?

--根據以上分析掌握的信息,確定下一步方案

?

四細化到數據庫/文件級別

?

--分析IO信息

?WITH DBIO AS

(

? SELECT

??? DB_NAME(IVFS.database_id) AS db,

??? CASE WHEN MF.type = 1 THEN 'log' ELSE 'data' END AS file_type,

??? SUM(IVFS.num_of_bytes_read + IVFS.num_of_bytes_written) AS io,

??? SUM(IVFS.io_stall) AS io_stall

? FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS IVFS

??? JOIN sys.master_files AS MF

????? ON IVFS.database_id = MF.database_id

????? AND IVFS.file_id = MF.file_id

? GROUP BY DB_NAME(IVFS.database_id), MF.type

)

SELECT db, file_type,

? CAST(1. * io / (1024 * 1024) AS DECIMAL(12, 2)) AS io_mb,

? CAST(io_stall / 1000. AS DECIMAL(12, 2)) AS io_stall_s,

? CAST(100. * io_stall / SUM(io_stall) OVER()

?????? AS DECIMAL(10, 2)) AS io_stall_pct,

? ROW_NUMBER() OVER(ORDER BY io_stall DESC) AS rn

FROM DBIO

ORDER BY io_stall DESC;

?

五細化到進程級別

?

--1 注意事項:不要用SQL Server Profiler圖形化跟蹤;不要把跟蹤數據寫到數據庫表;

不要把跟蹤文件寫到包含數據庫文件的磁盤上;選擇事件類和數據列,只跟蹤需要的信息,

移除所有默認項和非必選項;列用篩選條件,如數據庫ID

?

?

--2 需要跟蹤的事件類和字段

SP:Completed?

SP:StmtCompleted

RPC:Completed

SQL:StmtCompleted

?

TextData? Duration host application login

?

--3 用于創建跟蹤的系統存儲過程

--創建跟蹤定義。新的跟蹤將處于停止狀態。

sp_trace_create

?

?

--創建用戶定義事件

sp_trace_generateevent

?

--在跟蹤中添加或刪除事件或事件列。

sp_trace_setevent

?

--將篩選應用于跟蹤。

sp_trace_setfilter

?

?

--修改指定跟蹤的當前狀態

--0 停止指定的跟蹤。

--1 啟動指定的跟蹤。

--2 關閉指定的跟蹤并從服務器中刪除其定義。

sp_trace_setstatus

?

?

--以表格格式返回一或多個跟蹤文件的內容

SELECT * INTO temp_trc

FROM fn_trace_gettable('c:/temp/my_trace.trc', default);

?

?

?

轉載于:https://www.cnblogs.com/dbasys/archive/2008/11/03/2127564.html

總結

以上是生活随笔為你收集整理的sql server 2005 优化方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。