当前位置: 代码迷 >> Sql Server >> Top 二 很快出结果 Top 3 很久很久
  详细解决方案

Top 二 很快出结果 Top 3 很久很久

热度:190   发布时间:2016-04-25 00:44:23.0
Top 2 很快出结果 Top 3 很久很久啊
   select top 3 * from  NotificationHistoryData.dbo.PresenceMissingRecord nolock
   select top 2 * from  NotificationHistoryData.dbo.PresenceMissingRecord nolock
出现这样问题的原因是?
------最佳解决方案--------------------
你每次都是这样?看看是不是有阻塞或者有什么瓶颈》。。。
------其他解决方案--------------------
你是每次执行都会这样的现象?还是偶尔?有没有试过在基本上没人用数据库的时候查?
------其他解决方案--------------------
那可能行比较大的就是阻塞了,特别是其他的语句操作时,速度不够快,导致锁表,你的查询就只能等待。这在几千万表上操作时尤为突出,在你觉得很慢的时候试试一下语句:
select * from sys.sysprocesses where blocked<>0
如果有数据且刷新了几次都还在,且那个就是你执行的语句,证明有阻塞。
------其他解决方案--------------------
1、优化语句,你的select top 3 * from NotificationHistoryData.dbo.PresenceMissingRecord nolock如果不加where的话,其实还是全表扫描,8000万你可以想象一下。
2、找出阻塞的语句:select * from sys.sysprocesses where blocked<>0这个语句中有个blocked的字段,找出这个值,然后用dbcc inputbuffer(这个值),可以看到你的select top 3 * from NotificationHistoryData.dbo.PresenceMissingRecord nolock是被什么阻塞了。然后优化这个语句。
不过我奇怪的是你都nolock了怎么还会阻塞?
------其他解决方案--------------------
直接郁闷了
------其他解决方案--------------------
现在这个表有8千万数据了
------其他解决方案--------------------
不是每次,以前都还可以的。现在只执行一个TableA INNER JOIN PresenceMissingRecord 删除 A 中记录的操作
引用:
你是每次执行都会这样的现象?还是偶尔?有没有试过在基本上没人用数据库的时候查?

------其他解决方案--------------------
你说的很对啊,怎么解决阻塞呢
引用:
那可能行比较大的就是阻塞了,特别是其他的语句操作时,速度不够快,导致锁表,你的查询就只能等待。这在几千万表上操作时尤为突出,在你觉得很慢的时候试试一下语句:
select * from sys.sysprocesses where blocked<>0
如果有数据且刷新了几次都还在,且那个就是你执行的语句,证明有阻塞。

------其他解决方案--------------------
我也不清楚啊,我查询都没加锁的
引用:
1、优化语句,你的select top 3 * from NotificationHistoryData.dbo.PresenceMissingRecord nolock如果不加where的话,其实还是全表扫描,8000万你可以想象一下。
2、找出阻塞的语句:select * from sys.sysprocesses where blocked<>0这个语句中有个blocked的字段,找出这……

------其他解决方案--------------------
EventType Parameters EventInfo
RPC Event 0 StatusData.dbo.chgDMRForLatestDate;1 那个 1表示什么意思呢?
引用:
我也不清楚啊,我查询都没加锁的引用:

1、优化语句,你的select top 3 * from NotificationHistoryData.dbo.PresenceMissingRecord nolock如果不加where的话,其实还是全表扫描,8000万你可以想象一下。
2、找出阻塞的语句:select * from sys.sysprocesses where ……

------其他解决方案--------------------
1代表你的语句传了参数而已。0 = 文本, 1- n = 参数。那你要看chgDMRForLatestDate这个做了什么导致了阻塞,根源估计还是查询速度慢。
------其他解决方案--------------------
加上ORDER BY
------其他解决方案--------------------
-- Set the database where the stored procedure is located
USE StatusData
GO

-- Drop older version if it exists