相关疑难解决方法(0)

SQL Server 缓存刷新和磁盘 I/O

我们正忙于对我们在 .NET 4.0 中开发并在后台运行 SQL Server 2008 R2 的 OLTP 系统进行负载测试。系统使用 SQL Server Service Broker 队列,它们的性能非常好,但我们在处理时遇到了一个特殊的趋势。

SQL Server 以极快的速度处理请求 1 分钟,然后增加约 20 秒的磁盘写入活动。下图说明了这个问题。

SQL OLTP 系统 - 性能计数器

Yellow = Transactions per second
Blue   = Total CPU usage
Red    = Sqlsrv Disk Write Bytes/s
Green  = Sqlsrv Disk Read Bytes/s
Run Code Online (Sandbox Code Playgroud)

在故障排除期间,我们尝试了以下方法,但模式没有任何重大变化:

  • 已停止 SQL Server 代理。
  • 杀死了几乎所有其他正在运行的进程(无 A/V、SSMS、VS、Windows 资源管理器等)
  • 删除了所有其他数据库。
  • 禁用所有对话计时器(我们不使用任何触发器)。
  • 从消息队列驱动的方法转向简单/粗略的表监控设计。
  • 使用从轻到重的不同负载。
  • 修复了所有死锁。

似乎 SQL Server 可能正在建立其缓存并以特定的时间间隔将其写入磁盘,但我无法在网上找到任何支持该理论的内容。

接下来,我计划将解决方案转移到我们的专用测试环境中,看看我是否可以复制该问题。在此期间的任何帮助将不胜感激。

更新 1 根据要求,附上一张图表,其中包括Checkpoint Pages/SecPage Life Expectancy和一些磁盘延迟计数器。

SQL OLTP 系统 - 性能计数器 - 检查点

看起来好像检查点(浅蓝线)是我们观察到的性能下降(黄线)的原因。^

磁盘延迟在处理过程中保持相对一致,页面预期寿命似乎没有任何明显影响。我们还调整了 SQL Server 可用的 ram 量,这也没有太大影响。将恢复模型从 …

performance sql-server service-broker

11
推荐指数
1
解决办法
1万
查看次数

何时从预写日志 (WAL) 中删除条目?

如果我理解正确,当用户更新数据库记录并提交事务时, commit() 调用将阻塞,直到完成以下步骤:

  • 数据库记录了预写日志 (WAL) 中的更改。
  • 数据库更新实际记录。
  • 数据库删除 WAL 条目。

我有以下关于 WAL 的问题:

  1. 数据库什么时候知道从 WAL 中删除条目是安全的?
  2. WAL 是否暗示将记录写入磁盘两次(一次在 WAL 中,一次在数据库文件中)?
  3. Postgres声称 WAL“显着减少了磁盘写入次数,因为只需要将日志文件刷新到磁盘”但是(回到问题 #1)在从数据库中删除条目之前,您不必刷新主数据库文件沃尔?

corruption

2
推荐指数
1
解决办法
996
查看次数