数据库数据文件何时被写入?

数据库数据文件何时被写入?

我使用 perfmon 监控包含单个 SQL2005 数据库数据文件的 LUN 上的每秒写入次数。我假设数据库文件仅在检查点期间或由惰性写入器进程写入,这个假设正确吗?因为当检查点和惰性写入器进程处于非活动状态时,似乎有东西正在写入 LUN。

[编辑]

写入似乎每 3 秒左右发生一次,长度为 510 字节?我怀疑这不是 SQL 写入 LUN,而是某些 OS 进程。

[编辑]

这次写入实际上同时命中了我所有的 LUN - 所以不能是 SQL。

答案1

我的猜测是操作系统正在更新数据库文件的访问时间。

答案2

您确定这个 LUN 只包含数据文件吗?您的事务日志文件位于何处?也许在写入事务日志时发生了日志刷新?这通常发生在提交写入后的几毫秒内(当然取决于负载)。

您的恢复间隔设置为多少?这与检查点的频率有关。

[编辑]

也许你可以使用sysinternals 工具诊断到底在向磁盘写入什么?也许 perfmon 在骗你?:-)

答案3

http://sqlinthewild.co.za/index.php/2009/06/26/the-lazy-writer-and-the-checkpoint/

如果 SQL 面临内存压力,惰性写入器可能会进行大量写入。如果检查点页数/秒和惰性写入器页数/秒均为 0,则不应发生写入。一定要查看 sysinternals 工具之一是否可以诊断出哪个进程正在写入。

编辑:还有一种称为 eager writer 的东西。据我回忆,它与批量操作(bcp、BULK INSERT)有关

答案4

您是否在此 LUN 上设置了任何页面文件,或者备份软件是否使用此 LUN 进行影子复制?我们遇到过备份软件进入并利用 LUN 进行影子复制填满驱动器的情况,因此我们必须明确排除某些 LUN 以防止这种情况发生。您可能希望检查一下。

相关内容