E' la vigilia di un giorno di festa: domani nessuno lavora.
Un ottimo momento per fare un'operazione un po' intrusiva sui nostri sistemi, così se qualcosa va storto o per le lunghe, c'è tutto il tempo di recuperare.
Devo svuotare un paio di tabelle temporanee che vengono utilizzate dal nostro sito. Entrambe hanno oltre nove milioni di record. Le strade possibili sono due:
- svuotare direttamente le tabelle da SQL Server e cambiare il contenuto "sotto al naso" del nostro Application Server. Soluzione performante, ma non è che l'Application Server "si arrabbia"?
- Cambiare alcuni parametri "magici" dell'Application Server in modo che sia lui a dare i comandi a SQL Server per svuotare le tabelle.
Siccome ne ho viste tante, decido di andare sul sicuro: scelgo la seconda strada, quella conservativa
Modifico i parametri e mi aspetto che dopo una mezz'oretta il sistema inizi a chiedere a SQL Server di svuotare le tabelle temporanee (che, mentre l'applicativo è in piedi, vengono di continuo utilizzate).
Dopo un po' torno a vedere che succede: non mi sembra che le cose stiano andando bene (le tabelle sono ancora piene) e il sito non risponde più, pur senza dare alcun errore.
Inizio un bel troubleshooting, ma prima di descrivervelo vi faccio una domanda: voi cosa fate per capire cosa sta davvero facendo SQL Server?

Io ho risolto i miei dubbi: ho trovato il modo di capire cosa sta impegnando SQL Server.
Lo volete sapere anche voi? Bene, ve lo spiego subito.
- Collegatevi al vostro database SQL Server.
- Aprite SQL Management Studio e fornite le credenziali.
- Selezionate il nome del database ed espandetelo con il segno +.
- Andate su Database/Views/System views/dm_exec_requests.
Eseguendo questa vista, vedrete tutto quello che sta facendo il vostro SQL Server.

Perché è così importante? Soprattutto per scoprire le query che vanno in stato di suspended
Talvolta, quando si processano alcune query, queste vanno in stato di suspended bloccando automaticamente la tabella in questione (nel mio caso, ecco perché non mi funzionava più il sito).
E non c'è nulla da fare: si può solo aspettare che la query finisca.
Ma io non posso aspettare; sì, lo so, l'operazione è impegnativa ma non posso bloccare il sito per tanto tempo.
Ora, con i passaggi indicati sopra, si può scoprire cosa sta facendo SQL Server e se c'è qualche query in stato di suspended.
Ma adesso viene il bello, perché vediamo come sbloccare quella tabella forzando SQL a rilasciarla
- Individuate l'ID del processo in stato di suspended (c'è proprio la colonna "session_id");
- aprite una finestra di SQL query e digitate il comando "Kill".
Questo comando stronca la query in stato di suspended e la tabella si sblocca.
E tu, come scopri cosa sta facendo SQL Server?