如何为数据库设置最低 SQL Server 资源分配?

如何为数据库设置最低 SQL Server 资源分配?

在过去的圣诞假期周,当我工作的网站流量非常低时,我们在需要用户身份验证的几个页面上看到了几次请求超时异常(每天一次 >> 12/26、12/28、12/29 和 12/30)。在这个流量非常低的一周之前,我们很少看到请求超时异常。

我们认为超时是由于它使用的数据库在 SQL Server 上处于“关闭”状态,并且在请求进入时需要更长时间才能启动。

SQL Server(SQL Server 2005)上有两个数据库,一个专门用于此应用程序,另一个用于面向公众的网站和身份验证;因此,在用户未登录应用程序的情况下(圣诞节期间,一次登录时间肯定有几个小时),应用程序数据库可能未收到任何请求。我们认为此时 SQL Server 将资源重新分配给另一个数据库,然后当请求进入时,需要额外的时间来启动应用程序数据库,从而发生超时。

有没有办法告诉 SQL Server 始终为数据库提供最少量的资源?

答案1

确保数据库的“自动关闭”属性设置为 FALSE。

如果启用此功能,那么在流量较低时,它基本上会使数据库脱机。针对它的第一个查询会尝试使其重新联机,但根据大小,这可能需要一段时间。

编辑:如果不是这种情况,则需要检查其他几件事:

  • 您的 SQL 服务器是否会在活动较少时尝试运行 IO 密集型病毒扫描或其他操作?如果是这样,请确保排除您的 SQL 文件夹。
  • 您的应用程序中还有其他部分可能对此负责吗?例如,如果您将 IIS 与 .Net Web 应用程序一起使用,则重置应用程序池将强制页面在下次调用时重新编译。

除此之外,我唯一能想到的事情(除了使用资源管理器升级到 SQL 2008 企业版)就是优化您的查询,以便即使表未被缓存也能实现最佳性能。

当然,所有正常的性能调整建议都适用,包括适当的索引(最好覆盖索引)等。

答案2

在 SQL 2008 中,使用资源调控器

  • 对传入连接进行分类并将其工作负载路由到特定组的能力。
  • 监控组中每个工作负载的资源使用情况的能力。
  • 能够集中资源并设置特定于池的 CPU 使用率和内存分配限制。这可以防止或最大限度地降低失控查询的可能性。
  • 将分组工作负载与特定资源池关联的能力。
  • 识别和设定工作量优先级的能力。

答案3

在 SSMS(Management Studio)中,右键单击对象资源管理器中的服务器名称以获取服务器属性。在选择页面部分中选择内存。在那里,您可以设置提供给 SQL Server 的最小和最大内存。为操作系统相关项目留出足够的空间(我通常使用 4 GB),然后将其余内存提供给 SQL Server。通过降低和提高速度,我假设您指的是缓存(过程和缓冲区),这可能是一个问题。

希望这可以帮助。

答案4

我们认为超时是由于它使用的数据库在 SQL Server 上处于“关闭”状态,并且在请求进入时需要更长时间才能启动。

你进行了哪些诊断才得出这个结论?在实施解决方案时,请确保解决正确的问题。

相关内容