Ricerca in FOLBlog

[SdSM] Rollback

 Scritto da alle 06:27 del 17/06/2012  Aggiungi commenti
Giu 172012
 
closeQuesto articolo è stato pubblicato 5 anni 1 mese 3 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.

rollback

I databases sono cose fantastiche. Consentono di organizzare i dati in entita’ gestibili (chiamate ‘records’) ordinandoli, aggiungendoli, modificandoli eccetera ecceterandoli. Come tutte le cose belle ed utili pero’, i database richiedono di essere usati in modo appropriato.

Se si cerca di usare un… qualsiasi cosa in effetti, in modo inappropriato non si otterra’ il risultato desiderato ma si complichera’ inutilmente la vita di tutti i coinvolti, in primis del SysAdmin che vi bestemmiera’ dietro.

E’ quello che ho pensato oggi, quando mi e’ piovuta nella casella di posta una mail che parla di "rilascio" dell’applicazioen tal-de-tali nell’ambiente di test.

Il ‘rilascio’ consiste piu’ o meno nella solita roba: copia di file .war, modifica di configurazioni ed una paccata di script .sql per aggiornare il database.

Uno in particolare di questi script ha attirato la mia attenzione:

delete from tabella1 where campo=valore;
delete from tabella2 where campo=valore;
delete from tabella3 where campo=valore;
delete from tabella4 where campo=valore;
delete from tabella5 where campo=valore;

Un rapido (si fa per dire) controllo mi ha detto che tabella1 contiene 18 milioni di records (diciottomilioni) di cui 17.9 milioni corrispondono a quella clausola ‘where’… taccio sulle altre tabelle il cui contenuto e’ simile.

Immediatamente e’ partita una mia mail che diceva piu’ o meno "ma se dobbiamo rimuovere il 99% dei records di una tabella, non facciamo prima a fare una copia dei dati che NON DEVONO essere rimossi, truncate della tabella e poi fare un restore dei dati salvati prima?"

Il programmatroto in oggetto ha blaterato di ‘coerenza dei dati’ ed altre cose varie, il discorso era abbastanza vacuo e lacunoso ed a me ha dato la netta impressione di qualcuno che non sa che differenza operativa ci sia tra una TRUNCATE ed una DELETE. Soprattutto quando ci sono di mezzo 18 milioni e passa di records ed un database con le transazioni.

L’ho detto che era venerdi’ pomeriggio alle 16.30? Se non l’ho detto era sufficientemente sottinteso?

Comunque sia, io ho lanciato (in screen) lo script. Dopo un paio d’ore, comunicato a chi di dovere che lo script stava ancora girando ed io non avevo la piu’ pallida idea di quanto ci avrebbe messo, me ne sono andato a casa. Durante il fine-settimana ho dato un’occhiata di tanto in tanto a come stavano andando le cose. Lo script era sempre fermo al suo ‘delete’.

79 ore dopo, lunedi’, mi arriva la telefonata del ‘responsabile it’ (CL) della situazione.

CL – Noi avevamo richiesto un rilascio venerdi’ scorso. Non abbiamo piu’ saputo nulla.
IO – Il vostro rilascio richiedeva l’esecuzione di una serie di script di aggiornamento del database, uno di questi sta ancora girando. Avevo fatto presente venerdi’ che lo script era fatto in modo… diciamo sub-ottimale… ed avrebbe richiesto del tempo per essere eseguito.
CL – Ma e’ da venerdi’ che noi non possiamo fare niente!
IO – Non e’ che io possa farci molto: il database non lo posso di certo velocizzare.

Dopo un po’ di geremiadi il CL decide di riportare il problema al suo programmatroto. Il quale finisce con il mandare una mail (in CC a me) che dice piu’ o meno che la cosa migliore da fare e’ di rifare lo script in modo "ottimizzato". Come ottimizzazione lui suggerisce di… copiare i records da non cancellare in una tabella temporanea, eseguire una ‘truncate’ della tabelle e… insomma la stessa identica cosa che io avevo suggerito a lui prima di eseguire questa query.

Ovviamente, quello che il programmatroto non ha preso in considerazione e’ che interrompere adesso la query vuole dire eseguire un rollback dell’intera operazione, rollback che, probabilmente, ci mettera’ lo stesso identico tempo che ci ha messo fino ad ora.

Come dicevo: se non si capisce come usare uno strumento si puo’ stare certi che lo si usera’ molto, ma molto male.

Davide

legenda personaggi

Articoli simili:

  • Facebook
  • Twitter
  • Delicious
  • StumbleUpon
  • Wikio
  • Reddit
  • Technorati
  • Segnalo
  • Live
  • Add to favorites
  • Email
  • RSS

 Lascia un commento

Puoi usare questi tag e attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(richiesto)

(richiesto)

Pinterest
EmailEmail
PrintPrint
%d blogger hanno fatto clic su Mi Piace per questo: