国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server定時自動抓取耗時SQL并歸檔數據發郵件腳本分享

2024-08-31 00:54:19
字體:
來源:轉載
供稿:網友
SQL Server定時自動抓取耗時SQL并歸檔數據發郵件腳本分享SQL Server定時自動抓取耗時SQL并歸檔數據發郵件腳本分享

第一步建庫和建表

USE [master]GOCREATE DATABASE [MonitorElapsedHighSQL]GO
--建表USE [MonitorElapsedHighSQL]GO --1、表[SQLCountStatisticsByDay]  --抓取到的sql語句數量CREATE TABLE [dbo].[SQLCountStatisticsByDay]    (      id INT IDENTITY(1, 1)  PRIMARY KEY ,      [SQLCount] INT ,      [gettime] DATETIME    )CREATE INDEX [Idx_SQLCountStatisticsByDay_SQLCount] ON [MonitorElapsedHighSQL].[dbo].[SQLCountStatisticsByDay]([SQLCount])CREATE INDEX [Idx_SQLCountStatisticsByDay_gettime] ON [MonitorElapsedHighSQL].[dbo].[SQLCountStatisticsByDay]([gettime])GO --2、表[MostElapsedStatisticsByDay] --每條不同的sql耗時最多CREATE TABLE [dbo].[MostElapsedStatisticsByDay]    (      id INT IDENTITY(1, 1)             PRIMARY KEY ,      [ElapsedMS] INT ,      [IOReads] BIGINT ,      [IOWrites] BIGINT ,      [DBName] NVARCHAR(128) ,      [paramlist] NVARCHAR(MAX) ,      [planstmttext] NVARCHAR(MAX) ,      [stmttext] NVARCHAR(MAX) ,      [xmlplan] XML ,      [gettime] DATETIME    )CREATE INDEX [Idx_MostElapsedStatisticsByDay_ElapsedMS] ON [MonitorElapsedHighSQL].[dbo].[MostElapsedStatisticsByDay]([ElapsedMS])CREATE INDEX [Idx_MostElapsedStatisticsByDay_gettime] ON [MonitorElapsedHighSQL].[dbo].[MostElapsedStatisticsByDay]([gettime])GO --3、表[MostIOReadStatisticsByDay]--每條不同的sql的IOread最多CREATE TABLE [dbo].[MostIOReadStatisticsByDay]    (      id INT IDENTITY(1, 1)             PRIMARY KEY ,      [IOReads] BIGINT ,      [DBName] NVARCHAR(128) ,      [paramlist] NVARCHAR(MAX) ,      [planstmttext] NVARCHAR(MAX) ,      [stmttext] NVARCHAR(MAX) ,      [xmlplan] XML ,      [gettime] DATETIME    )CREATE INDEX [Idx_MostIOReadStatisticsByDay_IOReads] ON [MonitorElapsedHighSQL].[dbo].[MostIOReadStatisticsByDay]([IOReads])CREATE INDEX [Idx_MostIOReadStatisticsByDay_gettime] ON [MonitorElapsedHighSQL].[dbo].[MostIOReadStatisticsByDay]([gettime])GO --4、表[MostIOWriteStatisticsByDay]--每條不同的sql的IOwrite最多CREATE TABLE [dbo].[MostIOWriteStatisticsByDay]    (      id INT IDENTITY(1, 1)             PRIMARY KEY ,      [IOWrites] BIGINT ,      [DBName] NVARCHAR(128) ,      [paramlist] NVARCHAR(MAX) ,      [planstmttext] NVARCHAR(MAX) ,      [stmttext] NVARCHAR(MAX) ,      [xmlplan] XML ,      [gettime] DATETIME    )CREATE INDEX [Idx_MostIOWriteStatisticsByDay_IOWrites] ON [MonitorElapsedHighSQL].[dbo].[MostIOWriteStatisticsByDay]([IOWrites])CREATE INDEX [Idx_MostIOWriteStatisticsByDay_gettime] ON [MonitorElapsedHighSQL].[dbo].[MostIOWriteStatisticsByDay]([gettime])GO --5、表[sp_executesqlCountStatisticsByDay]--使用sp_executesql的sql有多少條CREATE TABLE [dbo].[sp_executesqlCountStatisticsByDay]    (      id INT IDENTITY(1, 1)             PRIMARY KEY ,      [sp_executesqlCount] INT ,      [DBName] NVARCHAR(128) ,      [planstmttext] NVARCHAR(MAX) ,      [gettime] DATETIME    )CREATE INDEX [Idx_sp_executesqlCountStatisticsByDay_sp_executesqlCount] ON [MonitorElapsedHighSQL].[dbo].[sp_executesqlCountStatisticsByDay]([sp_executesqlCount])CREATE INDEX [Idx_sp_executesqlCountStatisticsByDay_gettime] ON [MonitorElapsedHighSQL].[dbo].[sp_executesqlCountStatisticsByDay]([gettime])GO

第二步創建sp_who3存儲過程

-- http://sqlserverplanet.com/dba/a-better-sp_who2-using-dmvs-sp_who3USE [MonitorElapsedHighSQL]GOCREATE PROCEDURE [dbo].[sp_who3] ASBEGINSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSELECT    SPID                = er.session_id    ,BlkBy              = CASE WHEN lead_blocker = 1 THEN -1 ELSE er.blocking_session_id END    ,ElapsedMS          = er.total_elapsed_time    ,CPU                = er.cpu_time    ,IOReads            = er.logical_reads + er.reads    ,IOWrites           = er.writes         ,Executions         = ec.execution_count      ,CommandType        = er.command             ,LastWaitType       = er.last_wait_type        ,ObjectName         = OBJECT_SCHEMA_NAME(qt.objectid,dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid)      ,SQLStatement       =        SUBSTRING        (            qt.text,            er.statement_start_offset/2,            (CASE WHEN er.statement_end_offset = -1                THEN LEN(CONVERT(nvarchar(MAX), qt.text)) * 2                ELSE er.statement_end_offset                END - er.statement_start_offset)/2        )            ,STATUS             = ses.STATUS    ,[Login]            = ses.login_name    ,Host               = ses.host_name    ,DBName             = DB_Name(er.database_id)    ,StartTime          = er.start_time    ,Protocol           = con.net_transport    ,transaction_isolation =        CASE ses.transaction_isolation_level            WHEN 0 THEN 'Unspecified'            WHEN 1 THEN 'Read Uncommitted'            WHEN 2 THEN 'Read Committed'            WHEN 3 THEN 'Repeatable'            WHEN 4 THEN 'Serializable'            WHEN 5 THEN 'Snapshot'        END    ,ConnectionWrites   = con.num_writes    ,ConnectionReads    = con.num_reads    ,ClientAddress      = con.client_net_address    ,Authentication     = con.auth_scheme    ,DatetimeSnapshot   = GETDATE()    ,plan_handle        = er.plan_handleFROM sys.dm_exec_requests erLEFT JOIN sys.dm_exec_sessions sesON ses.session_id = er.session_idLEFT JOIN sys.dm_exec_connections conON con.session_id = ses.session_idOUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS qtOUTER APPLY (    SELECT execution_count = MAX(cp.usecounts)    FROM sys.dm_exec_cached_plans cp    WHERE cp.plan_handle = er.plan_handle) ecOUTER APPLY(    SELECT        lead_blocker = 1    FROM master.dbo.sysprocesses sp    WHERE sp.spid IN (SELECT blocked FROM master.dbo.sysprocesses)    AND sp.blocked = 0    AND sp.spid = er.session_id) lbWHERE er.sql_handle IS NOT NULLAND er.session_id != @@SPIDORDER BY    CASE WHEN lead_blocker = 1 THEN -1 * 1000 ELSE -er.blocking_session_id END,    er.blocking_session_id DESC,    er.logical_reads + er.reads DESC,    er.session_idEND
View Code

第三步創建[usp_checkElapsedHighSQL]存儲過程

USE [MonitorElapsedHighSQL]GO/****** Object:  StoredProcedure [dbo].[usp_checkElapsedHighSQL]    Script Date: 2015/6/23 17:16:56 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO--創建存儲過程CREATE  PROCEDURE [dbo].[usp_checkElapsedHighSQL] ( @SessionID INT )AS    BEGIN        IF  ( SELECT  OBJECT_ID('MonitorElapsedHighSQL.dbo.ElapsedHigh') ) IS NULL            BEGIN                 CREATE TABLE [MonitorElapsedHighSQL].[dbo].[ElapsedHigh]                    (                      id INT IDENTITY(1, 1)   PRIMARY KEY ,                      [SPID] SMALLINT ,                      [ElapsedMS] INT ,                      [IOReads] BIGINT ,                      [IOWrites] BIGINT ,                      [DBName] NVARCHAR(128) ,                      [plan_handle] VARBINARY(64) ,                      [paramlist] NVARCHAR(MAX) ,                      [planstmttext] NVARCHAR(MAX) ,                      [stmttext] NVARCHAR(MAX) ,                      [xmlplan] XML,                      [gettime] DATETIME                    )                CREATE INDEX [Idx_ElapsedHigh_ElapsedMS] ON [MonitorElapsedHighSQL].[dbo].[ElapsedHigh]([ElapsedMS])                CREATE INDEX [Idx_ElapsedHigh_IOReads] ON [MonitorElapsedHighSQL].[dbo].[ElapsedHigh]([IOReads])                             END        IF  ( SELECT  OBJECT_ID('MonitorElapsedHighSQL.dbo.ElapsedHigh') ) IS NOT NULL            BEGIN                        SET NOCOUNT ON                 SET TRANSACTION ISOLATION LEVEL READ UNCO
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗江县| 九龙城区| 莲花县| 北辰区| 惠水县| 武山县| 全州县| 靖安县| 卫辉市| 波密县| 时尚| 南召县| 南岸区| 新宁县| 武胜县| 仁寿县| 茌平县| 塔河县| 报价| 元阳县| 衡阳市| 阿巴嘎旗| 长阳| 舒兰市| 伊宁市| 吉安县| 赤壁市| 弥渡县| 田阳县| 岗巴县| 炉霍县| 瑞昌市| 河津市| 来安县| 余江县| 景宁| 胶州市| 宜宾市| 马山县| 攀枝花市| 旬邑县|