Sql server 执行速度极慢的选择

Sql server 执行速度极慢的选择,sql-server,performance,Sql Server,Performance,我有一个包含7526511条记录的表,其定义如下: /****** Object: Table [dbo].[LogSearches] Script Date: 12/07/2009 09:23:14 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[LogSearches]( [ID] [numeric](18, 0) ID

我有一个包含7526511条记录的表,其定义如下:

/****** Object:  Table [dbo].[LogSearches]    Script Date: 12/07/2009 09:23:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[LogSearches](
    [ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    [Acct_ID] [int] NULL,
    [RecordCount] [int] NOT NULL,
    [PageNumber] [int] NOT NULL,
    [Site_ID] [int] NOT NULL,
    [SearchAPI] [bit] NOT NULL,
    [FormSearch] [bit] NOT NULL,
    [IPAddress] [varchar](15) NOT NULL,
    [Domain] [nvarchar](150) NOT NULL,
    [ScriptName] [nvarchar](500) NOT NULL,
    [QueryString] [varchar](max) NULL,
    [Referer] [nvarchar](1024) NOT NULL,
    [SearchString] [nvarchar](max) NOT NULL,
    [UserAgent] [nvarchar](2048) NULL,
    [Processed] [datetime] NOT NULL,
    [Created] [datetime] NOT NULL,
    [IntegerIP] [int] NULL,
 CONSTRAINT [PK_LogSearches] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[LogSearches] ADD  CONSTRAINT [DF_LogSearches_Processed]  DEFAULT (getdate()) FOR [Processed]
GO

ALTER TABLE [dbo].[LogSearches] ADD  CONSTRAINT [DF_LogSearches_Created]  DEFAULT (getdate()) FOR [Created]
GO
执行计划如下所示:

StmtText                                                                                 StmtId      NodeId      Parent      PhysicalOp                     LogicalOp                      Argument                                                 DefinedValues                                                                                                                                                                                                                                                    EstimateRows  EstimateIO    EstimateCPU   AvgRowSize  TotalSubtreeCost OutputList                                                                                                                                                                                                                                                       Warnings Type                                                             Parallel EstimateExecutions
---------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ -------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------- ------------- ------------- ----------- ---------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ---------------------------------------------------------------- -------- ------------------
SELECT TOP 1 * FROM LogSearches                                                          1           1           0           NULL                           NULL                           1                                                        NULL                                                                                                                                                                                                                                                             1             NULL          NULL          NULL        0.0032832        NULL                                                                                                                                                                                                                                                             NULL     SELECT                                                           0        NULL
  |--Top(TOP EXPRESSION:((1)))                                                           1           2           1           Top                            Top                            TOP EXPRESSION:((1))                                     NULL                                                                                                                                                                                                                                                             1             0             1E-07         11848       0.0032832        [LOALogs].[dbo].[LogSearches].[ID], [LOALogs].[dbo].[LogSearches].[Acct_ID], [LOALogs].[dbo].[LogSearches].[RecordCount], [LOALogs].[dbo].[LogSearches].[PageNumber], [LOALogs].[dbo].[LogSearches].[Site_ID], [LOALogs].[dbo].[LogSearches].[SearchAPI], [LOALo NULL     PLAN_ROW                                                         0        1
       |--Clustered Index Scan(OBJECT:([LOALogs].[dbo].[LogSearches].[PK_LogSearches]))  1           3           2           Clustered Index Scan           Clustered Index Scan           OBJECT:([LOALogs].[dbo].[LogSearches].[PK_LogSearches])  [LOALogs].[dbo].[LogSearches].[ID], [LOALogs].[dbo].[LogSearches].[Acct_ID], [LOALogs].[dbo].[LogSearches].[RecordCount], [LOALogs].[dbo].[LogSearches].[PageNumber], [LOALogs].[dbo].[LogSearches].[Site_ID], [LOALogs].[dbo].[LogSearches].[SearchAPI], [LOALo 1             2956.71       8.279319      11848       0.0032831        [LOALogs].[dbo].[LogSearches].[ID], [LOALogs].[dbo].[LogSearches].[Acct_ID], [LOALogs].[dbo].[LogSearches].[RecordCount], [LOALogs].[dbo].[LogSearches].[PageNumber], [LOALogs].[dbo].[LogSearches].[Site_ID], [LOALogs].[dbo].[LogSearches].[SearchAPI], [LOALo NULL     PLAN_ROW                                                         0        1

(3 row(s) affected)
当我运行查询时,它不会在任何合理的时间范围内完成。我让查询运行了超过5分钟,但它仍然没有返回我请求的一行。这种类型的慢速选择性能会对数据库产生其他影响,例如使我们很难摆脱不再需要的行


你知道我的瓶颈在哪里吗?98 gig数据库及其日志在SQL Server 2008上的4磁盘RAID 10上运行,驱动器上有超过100 gig的可用空间。

是否检查了是否存在阻塞问题?

是否可以创建另一个具有所需结构的表,并在其中复制/“泵送”数据,然后删除旧表并重命名新表?对于特定的id范围,您可能需要“批量”执行此操作:

INSERT INTO LogSearches_new ... SELECT * FROM LogSearches WHERE ID BETWEEN 1 AND 999999

您确定正在选择的行没有被另一个进程锁定的行/页/db阻止吗?尝试将with(NoLock)添加到查询的末尾,看看这是否有助于在使用(NoLock)时返回它,它确实会随NoLock返回。看来我犯了个错误,因为我已经和这张桌子打了这么久的交道。该死的。长的清除不再需要的行花费了我很多时间。当危机结束时,如果您使用SQL 2005/8,您可能希望查看日志文件的分区表;您可以对数据进行分区,这样只需稍加维护,当前月份的日志数据就可以放入一个表中,其余的则放在另一个表中。可以是一个非常有用的工具;如果你在enterprise上,你可以设置为离线或只读,这会更好。是的,我对按日期划分表很感兴趣,我只需要找出如何使用它。那里的文档似乎太过技术化了,应该是一些非常简单的设置。过去几天我一直在与这个表斗争,但这次没有。看来这毕竟是个问题。我在尝试从此表中删除记录时遇到了持续的问题,并错误地假设它是相同的旧内容。不幸的是,该解决方案导致的问题与我尝试删除时的原始删除问题一样多:-(.我想我有磁盘I/O问题需要解决以加快速度。已运行PerfMon 24小时,所以我们将看看它有什么要说的。