什么导致SQL数据库过载?
数据库:SQL Server 我构建了一个在多台机器上运行的程序,并相当频繁地查询数据库。最近发生的事情是,来自该程序每个实例的查询导致数据库突然停止。如果不等待几秒钟,几乎不可能从数据库中查询任何内容 所以我试图更好地理解这个问题,并找出原因。我有几个问题:什么导致SQL数据库过载?,sql,sql-server,database,Sql,Sql Server,Database,数据库:SQL Server 我构建了一个在多台机器上运行的程序,并相当频繁地查询数据库。最近发生的事情是,来自该程序每个实例的查询导致数据库突然停止。如果不等待几秒钟,几乎不可能从数据库中查询任何内容 所以我试图更好地理解这个问题,并找出原因。我有几个问题: 如果我有一个读取查询,通常需要2秒钟才能运行,那么当我的程序有许多实例试图运行同一个查询时会发生什么?它们是同时在数据库上运行,还是一次只运行一个?如果一次运行一个查询,那么未运行的查询是否会排队并形成队列?我认为,如果这个队列能够累积到
var result = from a in db.TableNormal
join b in db.TableHuge on a.id equals b.id
where b.value = (db.TableOther.Select(z=>z.value).Max())
select new {Normal = a};
因此,基本上,每次运行其父查询时,子查询都要运行100000多次以上。如果在10台机器上每秒运行一次此查询,这是否足以显著降低SQL server的性能?(我对SQL server的容量有一个非常不完整的概念)
我建议您阅读一篇关于解决SQL Server性能问题的文章。根据我的经验,唯一让SQL Server陷入停顿的是错误的查询。它可能试图检索太多的数据或进行不正确的连接,但我要做的第一件事是非常仔细地查看您正在尝试做的事情,看看是否有更好的方法。有太多的事情,统计数据过时,死锁,硬件问题,一些大型进程的阻塞,写得不好的查询,糟糕的设计,缺乏索引。如果您有性能问题,您需要阅读一本关于性能调优的大书,实际上有数百种可能是错误的。如果您对良好数据库性能的基本原理不太熟悉,那么设计糟糕的数据库或设计糟糕的查询的概率接近100%
相关子查询最终需要进行表扫描,并且随着行数的增加,速度会变慢。它们应该很少被使用。从本质上讲,您无法利用索引,实际上它就像查询中的一个小游标(游标在SQL Server中是一件非常糟糕的事情)。如果经常运行此查询,则肯定会使系统缓慢爬行。但是要真正了解它在做什么,你应该看一下执行计划。@Oded,所以如果它们同时运行,可能不是这个需要2秒钟的特定查询导致了这个问题?@Oded,你能扩展一下你所说的未优化数据库吗?如果知道这一点有帮助的话,那么数据库具有唯一的自动递增索引(这是正确的索引吗?@sooprise-一个需要2秒的查询,需要很长时间。至于未优化-请阅读链接文章。@HLGEM-您能解释一下您的评论吗?@sooprize-您所做的不仅仅是几个连接。您还正在进行逐行聚合计算。不管这些,我的答案仍然是。你能看到我的原始帖子的附录吗?你能看看我添加到原始帖子的附录吗?谢谢。SQL Server,我将把它添加到我的OP中。谢谢。你能给它添加真正的SQL而不是应用程序代码吗?我想看看datbase在查询时看到了什么,在我看来,where子句可能是问题所在。您应该调查这些表的索引,并确保所有有问题的列都有一个索引。我不太确定WHERE子句本身就是问题所在。看起来此应用程序代码的计算结果应该类似于从TableOther中选择最大值(z.value)。优化器应该能够看到它只需要对它进行一次评估,而不是每行评估一次。但我可能错了;我不熟悉应用程序代码的语法。我同意HLGEM——发布实际的SQL和执行计划。