Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询在随机时间花费很长时间_Sql_Performance - Fatal编程技术网

SQL查询在随机时间花费很长时间

SQL查询在随机时间花费很长时间,sql,performance,Sql,Performance,我正在一个非常小的表上运行一个非常简单的查询(您唯一需要的是分析。您需要了解内存、输入/输出和处理器。您需要知道这三个因素中的哪一个会导致服务器速度减慢。有很多产品可以做到这一点(安装windows后,甚至还有一个性能良好的监视器) 不要“思考”,您需要查看数据才能理解基本问题。在SSMS中,右键单击对象资源管理器中的已连接服务器,然后选择“活动监视器” 在那里,您可以看到最近昂贵的查询和其他性能数据。您不需要写入表来锁定它。您可以尝试修改其中一条SELECT语句,使其与(NOLOCK)另一条语

我正在一个非常小的表上运行一个非常简单的查询(您唯一需要的是分析。您需要了解内存、输入/输出和处理器。您需要知道这三个因素中的哪一个会导致服务器速度减慢。有很多产品可以做到这一点(安装windows后,甚至还有一个性能良好的监视器)


不要“思考”,您需要查看数据才能理解基本问题。

在SSMS中,右键单击对象资源管理器中的已连接服务器,然后选择“活动监视器”


在那里,您可以看到最近昂贵的查询和其他性能数据。

您不需要写入表来锁定它。您可以尝试修改其中一条SELECT语句,使其与(NOLOCK)另一条语句一起使用(insert/update/delete)这非常慢,连接到此表可能会锁定它。

除了运行探查器并检查
页面预期寿命和
缓冲区缓存命中率之外,请参见:

也可能是(但您必须测试)发生的情况是,您正在查找的数据从RAM中的缓存中跳出,现在它必须从磁盘获取数据,这将花费更长的时间,当您在一秒钟后再次运行它时,它将再次变快

您可以通过在上运行统计io进行检查

SET STATISTICS IO ON

select * ..your query
你应该看到这样的东西

表“TableNAme”。扫描计数1,逻辑读取4,物理读取2

如果您看到
物理读取大于0,则它会从磁盘抓取它

您可以对此进行验证(不在生产中)

通过从RAM中删除数据

DBCC freeproccache
DBCC DROPcleanbuffers
现在,当您运行一个查询两次时,您将看到类似的情况,第一次运行来自磁盘,第二次运行来自RAM

表“TableNAme”。扫描计数1,逻辑读取4,物理读取2


表“TableNAme”。扫描计数1,逻辑读取4,物理读取0

能否监视SQL Server正在使用的客户端连接数?可能达到了某个最大限制,因此传入的客户端连接必须通过超时等待现有连接释放。您是否发现了瓶颈,yet、 您所说的另一个查询连接到此表是什么意思。如果您仅对此表执行select语句,则不会锁定任何内容。不会获得锁定。请编辑我的答案,将“查询”替换为“语句”。谢谢。