2009-12-07 5 views
0

J'ai une table avec des 7,526,511 enregistrements avec la définition suivante:Performing extrêmement lent SELECT

/****** 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 

Le plan d'exécution ressemble à ceci:

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) 

Quand je lance la requête, il ne terminer dans n'importe quel genre de délai raisonnable. J'ai laissé la requête s'exécuter pendant plus de 5 minutes, et elle n'a toujours pas retourné la seule ligne que j'ai demandée. Ce type de performances SELECT lentes a d'autres effets sur la base de données, tels que la difficulté à se débarrasser des lignes dont nous n'avons plus besoin.

Avez-vous une idée de mon goulot d'étranglement? La base de données de 98 gig et ses journaux s'exécutent sur SQL Server 2008 sur un disque RAID 10 à 4 disques avec plus de 100 Go d'espace libre sur les disques.

+1

êtes-vous sûr que la ligne (s) que vous sélectionnez ne sont pas bloqués par la ligne/page/db étant verrouillé par un autre processus ? Essayez d'ajouter avec (NoLock) à la fin de votre requête et voir si cela aide – u07ch

+0

Est-ce que ça revient quand vous utilisez (NOLOCK) –

+0

Il retourne avec NOLOCK. On dirait que j'ai fait une erreur noob parce que j'ai eu affaire à cette table pour ainsi. damné. longue. Cela me prend toujours pour effacer les lignes dont nous n'avons plus besoin. –

Répondre

0

Avez-vous vérifié si vous avez un problème de blocage?

+0

Cela faisait quelques jours que je me battais avec cette table, mais pas cette fois-ci. Il semble que ce pourrait être le problème après tout. J'ai eu des problèmes * continus * en essayant d'obtenir des enregistrements supprimés de cette table, et j'ai fait la fausse supposition que c'était le même vieux truc. –

0

Serait-il utile de créer une autre table avec la structure requise et de copier/"pomper" les données, puis de supprimer l'ancienne table et de renommer la nouvelle? Vous devrez peut-être de le faire en « lots » pour la gamme identifiant spécifique:

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

Malheureusement cette solution a causé autant de problèmes que la suppression d'origine quand je l'ai essayée :-(Je pense que j'ai des problèmes d'E/S de disque que je dois résoudre pour accélérer cela.J'ai exécuté PerfMon pendant 24 heures, donc on verra ce qu'il a à dire. –

Questions connexes