【问题标题】:SQL Server Log File - Why it increases in size when the database is not in use?SQL Server 日志文件 - 为什么不使用数据库时它的大小会增加?
【发布时间】:2017-03-11 06:19:02
【问题描述】:

我们有一个使用 SQL 服务器数据库的 ERP 应用程序。尽管该应用程序当前未使用,但其日志文件不断增加,目前为 28GB。我在几周前进行了完整备份以截断日志文件,当时它是 85GB,现在又恢复到 28GB。我已将日志文件大小设置为 20GB,增量为 100MB,并且增长不受限制。

为什么当应用程序不使用时日志文件大小会增加,我如何查看导致它增加的事务以及如何更好地管理它?在这种情况下设置服务器跟踪有用吗?

【问题讨论】:

    标签: sql-server sql-server-2012


    【解决方案1】:

    检查sys.dm_exec_requestssys.dm_exec_sessions 的输出以找出正在运行的查询以及连接到您的数据库的对象/对象。

    如果这对您没有帮助,那么您当然可以设置服务器跟踪或扩展事件会话 - 如果您真的认为没有人在连接和查询,您可以使用以下方式验证:

    IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name = 'EE_Queries')
    DROP EVENT SESSION EE_Queries ON SERVER;
    GO
    
    CREATE EVENT SESSION EE_Queries ON SERVER
    ADD EVENT sqlserver.sql_statement_completed
    (ACTION (sqlserver.sql_text,sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.nt_username, sqlserver.username)
    WHERE sqlserver.database_id = /* fill in your DB_ID() here */)
    ADD TARGET package0.asynchronous_file_target
    (SET FILENAME = N'C:\logs\EE_Queries.xel', METADATAFILE = N'C:\logs\EE_Queries.xem')
    WITH (max_dispatch_latency = 1 seconds);
    GO
    
    
    ALTER EVENT SESSION EE_Queries ON SERVER STATE = START;
    

    这将记录对您的数据库进行的所有查询-只需将注释部分替换为您要跟踪的数据库的DB_ID()。这将启动一个扩展事件会话,该会话跟踪所有查询,包括查询文本、应用程序名称、主机名和运行查询的用户的用户名(NT 和/或 SQL 用户名)。这应该会很快为您提供线索。 在繁忙的数据库上的生产环境中小心处理该事件会话 - 如果您有大量查询,它可能会降低性能并且可能会很快填满磁盘。本地扩展事件的输出:

    【讨论】:

    • 感谢 Dan 的回复。你认为我应该让它运行多长时间,一旦完成,我应该使用以下方式删除事件:IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name = 'EE_Queries') DROP EVENT SESSION EE_Queries ON SERVER; GO
    • 你可以放弃它或使用ALTER EVENT SESSION EE_Queries ON SERVER STATE = STOP。我会在您看到事务日志增长时运行它一段时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多