web-dev-qa-db-fra.com

Checktable DBCC prenant 15 minutes de 15 minutes pour courir sur une table vide

J'ai une base de données où DBCC CheckTable sur un certain nombre de petites tables vides prenant plus de 15 minutes à exécuter. Quand il finit, il n'y a pas d'échecs ni d'erreurs. La performance sur tout le reste sur le serveur est à une forme très acceptable. Il n'y avait rien d'autre en même temps.

J'ai également essayé des statistiques de DBCC propres et mis à jour avec FullScan.

J'utilise SQL Server 2016 Enterprise Edition (13.0.5201.2)

Exemple de tableau:

CREATE TABLE [Schema1].[Table1](
    [col1] [int] NOT NULL,
    [col2] [nvarchar](100) NOT NULL,
    [col3] [xml] NOT NULL,
 CONSTRAINT [PK_1] PRIMARY KEY CLUSTERED 
(
    [col1] ASC,
    [col2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
7
Russ960

J'ai fini par ouvrir un incident avec Microsoft et il a été déterminé que les Sys.SysRscols (qui ne peuvent être accessibles que via DAC) ont plus de 200 millions de rangées. Après avoir effectué un examen, il a été trouvé dans le cadre de DBCC SQL Server vérifie toujours les tables système même pour le chèque à check-poste DBCC. À partir du Manuel de checktable DBCC :

Les contrôles d'intégrité sont toujours effectués sur tous les index de la table système.

Ma compréhension est que Sys.SysRscols fait un certain suivi de la colonne et la raison de la grande taille est un certain nombre de tables (200+) que nous disposons de plus de 2 000 partitions et de 163 colonnes. Presque tous étaient des tables de travail temporaires qui auraient dû être abandonnées par la demande mais n'étaient pas. Je les ai effacé et le processus est retourné dans un temps de réponse normal pour une table vide inférieure à 1 minute.

Ils ont également noté qu'il figure dans la documentation que les partitions peuvent avoir une incidence sur les chèques DBCC. De Tables et index partitionnés :

Commandes DBCC

Avec un plus grand nombre de partitions, les commandes DBCC pourraient prendre plus de temps à exécuter à mesure que le nombre de partitions augmente.

6
Russ960