Ho una tabella in un database di SQL Server 2005 che viene utilizzato molto. Ha le nostre informazioni sulla disponibilità del prodotto a portata di mano. Riceviamo aggiornamenti ogni ora dal nostro magazzino e negli ultimi anni abbiamo eseguito una routine che tronca la tabella e aggiorna le informazioni. Questo richiede solo pochi secondi e non è stato un problema, fino ad ora. Abbiamo molte più persone che utilizzano i nostri sistemi che interrogano queste informazioni ora, e di conseguenza stiamo vedendo un sacco di timeout a causa dei processi di blocco.Qual è il modo migliore per aggiornare i dati in una tabella mentre è in uso senza bloccare la tabella?
... così ...
abbiamo ricercato le nostre opzioni e sono venuti con l'idea di mitigare il problema.
- Avremmo due tabelle. Tabella A (attiva) e tabella B (non attiva).
- Creiamo una vista che punta alla tabella attiva (tabella A).
- Tutte le informazioni che necessitano di questa tabella (4 oggetti) ora dovrebbero passare attraverso la vista.
- La routine oraria troncarebbe la tabella inattiva, aggiornarla con le informazioni più recenti quindi aggiornare la vista in modo da puntare alla tabella inattiva, rendendola attiva.
- Questa routine determinerebbe quale tabella è attiva e in pratica cambia la visualizzazione tra di loro.
Cosa c'è di sbagliato in questo? Cambiare la visualizzazione della query intermedia causerà problemi? Questo può funzionare?
Grazie per la vostra esperienza.
Informazioni Extra
la routine è un pacchetto SSIS che peforms molti passi e alla fine tronca/aggiorna la tabella in questione
I processi di blocco sono altri due stored procedure che interrogano questo tavolo.
se si dispone delle licenze, due server con bilanciamento del carico separato potrebbe fornire un'alternativa senza soluzione di continuità. Ne mantieni uno in diretta e aggiorni l'altro e poi cambi. –