Perché è necessario ricostruire e riorganizzare gli indici in SQL Server


28

Dopo aver cercato su Internet non sono riuscito a trovare il motivo

  1. Perché è necessario ricostruire e riorganizzare gli indici in SQL Server?

  2. cosa succede internamente quando ricostruiamo e riorganizziamo?

Un articolo su un sito dice:

L'indice dovrebbe essere ricostruito quando la frammentazione dell'indice è maggiore del 40%. L'indice dovrebbe essere riorganizzato quando la frammentazione dell'indice è compresa tra il 10% e il 40%. Il processo di ricostruzione dell'indice utilizza più CPU e blocca le risorse del database. La versione di sviluppo di SQL Server e la versione Enterprise hanno l'opzione ONLINE, che può essere attivata al momento della ricostruzione di Index. L'opzione ONLINE manterrà l'indice disponibile durante la ricostruzione.

Non riuscivo a capirlo, anche se dice che WHENper farlo, ma vorrei sapere WHYche dobbiamo ricostruire e riorganizzare gli indici?


1
Questa è la domanda sul perché, ed ecco la domanda sul quando .
Nick Chammas,

Risposte:


29

Man mano che esegui gli aggiornamenti degli inserti e le eliminazioni, i tuoi indici diventeranno frammentati sia internamente che esternamente.

La frammentazione interna è che hai un'alta percentuale di spazio libero nelle pagine dell'indice, il che significa che SQL Server deve leggere più pagine durante la scansione dell'indice.

La frammentazione esterna è quando le pagine dell'indice non sono più in ordine, quindi SQL Server deve fare più lavoro, soprattutto in termini di IO per leggere l'indice.

Se i tuoi indici diventano troppo frammentati, nella migliore delle ipotesi le tue query saranno meno efficienti, ma nella peggiore delle ipotesi, SQL Server smetterà di usare gli indici tutti insieme, il che significa che praticamente tutte le query dovrebbero eseguire una scansione di tabelle o una scansione di indici cluster. Questo danneggerà molto la tua esibizione!

Quando si riorganizza un indice, SQL Server utilizza le pagine dell'indice esistenti e mescola i dati solo in quei periodi. Ciò allevia la frammentazione interna e può anche rimuovere una piccola quantità di frammentazione esterna. È un'operazione più leggera rispetto alla ricostruzione ed è sempre online.

Quando si ricostruisce un indice, SQL Server effettivamente ricorre ai dati dell'indice e utilizza un nuovo set di pagine di indice. Ciò ovviamente allevierà la frammentazione sia interna che esterna, ma è un'operazione più pesante e per impostazione predefinita fa sì che l'indice diventi offline, sebbene possa essere eseguito come un'operazione online, a seconda della versione e delle impostazioni di SQL Server.

Tuttavia, non aspettarti di avere una frammentazione 0 dopo una ricostruzione. A meno che non si utilizzi un suggerimento per la query MAXDOP, SQL Server parallelizzerà l'operazione di ricostruzione e più processori saranno coinvolti, maggiore sarà la frammentazione, poiché ciascun processore o core ricostruirà individualmente la propria sezione o frammento dell'indice, indipendentemente da l'un l'altro. Questo è un compromesso tra i migliori livelli di frammentazione e il tempo impiegato per ricostruire l'indice. Per una frammentazione quasi 0, utilizzare MAXDOP 1 e ordinare i risultati in TempDB.


Grande...! Spiega semplicemente ...!
DineshDB,

0

Al fine di rimuovere la frammentazione che causa problemi come la lentezza a livello di database / query a esecuzione prolungata ecc.

Per ottenere una comprensione dettagliata della frammentazione e su come ricostruire e riorganizzare gli indici (o riorganizzare le pagine degli indici) per questo, consultare il link seguente: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
Queste informazioni sono diventate (in parte) obsolete dopo aver visualizzato Perché la frammentazione dell'indice non
conta
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.