重启SQL server数据库的隐藏操作

SKL*_*TFZ 1 sql-server

我想知道在重新启动 SQL Server 时将执行哪些操作?

场景是,事务日志几乎满了,我的一个客户觉得系统很慢(实际上查询是不可执行的,他跟踪服务器CPU和内存使用率很高),因此他选择重新启动整个服务器。

随后,他说手术再次顺利进行。

我想知道,事务日志特有的sql server重启操作中做了哪些操作

例如,重新启动是否会强制 SQL 服务器执行检查点?甚至是备份?以便重新启动可以以某种方式释放占用的空间

Han*_*dyD 5

作为重启后数据库启动的一部分,每个数据库的事务日志都由 SQL Server 读取。已提交的事务会前滚,未提交的事务会回滚,并且日志中先前处于活动状态的部分将被标记为非活动状态,并保留日志文件中的大部分空间。此过程称为恢复,发生在数据库启动时,该过程作为 SQL Server 启动、AG 故障转移、镜像故障转移的一部分或在从备份还原数据库之后发生。

这可能会对性能产生影响,但重新启动服务器会影响 SQL Server 性能的许多事情。缓冲区缓存被清除,计划缓存也被清除,所有打开的连接都被断开,任何正在运行的 SQL 代理作业都被取消,列表继续。

事务日志的完整性可能是问题,或者至少是问题的一部分,但请考虑以下场景:由于参数嗅探问题,您遇到了糟糕的计划选择。这很容易导致 SQL Server 出现性能问题,因为缓存计划对于参数化查询的特定执行返回的行数不是最佳的。

由于计划缓存已被清除,此问题现在已被重新启动所掩盖。如果该问题查询的第一次执行在重新启动后选择了好的计划,您可能会在一段时间内看不到这个问题,直到再次为此查询缓存了一个糟糕的计划。

长期解决这个问题(意外的性能下降)需要一些主动监控:

  1. 使用付费监控工具或免费工具(如sp_Blitzsp_whoisactive )收集会话和性能统计信息。将此信息记录到表格中以进行定期分析。这也确保您在客户端重新启动服务器后可以获得可用信息。
  2. 定期收集您的等待统计数据并将它们记录到表格中进行分析。
  3. 要求客户端停止重新启动服务器。这会从内存 DMV 中擦除您的许多有价值的统计数据,并使识别和解决问题变得更加困难。
  4. 启用远程 DAC。下次发生这种情况时,您希望为管理员保留的资源能够连接和分析服务器以找到根本原因。
  5. 教育您的客户 - SQL Server 上的高内存利用率通常不是问题。SQL Server 需要内存,当它可以访问足够的内存以在缓存中存储更多经常访问的数据时,它会提供最佳性能。
  6. 如果您有 SQL Server 2016 或更高版本,请启用查询存储。这将帮助您识别意外的查询回归,例如上面描述的回归。它还可以帮助您实施短期保护,例如强制查询的已知良好计划。

另外,看看这篇文章,它是在 SQL Server 中开发性能故障排除方法的重要资源,这篇文章也有一些很好的技巧。