Sqlserver表监控:实现更高数据库性能(Sqlserver表监控)
最近,随着Web应用程序的快速发展,作为支撑信息系统的数据库也可能具有相当高的负担。SQL Server表监控是一种数据库性能监控和诊断工具,可以捕捉并监控SQL Server数据库中不断发生的轻微变化以及展示资源使用情况,从而用以提高数据库性能。
SQL Server表监控的实现方式有很多,其中最常用的一种是通过SQL Server Extended Events来实现监控。Extended Events以最少的性能损失新捕捉系统活动和数据库性能指标的情况,可以有效的通过已经存在的资源解决异常的发现和处理。例如,可以使用Extended Events来监控经典的SQL Server数据库架构中的表中的数据变化情况,捕捉行计数有改变的表,检测索引是否有新建和删除,捕捉删除临时表,检查索引值和排序视图、函数、过程的计数等等的变化情况。
具体的SQL Server实现方式:
–创建索引
CREATE INDEX IX_tableName_IndexName
ON tableName
(
IndexCol1
)
–删除索引
DROP INDEX IX_tableName_IndexName on tableName
–监控表记录数变化
–创建一个session
CREATE EVENT SESSION TableMonitor ON SERVER
ADD EVENT sqlserver.sp_statement_started(
ACTION(sqlserver.database_id,sqlserver.object_id,sqlserver.schema_name,sqlserver.lock_mode))
ADD TARGET package0.event_file(SET filename=TableMonitor)
WITH (MAX_MEMORY=4096 KB, MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
–启用session
ALTER EVENT SESSION TableMonitor ON SERVER
STATE=START
GO
–查询数据库表记录变化
SELECT event_data.value(‘(event/@name)[1]’, ‘NVARCHAR(MAX)’) as event_name,
event_data.value(‘(event/@timestamp)[1]’, ‘NVARCHAR(MAX)’) as event_time,
event_data.value(‘(event/data[@name=”database_id”])[1]’, ‘NVARCHAR(MAX)’) as database_id,
event_data.value(‘(event/data[@name=”object_id”])[1]’, ‘NVARCHAR(MAX)’) as table_id,
event_data.value(‘(event/data[@name=”object_name”])[1]’, ‘NVARCHAR(MAX)’) as table_name
FROM (SELECT CAST(target_data AS XML) AS event_data
FROM sys.dm_xe_session_targets xt
LEFT JOIN sys.dm_xe_sessions xs
ON xs.address=xt.event_session_address
WHERE xs.name=’TableMonitor’) as event_data;
通过上述步骤,我们可以在SQL Server中轻松实现表监控,有效的提高我们的数据库性能。