Dmi*_*sev 2 performance sql-server-2008 sql-server
我有 SQL Server 2008 和一个具有完整恢复模型的数据库。通常,队列长度小于 1。但有时它会在几秒钟内增长到数千(3000 !!)。此时,许多写入查询以超时错误告终。
使用资源监视器,我发现此时 sqlserver.exe 将大量数据写入主数据库文件(MDF)。虽然它通常写入事务日志(LDF)。
使用 SQL Server Profiler,我发现当时没有运行大量查询。
我认为,这是某种SQL服务器的后台操作,但我想知道是哪种?
数据库还启用了 READ_COMMITED_SNAPSHOT 和镜像(同步模式)。这个事实可能是我问题的原因吗?
更新:我发现写入日志(而不是数据文件)是完全恢复模式的默认行为。并且日志只能通过备份事务日志操作复制到数据文件中。还是不明白为什么SQL server每十分钟复制一次日志...
听起来你有:
我发现写入日志(而不是数据文件)是完全恢复模式的默认行为。并且日志只能通过备份事务日志操作复制到数据文件中。
不,不是真的。您的信息或理解有问题。
无论恢复模式如何,SQL Server 都使用预写日志 (WAL)。更新/删除/插入会导致对内存数据页的更改 + 写入事务日志的更改记录。数据页修改不会立即刷新到数据文件。出于所有意图和目的,您可以认为将日志写入磁盘是立即的(在封面之下,日志每 60K 或在 上刷新一次COMMIT)。
当 IO 峰值出现时,您看到的是由于检查点操作而将那些数据页修改刷新到磁盘。
检查点将当前内存中的修改页(称为脏页)和事务日志信息从内存写入磁盘,同时记录有关事务日志的信息。[来源]
可以帮助您理解机制的相关过去问题: