So che un INSERT su una tabella SQL può essere lento per qualsiasi numero di motivi:
- Esistenza di INSERTI GRILLETTI sul tavolo
- Molti vincoli forzati che devono essere controllati (di solito chiavi esterne)
- La pagina si divide nell'indice cluster quando una riga viene inserita al centro della tabella
- Aggiornamento di tutti gli indici non cluster correlati
- Blocco da altre attività sul tavolo
- Tempo di risposta in scrittura IO scadente
- ... qualcosa che mi mancava?
Come posso sapere qual è il responsabile nel mio caso specifico? Come posso misurare l'impatto delle suddivisioni di pagina rispetto agli aggiornamenti dell'indice non cluster rispetto a tutto il resto?
Ho un proc memorizzato che inserisce circa 10.000 righe alla volta (da una tabella temporanea), che richiede circa 90 secondi per 10k righe. È inaccettabilmente lento, poiché provoca il timeout di altri spid.
Ho esaminato il piano di esecuzione e vedo l'attività INSERISCI INDICE CLUSTERATO e tutti i RICERCHE INDICE delle ricerche FK, ma non mi viene ancora detto con certezza perché ci vuole così tanto tempo. Nessun trigger, ma la tabella ha una manciata di FKeys (che sembrano essere correttamente indicizzati).
Questo è un database SQL 2000.