0
点赞
收藏
分享

微信扫一扫

sql server2016 性能指标采集

Separes 2023-07-25 阅读 80

SQL Server 2016 性能指标采集

SQL Server 2016 是微软推出的一款高性能、可靠性强的关系型数据库管理系统。在进行数据库性能优化时,了解并监控关键的性能指标是非常重要的。本文将介绍如何使用 SQL Server 2016 的内置功能来采集和监控性能指标。

SQL Server DMV

SQL Server 提供了一组动态管理视图(DMV),用于查询和监控数据库的性能指标。DMV 提供了一系列视图,可以查询数据库的运行状态、资源使用情况、查询执行计划等信息。以下是一些常用的 DMV:

  • sys.dm_os_performance_counters:查询各种系统性能计数器的值,如 CPU 使用率、内存使用情况等。
  • sys.dm_db_index_usage_stats:查询索引的使用情况,包括扫描次数、查找次数等。
  • sys.dm_exec_query_stats:查询查询的执行情况,如执行次数、平均执行时间等。

下面是一个示例,使用 DMV 查询数据库当前的 CPU 使用率:

SELECT 
    object_name AS [Object Name],
    cntr_value AS [CPU Usage]
FROM 
    sys.dm_os_performance_counters
WHERE 
    counter_name = 'Processor Time'
    AND object_name LIKE '%Processor%'
    AND cntr_value > 0

扩展事件(Extended Events)

SQL Server 2016 引入了一种新的事件追踪机制,称为扩展事件(Extended Events),它提供了更灵活和高效的性能监控方式。扩展事件可以用于捕获和分析各种数据库活动,如查询执行、锁竞争、死锁等。

以下是一个示例,使用扩展事件捕获查询的执行计划:

CREATE EVENT SESSION CaptureQueryPlan
ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan,
ADD EVENT sqlserver.query_post_compilation_showplan
ADD TARGET package0.asynchronous_file_target
(SET FILENAME = N'C:\temp\CaptureQueryPlan.xel')
GO

ALTER EVENT SESSION CaptureQueryPlan
ON SERVER
STATE = START
GO

上述代码创建了一个名为 "CaptureQueryPlan" 的事件会话,并将查询的执行计划事件添加到会话中。然后,将事件输出到一个异步文件目标。

SQL Server Agent

SQL Server Agent 是 SQL Server 的一个核心组件,用于管理和调度各种数据库任务和作业。它还可以用于采集和监控数据库的性能指标。SQL Server Agent 提供了一种称为作业的机制,可以定期运行一些 T-SQL 脚本来采集性能指标,并将结果保存到表中。

以下是一个示例,使用 SQL Server Agent 和作业来定期采集 CPU 使用率:

-- 创建一个表来保存性能指标
CREATE TABLE PerformanceMetrics
(
    ID INT IDENTITY(1,1),
    CollectionTime DATETIME,
    CPUUsage DECIMAL(10,2)
)

-- 创建一个作业
EXEC msdb.dbo.sp_add_job
    @job_name = N'PerformanceMetricsJob',
    @enabled = 1,
    @description = N'Collect CPU usage metrics'

-- 向作业中添加一个步骤
EXEC msdb.dbo.sp_add_jobstep
    @job_name = N'PerformanceMetricsJob',
    @step_name = N'Collect CPU Usage',
    @subsystem = N'TSQL',
    @command = N'INSERT INTO PerformanceMetrics (CollectionTime, CPUUsage) SELECT GETDATE(), cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = ''Processor Time'' AND object_name LIKE ''%Processor%'' AND cntr_value > 0'

-- 设置作业的调度
EXEC msdb.dbo.sp_add_schedule
    @schedule_name = N'Every 5 minutes',
    @enabled = 1,
    @freq_type = 4,
    @freq_interval = 1,
    @freq_subday_type = 4,
    @freq_subday_interval = 5

EXEC msdb.dbo.sp_attach_schedule
    @job_name = N'PerformanceMetricsJob',
    @schedule_name = N'Every 5 minutes'

-- 启动作业
EXEC msdb.dbo.sp_start_job
    @job_name = N'PerformanceMetricsJob'

上述代码创建了一个名为 "PerformanceMetricsJob" 的作业,该作业会定期运行一个 T-SQL 脚本来查询并

举报

相关推荐

0 条评论