INSERT richiede più di 5 ore, quando si inserisce più di un numero specifico di righe


8

Quando si inseriscono meno di circa 1.350.000 righe nella tabella, occorrono circa 2 minuti, tuttavia quando il numero di righe inserite è maggiore, il tempo necessario per inserire i dati aumenta a circa 5 ore.

Il problema non è connesso con query o indici, perché tutto ha funzionato bene per lungo tempo e nulla è cambiato nella struttura di query, tabelle o indici.

Il problema è apparso per la prima volta circa 2 settimane fa e compare ripetutamente nei giorni in cui il numero di righe inserite è maggiore di + -1.350.000. Ad esempio in un giorno il numero di righe inserite è di 1.200.000 e il processo richiede 2 minuti, nell'altro giorno il numero di righe è di 1.450.000 e ci vogliono 5-6 ore per inserire i dati.

Ho provato a ricostruire gli indici, ma non mi ha aiutato.


3
Qual è l'origine dell'inserto?
Martin Smith,

4
Puoi pubblicare qual è l' attesa associata quando l'inserimento impiega così tanto tempo?
Kin Shah,

4
Possiamo solo indovinare a meno che non forniate ulteriori informazioni. La mia ipotesi è l'escalation del blocco in corso. Riesci a rintracciare le attese e bloccare l'escalation
Shanky

1
È la prima volta che provi a inserire 1,3 milioni di record? Stai facendo transazioni? Importazione in blocco? Che tipo di registrazione stai facendo? Se stai eseguendo inserti di tipo jane, sono d'accordo, prova a fare gli inserti in batch.
SQLburn,

2
Come importare i dati (bcp, inserimento in blocco, SSIS, file batch)? Da dove (memoria locale, stessa / diversa unità, memoria di rete, ..)? Qual è lo schema della tabella? Qual è il comando di importazione? Qual è il piano di esecuzione (se è semplice T-SQL)?
Marian,

Risposte:


14

La mia ipotesi sarebbe - se non ti stai effettivamente bloccando - che stai raggiungendo una soglia oltre la quale il file di dati (e / o il file di registro) deve crescere e che la tua configurazione non è ottimizzata per supportare questa crescita. Assicurarsi che:

  1. Il tasso di crescita del tuo file di dati è ragionevole ed è di dimensioni fisse (non%!) Sufficientemente grandi da contenere questa transazione e qualsiasi altra cosa che può succedere contemporaneamente.
  2. Lo stesso per il file di registro.
  3. L'inizializzazione dei file istantanea è abilitata . Ciò contribuirà ad accelerare la crescita dei file di dati, ma non le crescite dei file di registro spesso più problematiche.
  4. Non stai inserendo 1,35 milioni di singole righe in un ciclo o comunque tutte come un'unica grande transazione. C'è qualcosa da dire per suddividere le tue transazioni in blocchi .

1
Aaron è perfetto con i suoi suggerimenti suona come filegrowth su dati o file di log. Assicurarsi inoltre che il numero di file di registro virtuale sia basso.
Namphibian,

4

Potrebbe essere un problema di memoria?

Si potrebbe vedere questo tipo di comportamento se alcuni blocchi di dati a cui è necessario accedere ripetutamente diventano troppo grandi per la memoria e si ottiene un crash del disco dall'inferno. Se devi eseguire il looping di una parte di dati che è troppo grande per la memoria, finisci per rileggere l'intera cosa dal file di scambio per ogni passaggio, spingendolo oltre quel limite può causare la caduta delle tue prestazioni.


3

Stai cercando di / è possibile dividerli in lotti più piccoli? Quando ho riscontrato un problema simile, raggrupparli per 5.000 (con GO) ha davvero ridotto il tempo necessario per completare tale attività.

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.