GreenTrend

ExpertforSQLServer(4.7.2)和ZhuanCloud(1.0.0)工具收集内容(在个人笔记本上测试)

--SZC_Info.txt
2017-01-11 14:32:00
SQL专家云 v1.0.0.0

2017-01-11 14:32:00
开始收集

2017-01-11 14:32:00
数据库版本:SQLServer2008R2

2017-01-11 14:32:00
存储路径:E:GreenTrendhuanCloud_1.0.0SZC20170111_143200SZC20170111_143200.szc

2017-01-11 14:32:00
收集目标数据库列表

2017-01-11 14:32:00
收集工具配置信息

2017-01-11 14:32:01
收集项目初始化

2017-01-11 14:32:01
收集SQL专家云版本信息

2017-01-11 14:32:01
收集操作系统信息

2017-01-11 14:32:02
收集网卡信息

2017-01-11 14:32:02
收集SQL Server信息

2017-01-11 14:32:03
收集系统磁盘信息

2017-01-11 14:32:03
收集实例参数信息

2017-01-11 14:32:03
收集Tempdb 文件信息

2017-01-11 14:32:03
收集Tempdb 空间使用情况

2017-01-11 14:32:04
收集会话概况信息

2017-01-11 14:32:04
收集作业信息

2017-01-11 14:32:05
开始创建查询语句跟踪

2017-01-11 14:32:05
创建查询语句跟踪成功

2017-01-11 14:32:06
收集数据库信息

2017-01-11 14:32:06
收集数据库概览信息

2017-01-11 14:32:07
收集AdventureWorks2008数据库配置信息

2017-01-11 14:32:07
检查AdventureWorks2008数据库是否在Moebius集群中

2017-01-11 14:32:07
检查AdventureWorks2008数据库是否在高可用性组中

2017-01-11 14:32:07
检查AdventureWorks2008数据库是否有镜像

2017-01-11 14:32:07
收集AdventureWorks2008数据库表空间

2017-01-11 14:32:07
收集AdventureWorks2008数据库设计不合理的表

2017-01-11 14:32:07
收集AdventureWorks2008数据库文件信息

2017-01-11 14:32:07
收集AdventureWorks2008数据库备份信息

2017-01-11 14:32:07
收集AdventureWorks2008数据库缺失索引

2017-01-11 14:32:07
收集AdventureWorks2008数据库没有索引的外键

2017-01-11 14:32:08
收集AdventureWorks2008数据库没有使用的索引

2017-01-11 14:32:08
收集AdventureWorks2008数据库重复的索引

2017-01-11 14:32:08
收集AdventureWorks2008数据库索引使用情况

2017-01-11 14:32:08
收集AdventureWorks2008数据库统计信息

2017-01-11 14:32:08
收集AdventureWorks2008数据库表定义

2017-01-11 14:32:09
收集AdventureWorks2008数据库视图定义

2017-01-11 14:32:09
收集AdventureWorks2008数据库存储过程定义

2017-01-11 14:32:09
收集AdventureWorks2008数据库函数定义

2017-01-11 14:32:09
收集AdventureWorks2008数据库自定义类型

2017-01-11 14:32:09
收集AdventureWorks2008数据库自定义表类型

2017-01-11 14:32:09
收集AdventureWorks2008数据库自定义数据类型

2017-01-11 14:32:09
收集ClearTrace_20数据库配置信息

2017-01-11 14:32:09
检查ClearTrace_20数据库是否在Moebius集群中

2017-01-11 14:32:09
检查ClearTrace_20数据库是否在高可用性组中

2017-01-11 14:32:09
检查ClearTrace_20数据库是否有镜像

2017-01-11 14:32:09
收集ClearTrace_20数据库表空间

2017-01-11 14:32:10
收集ClearTrace_20数据库设计不合理的表

2017-01-11 14:32:10
收集ClearTrace_20数据库文件信息

2017-01-11 14:32:10
收集ClearTrace_20数据库备份信息

2017-01-11 14:32:10
收集ClearTrace_20数据库缺失索引

2017-01-11 14:32:10
收集ClearTrace_20数据库没有索引的外键

2017-01-11 14:32:10
收集ClearTrace_20数据库没有使用的索引

2017-01-11 14:32:10
收集ClearTrace_20数据库重复的索引

2017-01-11 14:32:10
收集ClearTrace_20数据库索引使用情况

2017-01-11 14:32:10
收集ClearTrace_20数据库统计信息

2017-01-11 14:32:10
收集ClearTrace_20数据库表定义

2017-01-11 14:32:10
收集ClearTrace_20数据库视图定义

2017-01-11 14:32:11
收集ClearTrace_20数据库存储过程定义

2017-01-11 14:32:11
收集ClearTrace_20数据库函数定义

2017-01-11 14:32:11
收集ClearTrace_20数据库自定义类型

2017-01-11 14:32:11
收集ClearTrace_20数据库自定义表类型

2017-01-11 14:32:11
收集ClearTrace_20数据库自定义数据类型

2017-01-11 14:32:11
收集DBA_Monitor_local数据库配置信息

2017-01-11 14:32:11
检查DBA_Monitor_local数据库是否在Moebius集群中

2017-01-11 14:32:11
检查DBA_Monitor_local数据库是否在高可用性组中

2017-01-11 14:32:11
检查DBA_Monitor_local数据库是否有镜像

2017-01-11 14:32:11
收集DBA_Monitor_local数据库表空间

2017-01-11 14:32:11
收集DBA_Monitor_local数据库设计不合理的表

2017-01-11 14:32:11
收集DBA_Monitor_local数据库文件信息

2017-01-11 14:32:11
收集DBA_Monitor_local数据库备份信息

2017-01-11 14:32:11
收集DBA_Monitor_local数据库缺失索引

2017-01-11 14:32:11
收集DBA_Monitor_local数据库没有索引的外键

2017-01-11 14:32:12
收集DBA_Monitor_local数据库没有使用的索引

2017-01-11 14:32:12
收集DBA_Monitor_local数据库重复的索引

2017-01-11 14:32:12
收集DBA_Monitor_local数据库索引使用情况

2017-01-11 14:32:12
收集DBA_Monitor_local数据库统计信息

2017-01-11 14:32:12
收集DBA_Monitor_local数据库表定义

2017-01-11 14:32:12
收集DBA_Monitor_local数据库视图定义

2017-01-11 14:32:12
收集DBA_Monitor_local数据库存储过程定义

2017-01-11 14:32:12
收集DBA_Monitor_local数据库函数定义

2017-01-11 14:32:12
收集DBA_Monitor_local数据库自定义类型

2017-01-11 14:32:12
收集DBA_Monitor_local数据库自定义表类型

2017-01-11 14:32:12
收集DBA_Monitor_local数据库自定义数据类型

2017-01-11 14:32:12
收集Test数据库配置信息

2017-01-11 14:32:12
检查Test数据库是否在Moebius集群中

2017-01-11 14:32:13
检查Test数据库是否在高可用性组中

2017-01-11 14:32:13
检查Test数据库是否有镜像

2017-01-11 14:32:13
收集Test数据库表空间

2017-01-11 14:32:13
收集Test数据库设计不合理的表

2017-01-11 14:32:13
收集Test数据库文件信息

2017-01-11 14:32:13
收集Test数据库备份信息

2017-01-11 14:32:13
收集Test数据库缺失索引

2017-01-11 14:32:13
收集Test数据库没有索引的外键

2017-01-11 14:32:13
收集Test数据库没有使用的索引

2017-01-11 14:32:13
收集Test数据库重复的索引

2017-01-11 14:32:13
收集Test数据库索引使用情况

2017-01-11 14:32:14
收集Test数据库统计信息

2017-01-11 14:32:14
收集Test数据库表定义

2017-01-11 14:32:14
收集Test数据库视图定义

2017-01-11 14:32:14
收集Test数据库存储过程定义

2017-01-11 14:32:14
收集Test数据库函数定义

2017-01-11 14:32:14
收集Test数据库自定义类型

2017-01-11 14:32:14
收集Test数据库自定义表类型

2017-01-11 14:32:14
收集Test数据库自定义数据类型

2017-01-11 14:32:14
收集空闲会话

2017-01-11 14:32:14
收集执行计划

2017-01-11 14:32:14
收集错误日志

2017-01-11 14:32:15
常规信息收集完成

2017-01-11 15:03:26
结束收集
View Code

收集解析后的概览汇总

免费工具会屏蔽部分关键项,实际这些数据都可以用语句获取(通过跟踪查看)

/********系统 Start********/
--系统->常规->软件
DECLARE @cpu_online_count INT
SELECT  @cpu_online_count = COUNT(*)
FROM    sys.dm_os_schedulers
WHERE   is_online = 1
        AND status = 'VISIBLE ONLINE'
SELECT  SERVERPROPERTY('ServerName') AS server_name ,
        cpu_count ,
        hyperthread_ratio ,
        @cpu_online_count AS cpu_online_count ,
        sqlserver_start_time ,
        SERVERPROPERTY('IsClustered') AS is_clustered ,
        SERVERPROPERTY('ProductVersion') AS product_version ,
        SERVERPROPERTY('Edition') AS sql_edition ,
        SERVERPROPERTY('EditionID') AS sql_editionid ,
        SERVERPROPERTY('ProductLevel') AS product_level
FROM    sys.dm_os_sys_info
/********系统 End********/


/********参数 Start********/
--参数->常规->参数
SELECT  name ,
        minimum ,
        maximum ,
        value AS config_value ,
        value_in_use AS run_value ,
        is_dynamic,
        is_advanced
FROM    sys.configurations
ORDER BY name
/********参数 Start********/


/********性能计数器 Start********/
--Perfmon添加计数器 GreenTrend.xml
/********性能计数器 Start********/


/********会话 Start********/
--会话->常规->概况
SELECT  s.login_name ,
        s.[host_name] ,
        s.[program_name] ,
        s.host_process_id ,
        s.client_interface_name ,
        s.nt_domain ,
        s.transaction_isolation_level ,
        COUNT(s.session_id) AS session_count
FROM    sys.dm_exec_sessions s
WHERE   s.session_id > 50
        AND [program_name] <> 'ExpertforSQLServer'
GROUP BY s.login_name ,
        s.[host_name] ,
        s.[program_name] ,
        s.host_process_id ,
        s.client_interface_name ,
        s.nt_domain ,
        s.transaction_isolation_level
ORDER BY session_count DESC

 
--会话->常规->等待(每3秒)
DECLARE @collect_time VARCHAR(100)
SET @collect_time = CONVERT(VARCHAR(100), GETDATE(), 120)
SELECT  a.session_id ,
        ISNULL(e.request_id,0) AS request_id ,
        ISNULL(a.wait_type,'') AS wait_type ,
        ISNULL(wait_duration_ms,0) AS wait_duration_ms ,
        ISNULL(blocking_session_id,0) AS blocking_session_id ,
        @collect_time AS now_time
INTO    #WaitTask
FROM    sys.dm_os_waiting_tasks a
        LEFT JOIN sys.dm_os_tasks e ON a.waiting_task_address = e.task_address
                                       AND a.exec_context_id = e.exec_context_id
WHERE   a.session_id > 50
        AND a.wait_type <> 'CXPACKET'
ORDER BY wait_duration_ms DESC;
SELECT  es.session_id ,
        er.request_id ,
        blocking_session_id ,
        database_name = DB_NAME(er.database_id) ,
        CONVERT(VARCHAR(100), start_time, 120) start_time ,
        @collect_time AS now_time ,
        er.cpu_time ,
        er.reads ,
        er.writes ,
        er.logical_reads ,
        ISNULL(internal_objects_alloc_mb, 0) internal_objects_alloc_mb ,
        ISNULL(internal_objects_dealloc_mb, 0) internal_objects_dealloc_mb ,
        ISNULL(user_objects_alloc_mb, 0) user_objects_alloc_mb ,
        ISNULL(user_objects_dealloc_mb, 0) user_objects_dealloc_mb ,
        login_name ,
        er.status ,
        wait_type ,
        wait_resource ,
        wait_time ,
        taskCount ,
        individual_query = SUBSTRING(ISNULL(qt.text, ''),
                                     ( er.statement_start_offset / 2 ) + 1,
                                     ( ( CASE WHEN er.statement_end_offset = -1
                                              THEN LEN(CONVERT(NVARCHAR(MAX), ISNULL(qt.text,
                                                              ''))) * 2
                                              ELSE er.statement_end_offset
                                         END - er.statement_start_offset ) / 2 )
                                     + 1) ,
        parent_query = ISNULL(qt.text, '') ,
        program_name ,
        host_name ,
        er.open_transaction_count ,
        er.transaction_isolation_level ,
        plan_handle
FROM    sys.dm_exec_requests (NOLOCK) er
        INNER JOIN sys.dm_exec_sessions (NOLOCK) es ON er.session_id = es.session_id
        LEFT JOIN ( SELECT  session_id ,
                            SUM(internal_objects_alloc_page_count * 8 / 1024) AS internal_objects_alloc_mb ,
                            SUM(internal_objects_dealloc_page_count * 8 / 1024) AS internal_objects_dealloc_mb ,
                            SUM(user_objects_alloc_page_count * 8 / 1024) AS user_objects_alloc_mb ,
                            SUM(user_objects_dealloc_page_count * 8 / 1024) AS user_objects_dealloc_mb
                    FROM    sys.dm_db_task_space_usage
                    GROUP BY session_id
                  ) AS tempdb ON er.session_id = tempdb.session_id
        LEFT JOIN ( SELECT  session_id ,
                            taskCount = COUNT(session_id)
                    FROM    #WaitTask
                    GROUP BY session_id
                  ) AS task_info ON task_info.session_id = er.session_id
        OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE   es.session_id NOT IN ( @@SPID )
        AND [program_name] <> 'ExpertforSQLServer'
        AND wait_type NOT IN ( N'TRACEWRITE', N'SP_SERVER_DIAGNOSTICS_SLEEP', N'BROKER_RECEIVE_WAITFOR')
        AND ( er.blocking_session_id > 0
              OR er.wait_type IS NOT NULL
              OR er.session_id IN ( SELECT DISTINCT
                                            blocking_session_id
                                    FROM    sys.dm_exec_requests )
            )
ORDER BY 1 ,2
OPTION (MAXDOP 2);
SELECT TOP 5
        session_id ,
        request_id ,
        wait_type ,
        wait_duration_ms ,
        blocking_session_id ,
        now_time
FROM    #WaitTask
OPTION (MAXDOP 2)
DROP TABLE #WaitTask


SELECT 
    ec.session_id,
    0 request_id,
    0 blocking_session_id,
    '' database_name,    
    se.last_request_start_time start_time,
    '2016-12-21 08:56:02' now_time,
    0 cpu_time,
    0 reads,
    0 writes,
    0 logical_reads,
    ISNULL(internal_objects_alloc_mb,0) internal_objects_alloc_mb,
    ISNULL(internal_objects_dealloc_mb,0) internal_objects_dealloc_mb,
    ISNULL(user_objects_alloc_mb,0) user_objects_alloc_mb,
    ISNULL(user_objects_dealloc_mb,0) user_objects_dealloc_mb,
    se.login_name,
    se.status,    
    '' wait_type,
    '' wait_resource,
    0 wait_time,
    0 taskCount ,
    individual_query = ISNULL(qt.text,''),
    parent_query = ISNULL(qt.text,''),
    se.program_name,
    se.host_name,
    ISNULL(t.open_transaction_count,0) open_transaction_count,
    se.transaction_isolation_level,
    NULL plan_handle
FROM 
    sys.dm_exec_connections(NOLOCK) ec 
    INNER JOIN sys.dm_exec_sessions(NOLOCK) se
    ON ec.session_id=se.session_id
    LEFT JOIN (
                    SELECT  session_id ,
                            COUNT(transaction_id) AS open_transaction_count
                    FROM    sys.dm_tran_session_transactions (NOLOCK)
                    GROUP BY session_id
                ) AS t ON t.session_id = se.session_id
    LEFT JOIN (
                    SELECT
                        session_id,
                        SUM(internal_objects_alloc_page_count * 8 / 1024) as internal_objects_alloc_mb,
                        SUM(internal_objects_dealloc_page_count * 8 / 1024) as internal_objects_dealloc_mb,
                        SUM(user_objects_alloc_page_count * 8 / 1024) as user_objects_alloc_mb,
                        SUM(user_objects_dealloc_page_count * 8 / 1024) as user_objects_dealloc_mb
                    FROM
                        sys.dm_db_task_space_usage
                    GROUP BY
                        session_id
                ) AS tempdb on se.session_id = tempdb.session_id
    OUTER APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle)as qt
WHERE 
    [program_name] <> 'ExpertforSQLServer'
    AND ec.session_id in (54) --源头


--会话->常规->空闲会话(每5分钟)
SELECT  s.session_id ,
        t.transaction_id ,
        a.transaction_begin_time ,
        s.login_time ,
        s.last_request_start_time ,
        s.last_request_end_time ,
        GETDATE() AS collect_time ,
        last_individual_query = qt.text ,
        s.login_name ,
        s.[host_name] ,
        s.[program_name] ,
        s.host_process_id ,
        s.client_interface_name ,        
        s.transaction_isolation_level
FROM    sys.dm_exec_sessions s
        LEFT JOIN sys.dm_tran_session_transactions (NOLOCK) t ON s.session_id = t.session_id
        LEFT JOIN sys.dm_tran_active_transactions (NOLOCK) a ON t.transaction_id = a.transaction_id
        LEFT JOIN sys.dm_exec_connections (NOLOCK) ec ON s.session_id = ec.session_id
        CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS qt
WHERE   s.session_id > 50
        AND s.[program_name] <> 'ExpertforSQLServer'
        AND s.status = 'sleeping'
        AND s.last_request_end_time < DATEADD(minute, -10, GETDATE())
OPTION (MAXDOP 2)
/********会话 End********/


/********查询语句 Start********/
--服务端Trace跟踪慢查询(duration>=3s)的语句
/********查询语句 End********/


/********执行计划 Start********/
--执行计划->常规->执行计划
SELECT
    individual_query = SUBSTRING (text, (statement_start_offset/2)+1, ((CASE WHEN statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), text)) * 2 ELSE statement_end_offset END - statement_start_offset)/2)+1),
    parent_query = text,
    CONVERT(VARCHAR(100),creation_time,120) creation_time,
    CONVERT(VARCHAR(100),last_execution_time,120) last_execution_time,
    execution_count,
    total_elapsed_time,
    avg_elapsed_time = total_elapsed_time / execution_count,
    min_elapsed_time,
    max_elapsed_time,
    total_worker_time,
    avg_worker_time = total_worker_time / execution_count,
    min_worker_time,
    max_worker_time,    
    total_logical_reads,
    avg_logical_reads = total_logical_reads / execution_count,
    min_logical_reads,
    max_logical_reads,    
    total_logical_writes,
    avg_logical_writes = total_logical_writes / execution_count,
    min_logical_writes,
    max_logical_writes,
    total_physical_reads,
    avg_physical_reads = total_physical_reads / execution_count,
    min_physical_reads,
    max_physical_reads,
    plan_handle,
    query_plan
INTO #EFS_SqlPlan    
FROM 
    sys.dm_exec_query_stats qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY
    sys.dm_exec_query_plan(plan_handle) qy
WHERE 
    last_execution_time > '1900/1/1 0:00:00'
    AND total_elapsed_time / execution_count / 1000 >= 500
ORDER BY execution_count 
OPTION (MAXDOP 2)
SELECT * FROM #EFS_SqlPlan OPTION (MAXDOP 2)
DROP TABLE #EFS_SqlPlan
/********执行计划 End********/


/********数据库 Start********/
--数据库->常规->概况
IF OBJECT_ID('tempdb..#DBSummary_Temp', N'U') IS NOT NULL
    DROP TABLE #DBSummary_Temp
SELECT  database_id ,
        name ,
        [compatibility_level] ,
        recovery_model_desc ,
        create_date
INTO    #DBSummary_Temp
FROM    sys.databases
WHERE   name NOT IN ( 'master', 'model', 'msdb', 'tempdb' )
        AND [state] = 0
        AND user_access = 0
ORDER BY name

IF OBJECT_ID('tempdb..#DBItemCount_Temp', N'U') IS NOT NULL
    DROP TABLE #DBItemCount_Temp
CREATE TABLE #DBItemCount_Temp
(
    database_id INT ,
    data_size_mb FLOAT ,
    log_size_mb FLOAT ,
    table_count BIGINT ,
    view_count BIGINT ,
    stored_proc_count BIGINT ,
    function_count BIGINT    
)

DECLARE @dbname NVARCHAR(255)
DECLARE RowCur CURSOR STATIC
FOR SELECT name FROM #DBSummary_Temp
OPEN RowCur
FETCH NEXT FROM RowCur INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC('USE [' + @dbname + ']' +
'INSERT INTO #DBItemCount_Temp
SELECT DB_ID() AS database_id ,
ROUND(( CONVERT(FLOAT, SUM(size)) * ( 8192.0 / 1024.0 ) / 1024 ), 2) AS data_size_mb,
(
    SELECT ROUND(( CONVERT(FLOAT, SUM(size)) * ( 8192.0 / 1024.0 ) / 1024 ), 2) FROM sys.database_files WHERE [type] = 1
) AS log_size_mb,
(
    SELECT COUNT([object_id]) FROM sys.tables
) AS table_count,
(
    SELECT COUNT([object_id]) FROM sys.views
) AS view_count,
(
    SELECT COUNT([object_id]) FROM sys.procedures
) AS stored_proc_count,
(
    SELECT COUNT([object_id]) FROM sys.objects WHERE [type] IN (''AF'',''FN'',''FS'',''FT'',''IF'',''TF'')
) AS function_count
FROM sys.database_files WHERE [type] = 0')
FETCH NEXT FROM RowCur INTO @dbname
END
CLOSE RowCur
DEALLOCATE RowCur

SELECT  db.database_id ,
        name ,
        [compatibility_level] ,
        recovery_model_desc ,
        create_date ,
        data_size_mb ,
        log_size_mb ,
        table_count ,
        view_count ,
        stored_proc_count ,
        function_count
FROM    #DBSummary_Temp db
LEFT JOIN #DBItemCount_Temp c
ON db.database_id = c.database_id

DROP TABLE #DBSummary_Temp
DROP TABLE #DBItemCount_Temp


--数据库->tempdb->文件(数据库->数据库->文件 使用相同的脚本)(每5分钟)
SELECT  DB_NAME(DB_ID()) AS [db_name] ,
        df.[name] AS logic_name ,
        df.[type] ,
        ds.name AS file_group ,
        ROUND(( CONVERT(FLOAT, df.size) * ( 8192.0 / 1024.0 ) / 1024 ), 2) AS data_size_mb ,
        CAST(CASE df.type
               WHEN 2 THEN 0
               ELSE ROUND(( CAST(FILEPROPERTY(df.name, 'SpaceUsed') AS FLOAT) * ( 8192.0 / 1024.0 ) / 1024 ), 2) 
             END AS FLOAT) AS used_size_mb ,
        df.is_percent_growth ,
        CASE df.is_percent_growth
          WHEN 1 THEN df.growth
          ELSE ROUND(( CONVERT(FLOAT, df.growth) * ( 8192.0 / 1024.0 ) / 1024 ), 2)
        END AS growth ,
        CASE df.max_size
          WHEN -1 THEN -1
          ELSE ROUND(( CONVERT(FLOAT, df.max_size) * ( 8192.0 / 1024.0 ) / 1024 ), 2)
        END AS max_size_mb ,
        vfs.io_stall , 
        vfs.io_stall_read_ms ,       
        vfs.io_stall_write_ms ,
        ROUND(( CONVERT(FLOAT, vfs.num_of_bytes_read) / 1024.0 ), 2) AS read_kb ,
        ROUND(( CONVERT(FLOAT, vfs.num_of_bytes_written) / 1024.0 ), 2) AS written_kb ,        
        vfs.num_of_reads ,
        vfs.num_of_writes ,
        ISNULL(db_pending.pending_count,0) AS pending_count,
        df.physical_name
FROM    sys.database_files df
        LEFT JOIN sys.data_spaces ds ON df.data_space_id = ds.data_space_id
        LEFT JOIN sys.dm_io_virtual_file_stats(NULL, NULL) AS vfs
        ON vfs.database_id = DB_ID() AND vfs.file_id = df.file_id
        LEFT JOIN
        (
            SELECT  database_id ,
                    file_id ,
                    COUNT(io_pending) pending_count
            FROM    sys.dm_io_virtual_file_stats(NULL, NULL) t1 ,
                    sys.dm_io_pending_io_requests AS t2
            WHERE   t1.file_handle = t2.io_handle
            GROUP BY database_id ,
                    file_id
        ) AS db_pending ON db_pending.database_id = DB_ID() AND db_pending.file_id = df.file_id


--数据库->tempdb->空间(每5分钟)
SELECT  SUM(user_object_reserved_page_count) * 8 AS user_object_reserved_kb ,
        SUM(internal_object_reserved_page_count) * 8 AS internal_object_reserved_kb ,
        SUM(version_store_reserved_page_count) * 8 AS version_store_reserved_kb ,
        SUM(unallocated_extent_page_count) * 8 AS unallocated_extent_kb ,
        SUM(mixed_extent_page_count) * 8 AS mixed_extent_kb
FROM    tempdb.sys.dm_db_file_space_usage


--数据库->数据库->配置
CREATE TABLE #expert_dbcc
    (
      ID INT IDENTITY(1, 1)
             PRIMARY KEY ,
      ParentObject VARCHAR(255) ,
      ChildObject VARCHAR(255) ,
      Field VARCHAR(255) ,
      ConfigValue VARCHAR(255)
    ) 

INSERT  INTO #expert_dbcc
        EXEC ( 'DBCC DBInfo() With TableResults, NO_INFOMSGS')
DECLARE @dbcheck_date DATETIME
SELECT DISTINCT  @dbcheck_date = ConfigValue
        FROM    #expert_dbcc
        WHERE   Field = 'dbi_dbccLastKnownGood'
DECLARE @source_create_date DATETIME
SELECT DISTINCT  @source_create_date = ConfigValue
        FROM    #expert_dbcc
        WHERE   Field = 'dbi_crdate'
DROP TABLE #expert_dbcc

DECLARE @db_size_mb FLOAT
SELECT @db_size_mb=ROUND(( CONVERT(FLOAT, SUM(size)) * ( 8192.0 / 1024.0 ) / 1024 ), 2) FROM sys.database_files

SELECT  name ,
        database_id ,
        @db_size_mb AS dbsize_mb ,
        collation_name ,
        recovery_model_desc ,
        [compatibility_level] ,
        is_broker_enabled ,
        page_verify_option_desc ,
        is_parameterization_forced ,
        is_recursive_triggers_on ,
        snapshot_isolation_state_desc ,
        is_read_committed_snapshot_on ,
        is_auto_create_stats_on ,
        is_auto_update_stats_on ,
        is_auto_close_on ,
        is_auto_shrink_on ,
        is_auto_update_stats_async_on ,
        @source_create_date AS source_create_date ,
        create_date ,
        @dbcheck_date AS checkdb_date ,
        is_cdc_enabled
FROM    sys.databases db
WHERE   db.database_id = DB_ID()
ORDER BY database_id


--数据库->数据库->文件(参考:数据库->tempdb->文件)


--数据库->数据库->空间
CREATE TABLE #TableInfo
    (
      [db_name] sysname ,
      [schema] VARCHAR(1000) ,
      [name] VARCHAR(1000) ,
      [object_type] INT,
      [rows] INT ,
      [reserved_kb] FLOAT ,
      [data_kb] FLOAT ,
      [index_size_kb] FLOAT ,
      [unused_kb] FLOAT ,
      [create_date] DATETIME ,
      [modify_date] DATETIME ,
    )
DECLARE cur CURSOR
FOR
    SELECT t.[object_id]
    FROM    sys.tables t
            JOIN sys.schemas AS s ON t.schema_id = s.schema_id 
    WHERE   t.[type] = 'U'  
    UNION
    SELECT v.[object_id]
    FROM    sys.views v
            JOIN sys.schemas AS s ON v.schema_id = s.schema_id 
    WHERE   v.[type] = 'V'  
DECLARE @objId INT
OPEN cur
FETCH NEXT FROM cur INTO @objId
WHILE @@FETCH_STATUS = 0 
    BEGIN
        DECLARE @type character(2) -- The object type.
            ,
            @pages BIGINT            -- Working variable for size calc.
            ,
            @dbname sysname ,
            @dbsize BIGINT ,
            @logsize BIGINT ,
            @reservedpages BIGINT ,
            @usedpages BIGINT ,
            @rowCount BIGINT
    
        SELECT  @reservedpages = SUM(reserved_page_count) ,
                @usedpages = SUM(used_page_count) ,
                @pages = SUM(CASE WHEN ( index_id < 2 )
                                  THEN ( in_row_data_page_count
                                         + lob_used_page_count
                                         + row_overflow_used_page_count )
                                  ELSE 0
                             END) ,
                @rowCount = SUM(CASE WHEN ( index_id < 2 ) THEN row_count
                                     ELSE 0
                                END)
        FROM    sys.dm_db_partition_stats
        WHERE   object_id = @objId;

    /*
    ** Check if table has XML Indexes or Fulltext Indexes which use internal tables tied to this table
    */
        IF ( SELECT COUNT(*)
             FROM   sys.internal_tables
             WHERE  parent_id = @objId
                    AND internal_type IN ( 202, 204, 207, 211, 212, 213, 214,
                                           215, 216, 221, 222, 236 )
           ) > 0 
            BEGIN
        /*
        **  Now calculate the summary data. Row counts in these internal tables don't 
        **  contribute towards row count of original table.
        */
                SELECT  @reservedpages = @reservedpages
                        + SUM(reserved_page_count) ,
                        @usedpages = @usedpages + SUM(used_page_count)
                FROM    sys.dm_db_partition_stats p ,
                        sys.internal_tables it
                WHERE   it.parent_id = @objId
                        AND it.internal_type IN ( 202, 204, 207, 211, 212, 213,
                                                  214, 215, 216, 221, 222, 236 )
                        AND p.object_id = it.object_id;
            END
        IF OBJECTPROPERTY(@objId,'IsTable')=1
        BEGIN
        INSERT  INTO #TableInfo        
                SELECT  DB_NAME(DB_ID()) ,
                        s.name ,
                        t.name ,
                        1,
                        rows = CONVERT (CHAR(20), @rowCount) ,
                        reserved_kb = CONVERT(FLOAT, STR(@reservedpages * 8,
                                                         15, 0)) ,
                        data_kb = CONVERT(FLOAT, STR(@pages * 8, 15, 0)) ,
                        index_size_kb = CONVERT(FLOAT, STR(( CASE
                                                              WHEN @usedpages > @pages
                                                              THEN ( @usedpages - @pages )
                                                              ELSE 0
                                                             END ) * 8, 15, 0)) ,
                        unused_kb = CONVERT(FLOAT, STR(( CASE WHEN @reservedpages > @usedpages
                                                              THEN ( @reservedpages - @usedpages )
                                                              ELSE 0
                                                         END ) * 8, 15, 0)) ,
                        t.create_date ,
                        t.modify_date 
                FROM    sys.tables t ,
                        sys.schemas s
                WHERE   t.object_id = @objId
                        AND t.schema_id = s.schema_id  
        END
        ELSE
        BEGIN
        INSERT  INTO #TableInfo        
                SELECT  DB_NAME(DB_ID()) ,
                        s.name ,
                        v.name ,
                        2,
                        rows = CONVERT (CHAR(20), @rowCount) ,
                        reserved_kb = CONVERT(FLOAT, STR(@reservedpages * 8,
                                                         15, 0)) ,
                        data_kb = CONVERT(FLOAT, STR(@pages * 8, 15, 0)) ,
                        index_size_kb = CONVERT(FLOAT, STR(( CASE
                                                              WHEN @usedpages > @pages
                                                              THEN ( @usedpages - @pages )
                                                              ELSE 0
                                                             END ) * 8, 15, 0)) ,
                        unused_kb = CONVERT(FLOAT, STR(( CASE WHEN @reservedpages > @usedpages
                                                              THEN ( @reservedpages - @usedpages )
                                                              ELSE 0
                                                         END ) * 8, 15, 0)) ,
                        v.create_date ,
                        v.modify_date 
                FROM    sys.views v ,
                        sys.schemas s
                WHERE   v.object_id = @objId
                        AND v.schema_id = s.schema_id  
        END                        
        FETCH NEXT FROM cur INTO @objId
    END
CLOSE cur
DEALLOCATE cur
SELECT TOP 50 *
FROM    #TableInfo
ORDER BY reserved_kb DESC
DROP TABLE  #TableInfo


--数据库->数据库->不规范的表
SELECT DISTINCT
        s.name AS [schema_name] ,
        t.name AS [table_name] ,
        ps.row_count ,
        OBJECTPROPERTY(t.[object_id], 'TableHasClustIndex') AS hasClustIndex ,
        OBJECTPROPERTY(t.[object_id], 'TableHasTextImage ') AS hasTextImage ,
        CASE WHEN d.tbl_count >= 1 THEN 1
             ELSE 0
        END AS hasGuid
FROM    sys.schemas s
        LEFT JOIN sys.tables t ON t.[schema_id] = s.[schema_id]  
        LEFT JOIN ( SELECT  object_id ,
                            SUM(row_count) AS row_count
                    FROM    sys.dm_db_partition_stats
                    WHERE   index_id < 2
                    GROUP BY object_id ,
                            index_id
                  ) ps ON t.[object_id] = ps.[object_id]
                          AND OBJECTPROPERTY(t.[object_id], 'IsMSShipped') = 0
        LEFT JOIN ( SELECT  c.[object_id] ,
                            COUNT(c.[object_id]) AS tbl_count
                    FROM    sys.columns c
                            JOIN sys.indexes i ON i.[object_id] = c.[object_id]
                                                  AND i.[type] = 1
                                                  AND c.system_type_id = 36
                                                  AND OBJECTPROPERTY(i.[object_id],
                                                              'IsMSShipped') = 0
                            JOIN sys.index_columns ic ON i.[object_id] = ic.[object_id]
                                                         AND i.[object_id] = c.[object_id]
                                                         AND i.index_id = ic.index_id
                                                         AND c.column_id = ic.column_id
                            LEFT JOIN sys.default_constraints d ON d.parent_object_id = i.[object_id]
                                                              AND d.parent_column_id = c.column_id
                    WHERE   d.[definition] IS NULL
                            OR UPPER(d.[definition]) NOT LIKE '%NEWSEQUENTIALID()%'
                    GROUP BY c.[object_id]
                  ) d ON t.[object_id] = d.[object_id]
WHERE   OBJECTPROPERTY(t.[object_id], 'TableHasClustIndex') = 0
        OR OBJECTPROPERTY(t.[object_id], 'TableHasTextImage ') = 1
        OR d.tbl_count >= 1


--数据库->数据库->备份
DECLARE @last_backup_date DATETIME
SELECT TOP 2
        @last_backup_date = backup_finish_date
FROM    msdb.dbo.backupset
WHERE   [type] = 'D' AND database_name = DB_NAME(DB_ID())
ORDER BY backup_finish_date DESC
PRINT @last_backup_date
IF @last_backup_date IS NOT NULL 
    BEGIN
        SELECT  bs.database_name ,
                bs.name AS backup_name ,
                ROUND(( CONVERT(FLOAT, backup_size) / 1024.0 / 1024 ), 2) AS backup_size_mb ,
                recovery_model ,
                backup_start_date ,
                backup_finish_date ,
                GETDATE() AS collect_date ,
                bs.[type] AS backup_type ,
                first_lsn ,
                last_lsn ,
                bd.physical_device_name AS backup_path
        FROM    msdb.dbo.backupset bs ,
                msdb.dbo.backupmediafamily bd
        WHERE   bs.media_set_id = bd.media_set_id
                AND bs.database_name = DB_NAME(DB_ID())
                AND bs.database_name IS NOT NULL
                AND bs.backup_finish_date >= @last_backup_date
        ORDER BY backup_finish_date DESC
    END
    
    
--数据库->索引->缺失索引
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT  DB_NAME(DB_ID()) [db_name] ,
        s.name AS [schema_name] ,
        o.name AS table_name ,
        equality_columns ,
        inequality_columns ,
        included_columns ,
        user_seeks ,
        user_scans ,
        last_user_seek ,
        last_user_scan ,
        avg_total_user_cost ,
        avg_user_impact ,
        dps.row_count
FROM    sys.dm_db_missing_index_details dd
        JOIN sys.dm_db_missing_index_groups dg ON dg.index_handle = dd.index_handle
        JOIN sys.dm_db_missing_index_group_stats ds ON dg.index_group_handle = ds.group_handle
        JOIN sys.objects o ON dd.[object_id] = o.[object_id]
                              AND o.[type] = 'U'
        JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
        JOIN ( SELECT   object_id ,
                        SUM(row_count) AS row_count
               FROM     sys.dm_db_partition_stats
               WHERE    index_id < 2
               GROUP BY object_id ,
                        index_id
             ) dps ON dd.[object_id] = dps.[object_id]
WHERE   dd.database_id = DB_ID()
        AND OBJECTPROPERTY(o.[object_id], 'IsMSShipped') = 0
ORDER BY dps.row_count DESC ,
        user_seeks DESC
OPTION (MAXDOP 2)


--数据库->索引->无索引外键
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT  DB_NAME(DB_ID()) [db_name] ,
        fk.parent_object_id ,
        fc.parent_column_id ,
        fc.constraint_column_id ,
        s1.name AS [schema_name] ,
        t1.name AS table_name ,
        fk.name AS foreign_key_name ,
        c1.name AS column_name ,
        fk.create_date ,
        fk.modify_date ,
        dps.row_count AS foreign_row_count
        INTO #ForeignKey      
FROM    sys.foreign_keys fk
        JOIN sys.foreign_key_columns fc ON fk.[object_id] = fc.constraint_object_id
        JOIN sys.tables t1 ON fk.parent_object_id = t1.[object_id]
        JOIN sys.schemas s1 ON t1.[schema_id] = s1.[schema_id]
        JOIN sys.columns c1 ON t1.[object_id] = c1.[object_id]
                               AND fc.parent_column_id = c1.column_id
        JOIN ( SELECT   object_id ,
                        SUM(row_count) AS row_count
               FROM     sys.dm_db_partition_stats
               WHERE    index_id < 2
               GROUP BY object_id ,
                        index_id
             ) dps ON t1.[object_id] = dps.[object_id]
WHERE   OBJECTPROPERTY(t1.[object_id], 'IsMSShipped') = 0
ORDER BY dps.row_count DESC
OPTION (MAXDOP 2)

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT  DB_NAME(DB_ID()) [db_name] ,
        [object_id] ,
        index_id ,
        key_ordinal ,
        column_id
        INTO #Index
FROM    sys.index_columns
ORDER BY [object_id] ,
        index_id ,
        key_ordinal
OPTION (MAXDOP 2)

SELECT a.* FROM #ForeignKey a 
LEFT JOIN #Index b
ON a.parent_object_id=b.object_id
AND a.constraint_column_id=b.key_ordinal
AND a.parent_column_id=b.column_id
WHERE b.object_id is null
ORDER BY foreign_row_count DESC
DROP TABLE #ForeignKey
DROP TABLE #Index


--数据库->索引->重复索引 --重复索引存在问题
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DECLARE @start_time DATETIME
SELECT  @start_time = create_date
FROM    sys.databases
WHERE   name = 'tempdb'
IF DATEDIFF(DAY, @start_time, GETDATE()) > 60 
    BEGIN
        SELECT DISTINCT
                DB_NAME(DB_ID()) [db_name] ,
                s.name AS [schema_name] ,
                t.name AS table_name ,
                i.name AS index_name ,
                user_seeks ,
                user_scans ,
                user_lookups ,
                user_updates ,
                last_user_seek ,
                last_user_scan ,
                last_user_lookup ,
                last_user_update ,
                system_seeks ,
                system_scans ,
                system_lookups ,
                system_updates ,
                last_system_seek ,
                last_system_scan ,
                last_system_lookup ,
                last_system_update ,
                dps.row_count ,
                i.is_disabled ,
                i.fill_factor ,
                i.has_filter ,
                i.filter_definition
        FROM    sys.tables t
                LEFT JOIN sys.indexes i ON i.[object_id] = t.[object_id]
                                           AND OBJECTPROPERTY(t.[object_id],
                                                              'IsMSShipped') = 0
                LEFT JOIN sys.schemas s ON s.[schema_id] = t.[schema_id]
                LEFT JOIN ( SELECT  object_id ,
                                            SUM(row_count) AS row_count
                                    FROM    sys.dm_db_partition_stats
                                    WHERE   index_id < 2
                                    GROUP BY object_id ,
                                            index_id
                                  ) dps ON i.[object_id] = dps.[object_id]
                LEFT JOIN sys.dm_db_index_usage_stats di ON di.[object_id] = i.[object_id]
                                                            AND di.[object_id] = t.[object_id]
                                                            AND di.[object_id] = dps.[object_id]
                                                            AND di.index_id = i.index_id
                                                            AND di.database_id = DB_ID()
        WHERE   i.name IS NOT NULL
        ORDER BY dps.row_count DESC    
        OPTION (MAXDOP 2)
    END


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT  DB_NAME(DB_ID()) [db_name] ,
        i.[object_id] ,
        s.name AS [schema_name] ,
        t.name AS table_name ,
        i.name AS index_name ,
        ic.index_column_id ,
        c.name AS column_name ,
        ic.is_included_column ,
        dps.row_count ,
        i.is_disabled ,
        i.fill_factor ,
        i.has_filter ,
        i.filter_definition
FROM    sys.indexes i
        JOIN sys.index_columns ic ON i.[object_id] = ic.[object_id]
                                     AND i.index_id = ic.index_id
        JOIN sys.columns c ON i.[object_id] = c.[object_id]
                              AND ic.column_id = c.column_id
        JOIN sys.tables t ON i.[object_id] = t.[object_id]
        JOIN sys.schemas s ON t.[schema_id] = s.[schema_id]
        JOIN ( SELECT   object_id ,
                        SUM(row_count) AS row_count
               FROM     sys.dm_db_partition_stats
               WHERE    index_id < 2
               GROUP BY object_id ,
                        index_id
             ) dps ON t.[object_id] = dps.[object_id]
WHERE   i.[type] > 1
        AND OBJECTPROPERTY(t.[object_id], 'IsMSShipped') = 0
ORDER BY dps.row_count DESC ,
        i.[object_id] ,
        i.index_id ,
        ic.index_column_id
OPTION (MAXDOP 2)


--数据库->索引->统计老化的索引
CREATE TABLE #EFS_Statics
(
    [obj_id] int,
    [schema_name] sysname,
    table_name sysname,
    index_name sysname,
    index_type tinyint,
    is_disabled bit,
    key_ordinal tinyint,
    column_name sysname,
    is_included_column bit,
    fill_factor tinyint,
    has_filter bit,
    filter_definition nvarchar(max) ,
    last_update datetime,
    filter_rows bigint,    
    rows_simple bigint,
    unfilter_rows bigint,
    now_total_rows bigint,
)
CREATE TABLE #EFS_Statics_Rows
(
    Name sysname COLLATE SQL_Latin1_General_CP1_CI_AS ,
    LastUpdate datetime ,
    FilteredRows bigint ,
    RowsSampled bigint ,
    Steps int ,
    Density int ,
    AverageKeyLength float ,
    StringIndex nvarchar(max) ,
    FilterExpression nvarchar(MAX),
    UnfilteredRows bigint
)
DECLARE cur_stats CURSOR READ_ONLY FORWARD_ONLY
FOR
    SELECT  o.[object_id] ,
            s.name AS [schema_name] ,
            o.name AS [table_name] ,
            i.name AS index_name
    FROM    sys.objects o
            JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
                                  AND o.is_ms_shipped = 0
                                  AND o.[type] = 'U'
            JOIN sys.indexes i ON i.[object_id] = o.[object_id]
            JOIN ( SELECT   object_id ,
                            SUM(row_count) AS row_count
                   FROM     sys.dm_db_partition_stats
                   WHERE    index_id < 2
                            AND row_count > 200000
                   GROUP BY object_id ,
                            index_id
                 ) dps ON o.[object_id] = dps.[object_id]
    WHERE   i.name IS NOT NULL            
DECLARE @obj_id int
DECLARE @schema_name sysname
DECLARE @table_name sysname 
DECLARE @index_name sysname
DECLARE @obj_name nvarchar(256)
DECLARE @sql nvarchar(500)
 
OPEN cur_stats
FETCH NEXT FROM cur_stats INTO @obj_id, @schema_name, @table_name, @index_name 
WHILE @@FETCH_STATUS = 0 
    BEGIN
        SET @obj_name = '[' + @schema_name + '].[' + @table_name + ']'
        SET @sql = 'DBCC SHOW_STATISTICS(''' + @obj_name + ''',N'''
            + @index_name + ''') WITH STAT_HEADER '
        
        INSERT  INTO #EFS_Statics_Rows  EXEC (@sql)
        INSERT  INTO #EFS_Statics
                SELECT  @obj_id AS obj_id ,
                        @schema_name AS [schema_name] ,
                        @table_name AS table_name ,
                        i.name AS index_name ,
                        i.[type] AS index_type ,
                        i.is_disabled ,
                        ic.key_ordinal ,
                        c.name AS column_name ,
                        ic.is_included_column ,
                        i.fill_factor ,
                        i.has_filter ,
                        i.filter_definition ,
                        sr.LastUpdate AS last_update ,
                        sr.FilteredRows AS filter_rows ,
                        sr.RowsSampled AS rows_simple ,
                        sr.UnfilteredRows AS unfilter_rows ,
                        dps.row_count AS now_total_rows
                FROM    sys.indexes i 
                        JOIN sys.index_columns ic ON i.[object_id] = ic.[object_id]
                        AND i.index_id = ic.index_id
                        JOIN sys.columns c ON i.[object_id] = c.[object_id]
                        AND c.[object_id] = ic.[object_id]
                        AND ic.column_id = c.column_id
                        JOIN 
                        (
                            SELECT  object_id ,
                                    SUM(row_count) AS row_count
                            FROM    sys.dm_db_partition_stats
                            WHERE   index_id < 2
                            GROUP BY object_id ,
                                    index_id
                        ) dps ON i.[object_id] = dps.[object_id] AND c.[object_id] = dps.[object_id]
                        JOIN  #EFS_Statics_Rows sr ON i.name = sr.Name
                WHERE 
                        i.[object_id] = @obj_id
                        AND DATEADD(dd, -7, GETDATE()) >= sr.LastUpdate
                        AND dps.row_count - 100000 >= sr.UnfilteredRows

        TRUNCATE TABLE #EFS_Statics_Rows
        FETCH NEXT FROM cur_stats INTO @obj_id, @schema_name, @table_name, @index_name 
    END
CLOSE cur_stats
DEALLOCATE cur_stats
DROP TABLE #EFS_Statics_Rows
SELECT * FROM    #EFS_Statics
DROP TABLE #EFS_Statics


--数据库->定义->对象定义
--触发器
SELECT  t.parent_id AS [objId] ,
        t.[object_id] AS triggerId ,
        t.[type] AS [Type] ,
        sm.[definition] ,
        s.name AS SchemaName ,
        o.name AS TriggerName ,
        t.is_disabled AS isDisabled ,
        sm.uses_ansi_nulls AS ANSI ,
        sm.uses_quoted_identifier AS Quoted ,
        o.create_date ,
        o.modify_date
FROM    sys.triggers t
        INNER JOIN sys.objects o ON t.object_id = o.object_id
                                    AND t.parent_class = 1
        INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
        LEFT JOIN sys.sql_modules sm ON t.object_id = sm.object_id
OPTION (MAXDOP 2)

--视图
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT  v.object_id AS objId ,
        s.name AS [schema_name],
        v.name AS view_name ,
        m.definition ,
        m.uses_ansi_nulls AS ANSI ,
        m.uses_quoted_identifier AS Quoted
FROM    sys.views v ,
        sys.schemas s ,
        sys.sql_modules m
WHERE   v.object_id = m.object_id
        AND v.schema_id = s.schema_id
        AND OBJECTPROPERTY(m.object_id, 'IsMSShipped') = 0

--存储过程
SELECT  v.[object_id] AS [objId] ,
        s.name AS [schema_name] ,
        v.name AS proc_name ,
        v.create_date ,
        v.modify_date ,
        pro.first_execution_time ,
        pro.last_execution_time ,
        pro.execution_count ,
        v.[type] ,
        m.uses_ansi_nulls AS ANSI ,
        m.uses_quoted_identifier AS Quoted ,
        m.[definition]
FROM    sys.procedures v
        INNER JOIN sys.schemas s ON v.[schema_id] = s.[schema_id]
                                    AND OBJECTPROPERTY(v.[object_id],'IsMSShipped') = 0  
        LEFT JOIN sys.sql_modules m ON v.[object_id] = m.[object_id]
        LEFT JOIN ( SELECT  database_id ,
                            [object_id] ,
                            MIN(cached_time) AS first_execution_time ,
                            MAX(last_execution_time) AS last_execution_time ,
                            SUM(execution_count) AS execution_count
                    FROM    sys.dm_exec_procedure_stats
                    WHERE   database_id = DB_ID()
                    GROUP BY database_id ,
                            [object_id]
                  ) pro ON v.[object_id] = pro.[object_id]
                           AND m.[object_id] = pro.[object_id]
OPTION (MAXDOP 2)

--函数
SELECT  o.[object_id] AS [objId] ,
        s.name AS [schema_name] ,
        o.name AS function_name ,
        o.[type] ,
        m.[definition] ,
        m.uses_ansi_nulls AS ANSI ,
        m.uses_quoted_identifier AS Quoted
FROM    sys.objects o
        INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
                                    AND OBJECTPROPERTY(o.[object_id], 'IsMSShipped') = 0
                                    AND o.type IN ( 'FN', 'IF', 'TF', 'AF', 'FS', 'FT' )  
        LEFT JOIN sys.sql_modules m ON o.[object_id] = m.[object_id]
OPTION (MAXDOP 2)

--用户自定义数据类型
SELECT  s.name AS [schema_name] ,
        ut.name AS user_type ,
        st.name AS sys_type ,
        ut.max_length ,
        ut.precision ,
        ut.scale ,
        ut.is_nullable
FROM    sys.types ut ,
        sys.types st ,
        sys.schemas s
WHERE   ut.system_type_id = st.user_type_id
        AND ut.[schema_id] = s.[schema_id]
        AND ut.is_user_defined = 1
        AND ut.is_assembly_type = 0
        AND ut.is_table_type = 0

--用户自定义表类型        
SELECT DISTINCT
        c.[object_id] AS [objId] ,
        c.column_id ,
        c.name ,
        CASE c.is_computed
          WHEN 1 THEN e.[text]
          ELSE NULL
        END AS express ,
        CASE c.system_type_id
          WHEN c.user_type_id THEN 0
          ELSE 1
        END AS is_usertype ,
        s.name 'UserTypeSchema' ,
        t.name 'TypeName' ,
        c.max_length ,
        c.[precision] ,
        c.scale ,
        CASE c.is_identity
          WHEN 1
          THEN 'identity(' + CONVERT(NVARCHAR(20), i.seed_value) + ','
               + CONVERT(NVARCHAR(20), i.increment_value) + ')'
          ELSE NULL
        END AS colidentity ,
        c.is_nullable ,
        c.default_object_id
FROM    sys.table_types tt
        JOIN sys.columns AS c ON tt.type_table_object_id = c.[object_id]
        JOIN sys.types AS t ON c.user_type_id = t.user_type_id
        JOIN sys.schemas AS s ON t.schema_id = s.schema_id
        LEFT JOIN syscomments AS e ON c.object_id = e.id
        LEFT JOIN sys.identity_columns AS i ON c.object_id = i.object_id
ORDER BY c.[object_id] ,
        c.column_id

SELECT  t.type_table_object_id AS [objId] ,
        s.name AS [schema_name] ,
        t.name AS [type_name] ,
        o.create_date ,
        o.modify_date
FROM    sys.table_types t ,
        sys.schemas s ,
        sys.objects o
WHERE   t.[schema_id] = s.[schema_id]
        AND o.object_id = t.type_table_object_id
        AND t.is_user_defined = 1
        AND t.is_table_type = 1
/********数据库 End********/


/********日志 Start********/
--日志->常规->日志
CREATE TABLE #Enum_Err
(
    FileId INT,
    SaveDate DATETIME,
    FileSize BIGINT
)
INSERT INTO #Enum_Err
EXEC xp_enumerrorlogs 1
SELECT MAX(FileId) max_file_id FROM #Enum_Err
DROP TABLE #Enum_Err

EXEC xp_readerrorlog 6,1,NULL,NULL,NULL,NULL,'ASC'
/********日志 End********/


/********作业 Start********/
--作业->常规->作业
SELECT  '1' AS checks ,
        j.name AS job_name ,
        js.step_id ,
        js.step_name ,
        CAST(j.job_id AS VARCHAR(40)) AS job_id ,
        js.database_name ,
        js.command ,
        j.[enabled]
FROM    msdb.dbo.sysjobsteps js
        LEFT JOIN msdb.dbo.sysjobs j ON js.job_id = j.job_id
ORDER BY js.job_id ,
        js.step_id
        

DECLARE @tmp_sp_help_jobhistory TABLE
    (
      instance_id INT NULL ,
      job_id UNIQUEIDENTIFIER NULL ,
      job_name SYSNAME NULL ,
      step_id INT NULL ,
      step_name SYSNAME NULL ,
      sql_message_id INT NULL ,
      sql_severity INT NULL ,
      message NVARCHAR(4000) NULL ,
      run_status INT NULL ,
      run_date INT NULL ,
      run_time INT NULL ,
      run_duration INT NULL ,
      operator_emailed SYSNAME NULL ,
      operator_netsent SYSNAME NULL ,
      operator_paged SYSNAME NULL ,
      retries_attempted INT NULL ,
      server SYSNAME NULL
    )

INSERT  INTO @tmp_sp_help_jobhistory
        EXEC msdb.dbo.sp_help_jobhistory @mode = 'FULL' 

SELECT  t.* , ISNULL(c.exec_count,0) AS exec_count
FROM    ( SELECT    tshj.job_name ,
                    tshj.instance_id ,
                    CAST(tshj.job_id AS VARCHAR(40)) AS job_id ,
                    tshj.step_id ,
                    tshj.step_name ,
                    tshj.sql_message_id ,
                    tshj.message ,
                    tshj.sql_severity ,
                    tshj.run_status ,
                    CASE tshj.run_date
                      WHEN 0 THEN NULL
                      ELSE CONVERT(DATETIME, STUFF(STUFF(CAST(tshj.run_date AS NCHAR(8)),
                                                         7, 0, '-'), 5, 0, '-')
                           + N' '
                           + STUFF(STUFF(SUBSTRING(CAST(1000000
                                                   + tshj.run_time AS NCHAR(7)),
                                                   2, 6), 5, 0, ':'), 3, 0, ':'), 120)
                    END AS run_date ,
                    tshj.run_duration ,
                    tshj.retries_attempted ,
                    tshj.[server] ,
                    ROW_NUMBER() OVER ( PARTITION BY tshj.job_name ORDER BY tshj.instance_id ASC ) AS row_num
          FROM      @tmp_sp_help_jobhistory AS tshj
        ) t
        LEFT JOIN ( SELECT  job_id ,
                            COUNT(job_id) AS exec_count
                    FROM    @tmp_sp_help_jobhistory
                    WHERE   step_id = 0
                    GROUP BY job_id
                  ) c ON t.job_id = c.job_id
WHERE   t.row_num < 200
OPTION  ( MAXDOP 2 )
/********作业 End********/
View Code

Perfmon添加计数器 GreenTrend.xml

<?xml version="1.0" encoding="UTF-16"?>
<DataCollectorSet>
    <Status>0</Status>
    <Duration>86100</Duration>
    <Description>
    </Description>
    <DescriptionUnresolved>
    </DescriptionUnresolved>
    <DisplayName>
    </DisplayName>
    <DisplayNameUnresolved>
    </DisplayNameUnresolved>
    <SchedulesEnabled>-1</SchedulesEnabled>
    <LatestOutputLocation>E:GreenTrendDataCollector</LatestOutputLocation>
    <Name>GreenTrend</Name>
    <OutputLocation>E:GreenTrendDataCollector</OutputLocation>
    <RootPath>E:GreenTrend</RootPath>
    <Segment>0</Segment>
    <SegmentMaxDuration>0</SegmentMaxDuration>
    <SegmentMaxSize>0</SegmentMaxSize>
    <SerialNumber>0</SerialNumber>
    <Server>
    </Server>
    <Subdirectory>DataCollector</Subdirectory>
    <SubdirectoryFormat>1</SubdirectoryFormat>
    <SubdirectoryFormatPattern>
    </SubdirectoryFormatPattern>
    <Task>
    </Task>
    <TaskRunAsSelf>0</TaskRunAsSelf>
    <TaskArguments>
    </TaskArguments>
    <TaskUserTextArguments>
    </TaskUserTextArguments>
    <UserAccount>SYSTEM</UserAccount>
    <Security>O:BAG:S-1-5-21-617102968-4204937376-1093121022-513D:AI(A;;FA;;;SY)(A;;FA;;;BA)(A;;FR;;;LU)(A;;0x1301ff;;;S-1-5-80-2661322625-712705077-2999183737-3043590567-590698655)(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x1200ab;;;LU)(A;ID;FR;;;AU)(A;ID;FR;;;LS)(A;ID;FR;;;NS)</Security>
    <StopOnCompletion>0</StopOnCompletion>
    <PerformanceCounterDataCollector>
        <DataCollectorType>0</DataCollectorType>
        <Name>DataCollector</Name>
        <FileName>InstanceName</FileName>
        <FileNameFormat>1</FileNameFormat>
        <FileNameFormatPattern>\_yyyyMMdd</FileNameFormatPattern>
        <LogAppend>0</LogAppend>
        <LogCircular>0</LogCircular>
        <LogOverwrite>0</LogOverwrite>
        <LatestOutputLocation>E:GreenTrendDataCollectorInstanceName_20161221.blg</LatestOutputLocation>
        <DataSourceName>
        </DataSourceName>
        <SampleInterval>15</SampleInterval>
        <SegmentMaxRecords>0</SegmentMaxRecords>
        <LogFileFormat>3</LogFileFormat>
        <Counter>MemoryAvailable MBytes</Counter>
        <Counter>MemoryPage Reads/sec</Counter>
        <Counter>MemoryPage Writes/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsFull Scans/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsForwarded Records/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsMixed page allocations/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsPage Splits/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsTable Lock Escalations/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsWorkfiles Created/sec</Counter>
        <Counter>MSSQL$SQL08R2:Access MethodsWorktables Created/sec</Counter>
        <Counter>MSSQL$SQL08R2:Buffer ManagerLazy writes/sec</Counter>
        <Counter>MSSQL$SQL08R2:Buffer ManagerPage life expectancy</Counter>
        <Counter>MSSQL$SQL08R2:Databases(_Total)Active Transactions</Counter>
        <Counter>MSSQL$SQL08R2:Databases(_Total)Log Flushes/sec</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsLogins/sec</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsLogouts/sec</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsUser Connections</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsProcesses blocked</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsActive Temp Tables</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsTemp Tables Creation Rate</Counter>
        <Counter>MSSQL$SQL08R2:General StatisticsTemp Tables For Destruction</Counter>
        <Counter>MSSQL$SQL08R2:LatchesLatch Waits/sec</Counter>
        <Counter>MSSQL$SQL08R2:LatchesAverage Latch Wait Time (ms)</Counter>
        <Counter>MSSQL$SQL08R2:Locks(_Total)Lock Requests/sec</Counter>
        <Counter>MSSQL$SQL08R2:Locks(_Total)Lock Wait Time (ms)</Counter>
        <Counter>MSSQL$SQL08R2:Locks(_Total)Lock Waits/sec</Counter>
        <Counter>MSSQL$SQL08R2:Locks(_Total)Average Wait Time (ms)</Counter>
        <Counter>MSSQL$SQL08R2:Locks(_Total)Number of Deadlocks/sec</Counter>
        <Counter>MSSQL$SQL08R2:Memory ManagerConnection Memory (KB)</Counter>
        <Counter>MSSQL$SQL08R2:Memory ManagerMemory Grants Pending</Counter>
        <Counter>MSSQL$SQL08R2:Memory ManagerSQL Cache Memory (KB)</Counter>
        <Counter>MSSQL$SQL08R2:Memory ManagerTarget Server Memory (KB)</Counter>
        <Counter>MSSQL$SQL08R2:Memory ManagerTotal Server Memory (KB)</Counter>
        <Counter>MSSQL$SQL08R2:Plan Cache(_Total)Cache Hit Ratio</Counter>
        <Counter>MSSQL$SQL08R2:SQL StatisticsBatch Requests/sec</Counter>
        <Counter>MSSQL$SQL08R2:SQL StatisticsSQL Compilations/sec</Counter>
        <Counter>MSSQL$SQL08R2:SQL StatisticsSQL Re-Compilations/sec</Counter>
        <Counter>Network Interface(*)Output Queue Length</Counter>
        <Counter>PhysicalDisk(_Total)Avg. Disk Queue Length</Counter>
        <Counter>PhysicalDisk(*)Avg. Disk Read Queue Length</Counter>
        <Counter>PhysicalDisk(*)Avg. Disk Write Queue Length</Counter>
        <Counter>PhysicalDisk(*)Avg. Disk sec/Read</Counter>
        <Counter>PhysicalDisk(*)Avg. Disk sec/Write</Counter>
        <Counter>PhysicalDisk(*)Disk Read Bytes/sec</Counter>
        <Counter>PhysicalDisk(*)Disk Write Bytes/sec</Counter>
        <Counter>Process(sqlservr)\% Processor Time</Counter>
        <Counter>Processor(_Total)\% Processor Time</Counter>
        <Counter>Processor(_Total)\% User Time</Counter>
        <CounterDisplayName>MemoryAvailable MBytes</CounterDisplayName>
        <CounterDisplayName>MemoryPage Reads/sec</CounterDisplayName>
        <CounterDisplayName>MemoryPage Writes/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsFull Scans/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsForwarded Records/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsMixed page allocations/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsPage Splits/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsTable Lock Escalations/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsWorkfiles Created/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Access MethodsWorktables Created/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Buffer ManagerLazy writes/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Buffer ManagerPage life expectancy</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Databases(_Total)Active Transactions</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Databases(_Total)Log Flushes/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsLogins/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsLogouts/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsUser Connections</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsProcesses blocked</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsActive Temp Tables</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsTemp Tables Creation Rate</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:General StatisticsTemp Tables For Destruction</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:LatchesLatch Waits/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:LatchesAverage Latch Wait Time (ms)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Locks(_Total)Lock Requests/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Locks(_Total)Lock Wait Time (ms)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Locks(_Total)Lock Waits/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Locks(_Total)Average Wait Time (ms)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Locks(_Total)Number of Deadlocks/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Memory ManagerConnection Memory (KB)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Memory ManagerMemory Grants Pending</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Memory ManagerSQL Cache Memory (KB)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Memory ManagerTarget Server Memory (KB)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Memory ManagerTotal Server Memory (KB)</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:Plan Cache(_Total)Cache Hit Ratio</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:SQL StatisticsBatch Requests/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:SQL StatisticsSQL Compilations/sec</CounterDisplayName>
        <CounterDisplayName>MSSQL$SQL08R2:SQL StatisticsSQL Re-Compilations/sec</CounterDisplayName>
        <CounterDisplayName>Network Interface(*)Output Queue Length</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(_Total)Avg. Disk Queue Length</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Avg. Disk Read Queue Length</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Avg. Disk Write Queue Length</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Avg. Disk sec/Read</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Avg. Disk sec/Write</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Disk Read Bytes/sec</CounterDisplayName>
        <CounterDisplayName>PhysicalDisk(*)Disk Write Bytes/sec</CounterDisplayName>
        <CounterDisplayName>Process(sqlservr)\% Processor Time</CounterDisplayName>
        <CounterDisplayName>Processor(_Total)\% Processor Time</CounterDisplayName>
        <CounterDisplayName>Processor(_Total)\% User Time</CounterDisplayName>
    </PerformanceCounterDataCollector>
    <DataManager>
        <Enabled>0</Enabled>
        <CheckBeforeRunning>0</CheckBeforeRunning>
        <MinFreeDisk>0</MinFreeDisk>
        <MaxSize>0</MaxSize>
        <MaxFolderCount>0</MaxFolderCount>
        <ResourcePolicy>0</ResourcePolicy>
        <ReportFileName>report.html</ReportFileName>
        <RuleTargetFileName>report.xml</RuleTargetFileName>
        <EventsFileName>
        </EventsFileName>
    </DataManager>
</DataCollectorSet>
View Code

服务端Trace跟踪慢查询(duration>=3s)的语句

/************************************************************
 * 功能说明:查询跟踪目录视图得到运行中的服务器端跟踪定义
 * 注意事项:如果要运行提取出的跟踪定义,请注意调整筛选条件部分参数赋值的位置
 ************************************************************/
-- Create a Queue
DECLARE  @rc             int
        ,@TraceID        int
        ,@MaxFileSize    bigint=50
        ,@DateTime       datetime=dateadd(day,1,getdate())

SET @MaxFileSize = 5
EXEC @rc = sp_trace_create @TraceID output ,2,N'E:GreenTrendhuanCloud_1.0.0SZC20170111_143200SQLText_TempSQLText20170111144333', @MaxFileSize, @DateTime,0
if (@rc != 0) goto error

-- Set the events
DECLARE @on bit = 1
EXEC @rc = sp_trace_setevent @TraceID, 10, 1, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 6, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 8, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 9, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 10, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 11, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 12, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 13, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 14, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 15, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 16, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 17, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 18, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 35, @on
EXEC @rc = sp_trace_setevent @TraceID, 10, 48, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 1, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 6, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 8, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 9, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 10, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 11, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 12, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 13, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 14, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 15, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 16, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 17, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 18, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 35, @on
EXEC @rc = sp_trace_setevent @TraceID, 12, 48, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 1, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 6, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 9, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 10, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 11, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 12, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 13, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 14, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 15, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 16, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 17, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 18, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 35, @on
EXEC @rc = sp_trace_setevent @TraceID, 41, 48, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 1, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 6, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 8, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 9, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 10, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 11, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 12, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 13, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 14, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 15, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 16, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 17, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 18, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 35, @on
EXEC @rc = sp_trace_setevent @TraceID, 45, 48, @on

-- Set the Filters
DECLARE  @Intfilter      int
        ,@BigIntfilter   bigint
-- 请将参数的赋值放置到对应筛选表达式的前面(如果有的话)
SET @BigIntFilter = 3000000--13,0,4
EXEC @rc = sp_trace_setfilter @TraceID, 1, 0, 7, N'%BACKUP%'
EXEC @rc = sp_trace_setfilter @TraceID, 1, 0, 7, N'%WAITFOR%'
EXEC @rc = sp_trace_setfilter @TraceID, 1, 0, 1, N'sp_server_diagnostics'
EXEC @rc = sp_trace_setfilter @TraceID, 13, 0, 4, @BigIntFilter
EXEC @rc = sp_trace_setfilter @TraceID, 13, 0, 1, null

-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- Display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish:
go
View Code

知其然,知其所以然。我们可以根据需求灵活调整,也不用担心被工具屏蔽~

原文地址:https://www.cnblogs.com/Uest/p/6294142.html