我们有一个存储过程,它需要大约3-4秒来执行,因为它有许多连接和联合。但是,如果我们尝试使用带有100个线程的SQL Stress来执行该存储过程,它会给出许多超时异常。信息是..。
超时过期了。从池获得连接之前经过的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。
这是在生产服务器上。
如果在本地环境中使用SQL压力执行相同的操作,则不会出现任何异常。
这可能是Server配置问题。它显示了任务管理器最大值中使用的5031 MB,但是系统内存为64 GB。
我应该采取哪些步骤来进一步调查?
发布于 2019-01-08 14:52:01
检查生产Server上的内存设置。它可能不是一个问题,也可能是限制你。我从sql调优专家那里得到的指导如下:
为操作系统预留1GB的RAM,在4-16 GB的范围内为每4GB的RAM预留1GB的内存,然后为安装在16 GB以上的8GB RAM预留1GB的内存。
使用此公式,假设它是唯一的实例,并且服务器专用于运行Server,则可以考虑将SQL server设置为54 to的最大内存。
此查询需要3-4秒才能完成。它可能是多核的。您可以知道,如果查看执行计划,您会看到一些步骤上的黄色箭头,然后是一个合并并行化的步骤。如果它是并行的,那么它实际上是使用6个核心,您可能是18+秒的CPU时间。并行化可以掩盖这样的问题,直到加载。
正如一位评论员所说的那样,尝试同时运行这100次是行不通的,您的应用程序超时可能会遇到问题,并且可能会导致sql server不堪重负并没有响应。像这样的查询只需要每秒运行几次就会导致问题,导致服务器负载和数据库内部阻塞。
将其放在查询的开头,以查看执行时间和物理IO,以确定可能出现的问题。它将显示CPU使用的时间和IO号码。检查这些信息会让您知道是IO问题还是CPU问题。
设置统计信息IO
设定统计时间
https://dba.stackexchange.com/questions/226486
复制相似问题