XEvent – SQL Server Log文件对磁盘的写操作大小是多少

简介: 原文:XEvent – SQL Server Log文件对磁盘的写操作大小是多少本篇是上一篇SQL Server Log文件对磁盘的写操作大小是多少的续,使用XEvent收集SQL Server Data文件和Log文件的写大小,脚本如下: DECLARE @DBNAME VARCHAR(2...
原文: XEvent – SQL Server Log文件对磁盘的写操作大小是多少

本篇是上一篇SQL Server Log文件对磁盘的写操作大小是多少的续,使用XEvent收集SQL Server Data文件和Log文件的写大小,脚本如下:

DECLARE @DBNAME VARCHAR(256)
SET @DBNAME = 'myDB'
DECLARE @sqlcmd NVARCHAR(MAX) = 'IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE
name=''filewritecompleted'')
   DROP EVENT SESSION [filewritecompleted] ON SERVER;
CREATE EVENT SESSION [filewritecompleted]
ON SERVER
ADD EVENT sqlserver.file_write_completed 
(WHERE (database_id = ' + CAST(DB_ID(''+@DBNAME+'') AS VARCHAR(3))
    + '))
ADD TARGET package0.asynchronous_file_target(
     SET filename=''D:\XEvent\filewritecompleted.xel'',
         metadatafile=''D:\XEvent\filewritecompleted.xem'')
WITH (MAX_MEMORY = 8192KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, STARTUP_STATE = ON)'
EXEC(@sqlcmd)
GO
 
ALTER EVENT SESSION filewritecompleted
ON SERVER
STATE=START
GO
 
WAITFOR DELAY '00:05:00'
 
ALTER EVENT SESSION filewritecompleted
ON SERVER
STATE=STOP
GO
 
USE tempdb
GO
 
SELECT  CAST(event_data AS XML) AS event_data
INTO    TargetEvents
FROM    sys.fn_xe_file_target_read_file('D:\XEvent\filewritecompleted*.xel',
                                        'D:\XEvent\filewritecompleted*.xem', NULL,
                                        NULL)
 
SELECT  event_data.value('(event/@name)[1]', 'varchar(50)') AS event_name ,
        DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP),
                event_data.value('(event/@timestamp)[1]', 'datetime2')) AS [timestamp] ,
        COALESCE(event_data.value('(event/data[@name="database_id"]/value)[1]',
                                  'int'),
                 event_data.value('(event/action[@name="database_id"]/value)[1]',
                                  'int')) AS database_id ,
        event_data.value('(event/data[@name="mode"]/text)[1]',
                         'nvarchar(4000)') AS [mode] ,
        event_data.value('(event/data[@name="file_handle"]/value)[1]',
                         'nvarchar(4000)') AS [file_handle] ,
        event_data.value('(event/data[@name="offset"]/value)[1]', 'bigint') AS [offset] ,
        event_data.value('(event/data[@name="file_id"]/value)[1]', 'int') AS [file_id] ,
        event_data.value('(event/data[@name="filegroup_id"]/value)[1]', 'int') AS [filegroup_id] ,
        event_data.value('(event/data[@name="size"]/value)[1]', 'bigint') AS [size]
INTO    Results
FROM    TargetEvents
 
select * from Results
 
 
--Log File Write Size
SELECT  size ,
        COUNT(*) AS cnt ,
        LTRIM(CAST(COUNT(*) * 1.0 / ( SELECT    COUNT(*)
                                      FROM      Results
                                      WHERE     file_id = 2
                                    ) * 100 AS NUMERIC(18, 4))) + '%' AS ratio
FROM    Results
WHERE   file_id = 2
GROUP BY size
ORDER BY CAST(COUNT(*) * 1.0 / ( SELECT    COUNT(*)
                                      FROM      Results
                                      WHERE     file_id = 2
                                    ) * 100 AS NUMERIC(18, 4)) desc
 
 
--Data File Write Size
SELECT  size ,
        COUNT(*) AS cnt ,
        LTRIM(CAST(COUNT(*) * 1.0 / ( SELECT    COUNT(*)
                                      FROM      Results
                                      WHERE     file_id != 2
                                    ) * 100 AS NUMERIC(18, 4))) + '%' AS ratio
FROM    Results
WHERE   file_id != 2
GROUP BY size
ORDER BY CAST(COUNT(*) * 1.0 / ( SELECT    COUNT(*)
                                      FROM      Results
                                      WHERE     file_id = 2
                                    ) * 100 AS NUMERIC(18, 4)) desc
 
--DROP TABLE tempdb.dbo.TargetEvents, tempdb.dbo.Results

  

在一个OLTP结果如下:

Log File Write Size:

image

Data File Write Size :

image

 

用XEvent收集,的确要比之前的方法简单很多,此方法感谢一位Cookies_Tang网友提醒。

目录
相关文章
|
11月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
324 2
|
12月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
阿里云日志服务(SLS)推出智能分析助手 SLS SQL Copilot,融合 AI 技术与日志分析最佳实践,将自然语言转换为 SQL 查询,降低使用门槛,提升查询效率。其具备原生集成、智能语义理解与高效执行能力,助力用户快速洞察日志数据价值,实现智能化日志分析新体验。
725 1
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
11月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
492 6
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
2946 28
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
569 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
522 1
【赵渝强老师】Oracle的控制文件与归档日志文件