日期:2014-05-18  浏览次数:20508 次

最近有张表经常会出现查询问题,高手请帮忙看一下!tmpDBCCinputbuffer
表结构很简单
CREATE TABLE [dbo].[表_数据_最后定位](
[标识] [uniqueidentifier] NOT NULL,
[设备标识] [uniqueidentifier] NULL,
[时间] [datetime] NULL,
[经度] [decimal](18, 9) NULL,
[经度半球] [char](1) COLLATE Chinese_PRC_CI_AS NULL,
[纬度] [decimal](18, 9) NULL,
[纬度半球] [char](1) COLLATE Chinese_PRC_CI_AS NULL,
[高度] [decimal](18, 9) NULL,
[航速] [int] NULL,
[航向] [int] NULL,
[里程] [decimal](18, 3) NULL,
[加速度X] [decimal](18, 3) NULL,
[加速度Y] [decimal](18, 3) NULL,
[加速度Z] [decimal](18, 3) NULL,
[最后报警时间] [datetime] NULL,
[最后报警内容] [nvarchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[最后报警类型] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[最后报警标识] [uniqueidentifier] NULL,
[状态] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[备注] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
[备0] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
[备1] [int] NULL,
[备2] [int] NULL,
[备3] [int] NULL,
[备4] [decimal](18, 9) NULL,
[备5] [decimal](18, 9) NULL,
[备6] [decimal](18, 9) NULL,
[备7] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[备8] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[备9] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[备10] [int] NULL,
[备11] [int] NULL,
[备12] [int] NULL,
[备13] [int] NULL,
[备14] [int] NULL,
[备15] [int] NULL,
[备16] [int] NULL,
[备17] [int] NULL,
[备18] [int] NULL,
[备19] [int] NULL,
[备20] [int] NULL,
[备21] [int] NULL,
[备22] [int] NULL,
[备23] [int] NULL,
[备24] [int] NULL,
[备25] [int] NULL,
[备26] [int] NULL,
[备27] [int] NULL,
[备28] [int] NULL,
[备29] [int] NULL,
 CONSTRAINT [PK_表_数据_最后定位] PRIMARY KEY NONCLUSTERED 
(
[标识] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

表中数据不多,2000多条,平时查询只要1秒都不到就出来了
查询Select * From 表_数据_最后定位 Where 时间 >'........' And 其它条件

但有时会卡住半天不出来,后来经过多次测试,发现只要去掉Where中的时间,保留其它条件都会很快出来。或是直接
Select * From 表_数据_最后定位,也能很快出来,只有加上时间就会卡住。

你不管他,过1,2个小时,又好了。一直以为是有什么计划任何或是SQL在执行其它什么,所以把其它线程什么用SQL关了,还是这样。

最近发现,每次出现这样的情况时,活动进程中,总会有一个系统进程在执行以下的SQL。是自动执行,点中止也中止不了。

create table #tmpDBCCinputbuffer ([Event Type] nvarchar(512), [Parameters] int, [Event Info] nvarchar(512)) 
insert into #tmpDBCCinputbuffer exec ('DBCC INPUTBUFFER(51)') 
select [Event Info] from #tmpDBCCinputbuffer 

想请教一下,这是什么意思,是不是这个执行导致我查询卡住的,如果是的话,怎么解决。谢谢。

------解决方案--------------------

create table #tmpDBCCinputbuffer ([Event Type] nvarchar(512), [Parameters] int, [Event Info] nvarchar(512))
insert into #tmpDBCCinputbuffer exec ('DBCC INPUTBUFFER(51)')
select [Event Info] from #tmpDBCCinputbuffer
 

这个是用来查看操作信息的,

这个不影响你查询啊,

是否还有其他操作有更新这个表,你加时间范围,假如有更新这个范围内的,你要查询可能就要等了
------解决方案--------------------
在卡住的时候,执行 select 时间 from 表,或者 select 时间 from 表 where 时间 between 时间分段,看在哪一段时间上会卡住.
------解决方案--------------------
create table #tmpDBCCinputbuffer ([Event Type] nvarchar(512), [Parameters] int, [Event Info] nvarchar(512))
insert into #tmpDBCCinputbuffer exec ('DBCC INPUTBUFFER(51)')
select [Event Info] from #tmpDBCCinputbuffer


这个只是一个临时表 与你的查询无关啊


你可以用SQL PROFILER跟踪下。
------解决方案--------------------
DBCC INPUTBUFFER(51)你看