Modo indolore per creare un indice cluster su una tabella enorme?


22

Quindi abbiamo un sito di clienti che si lamenta di prestazioni molto lente. Ho dato un'occhiata ed è ovvio che il problema è che Somebody Else (grrrr) ha progettato una tabella contenente oltre 20 milioni di record senza un indice cluster.

Ora voglio creare un indice cluster su quella tabella, ma nel mio ambiente di test il mio create indexcomando è in esecuzione da un'ora e non è ancora stato eseguito. Il sito del cliente è un'officina che funziona 24 ore su 24, 7 giorni su 7, e non posso permettermi un'ora di inattività mentre creo un indice.

Esiste un metodo meno forzato per creare l'indice che finirà rapidamente il lavoro o lo faccia in un modo intelligente che non ucciderà totalmente le prestazioni del server mentre è occupato?

Stiamo usando SQL Server Enterprise Edition.

Risposte:


26
  • Se il tuo server sql è Enterprise + edition e la tabella non ha campi BLOB - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • In caso contrario, non c'è altro modo se non quello di creare la tabella con lo stesso schema sul lato e trasferire saggiamente i dati su di essa, comprese tutte le operazioni INSERT / UPDATE / DELETE (usando il trigger, ad esempio), e quindi eliminare con precisione la vecchia tabella e rinominare nuovi con lo stesso nome dei vecchi sono: lento, aggiunge ulteriore carico al server e alla memoria


12

Non sei sicuro di quale versione di SQL Server stia utilizzando il tuo cliente. In azienda è possibile creare l'indice con (ONLINE = ON), quindi la tabella è disponibile fino alla creazione dell'indice.


8
  • Crea una nuova tabella identica all'originale (ovviamente avrà bisogno di un nome diverso)
  • Crea indice cluster su una nuova tabella
  • Carica i dati in una nuova tabella
  • Rilascia la tabella originale
  • Rinomina nuova tabella usando il nome originale

Assicurati di applicare tutte le autorizzazioni richieste dall'originale.

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.