web-dev-qa-db-fra.com

Création d'un index non clusterné sur une grande table remplit les journaux de transaction

Utilisation de SQL Server 2016, j'essaie de créer un index non clustered couvrant ​​sur une table dans ma base de données de la structure int, bigint, int, varchar(20), varchar(4000). La taille est ~ 13 241 928 rangées.

create nonclustered index nix_TableName on Schema.TableName (
    Column2 asc, Column3, asc
) include (Column4, Column5) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

Le problème est que les journaux de transaction se remplissent rapidement, qui sont assis sur un lecteur partitionné pour 50 Go. Le DB est assis sur un groupe de disponibilité avec 3 nœuds, DW1, DW2, DW3.

Quel serait le moyen le plus optimal/pratique d'obtenir cet indice de créer sans s'écraser? Puis-je accélérer la création d'index, comme le faire en lots? Y a-t-il des astuces que je manque que je peux inclure dans mon create nonclustered index déclaration?

J'ai trouvé - this documentation. J'essaie quelques-uns de ces conseils suivant.

Il existe déjà un index de stockage de colonne en cluster sur la table.

En outre, vérifiez le moniteur d'activité pour le serveur, je vois que le processus de création d'index est en cours d'être suspend. Avec le wait_type être CXPACKET. Je ne spécifie pas un MAX_DOP.

2
gh0st

J'irais avec l'ajout de stockage pour le lecteur de journal.

Je suppose que vous utilisez la maintenance sur cette base de données. Avoir plus d'espace peut empêcher que l'index de la reconstruction échoue.

50GO n'est pas beaucoup pour un très gros dB. Comme le stockage n'est pas coûteux, cela peut valger la valeur de $ pour vous sauver d'un incident avec le db down en raison du fichier journal complet.

Merci.

0
Dominique Boucher