Tales from the Machine Room |
Home Page | Comments | Articles | Faq | Documents | Search | Archive | Tales from the Machine Room | Contribute | Set language to:en it | Login/Register
Intanto che sono qui che trasferisco un database da uno degli ennemila server di "test" (che sono tutti di test altrimenti bisognerebbe pagare le licenze) al "vero" database server, quello che fu comperato prima che io me ne andassi ed e' rimasto a prendere polvere nel rack fino a ieri l'altro quando l'ho acceso per la prima volta, arriva uno dei CL.
CL - Ehi, tu sei D?
IO - Ti devo dei soldi? Ho giurato di sposarti in un momento che ero ubriaco? Ho giurato di
sposare un tuo parente in un momento in cui ero ubriaco?
CL - (confuso) Huh?
IO - (ok, ci ha il processore a 1.6 Mhz) Lascia perdere... si sono io, che vuoi?
CL - Mi ha detto UL che tu potresti aiutarmi con un problema che ho con una applicazione.
UL e' sempre il genio, amante dei piani superdettagliati che si sta prodigando come irresponsabile IT.
IO - Ok, che problema hai?
CL - Allora, la mia applicazione strumpa e ridumpa, frulla e risfrulla ma la connessione
al database e' mortalmente lenta. Volevo vedere come potevamo ottimizzare il database.
IO - Sei sicuro che il problema sia nel database?
CL - E che altro potrebbe essere?
Mi trattengo dal rispondergli "la tua testa". No, non lo so come o perche'. Comunque, usciamo dalla Sala Macchine ed andiamo a vedere questo problema.
L'applicazione (ovviamente) e' solo sul suo lapdog, e non e' installata su uno dei server di "test". Nota per me: chiedere ad UL di compilare una lista completa ed esaustiva di tutte le applicazioni che girano sui server di test e quali server, cosi' magari riusciamo a spegnere qualcuno di questo ginepraio di pc-che-fingono-di-essere-server.
CL - Allora, io faccio cosi' cosa' cosu'... ecco, adesso fa la richiesta al database e si blocca.
Ed in effetti, si blocca.
IO - Ok, quale e' il database che stai usando?
CL - Ruzgublfulful.
IO - (guardandolo fisso) E dove accidenti sta?
CL - Qui (indicando il laptop).
Ovviamente. E che ti pareva?
IO - Bene. Adesso fammi un dump del db e lo spostiamo sul server, cosi' vediamo subito se e' un
problema di risorse della macchina oppure no.
CL - (confuso) Un dump?
IO - Si, un dump. Del database.
CL - E come si fa?
Rapida introduzione di CL alle magie di mysqldump, chiappa il dump (2 Mb), crea un db sul server, importa il dump, imposta i permessi.
IO - Adesso imposta la tua applicazione per usare il db sul server, questi sono i dati.
CL - Huhhh... Quello non e' tanto facile...
IO - Perche'?
CL - Perche'....
IO - Hai le stringhe di connessione hard-wired nel codice.
Ovviamente, e che mi aspettavo?
IO - E come pensi di spostare l'applicazione in produzione (se mai ci andra') o in testing
(se mai ci andra')?
CL - Mah... io pensavo che il db rimanesse sulla stessa macchina quindi...
IO - Pensavi male. Adesso cambiati il codice in modo da usare un'altro server. E se vuoi un
mio consiglio (che te lo do' lo stesso anche se non lo vuoi), rimuovi tutti i parametri che
sono hard-wired e falli leggere da un file di configurazione.
CL inizia il difficoltoso lavoro di modificare il suo codice, reso ancora piu' difficile dal fatto che, apparentemente, e' incapace di usare un editor di testo ed il concetto di "search & replace" gli e' ignoto. Dopo un po' lo mollo li' e me ne ritorno al tavolo di cui mi sono impossessato come "postazione di lavoro". Un paio di ore dopo CL e' di ritorno.
CL - Ok, dovrei essere a posto...
IO - "Dovresti" essere a posto? Non hai provato?
CL - E come faccio a provare?
IO - Che ne dici di spegnere il tuo db server e vedere se ti becchi un errore?
CL - Ah, be... si ma non credo che funzioni cosi'...
IO - Perche'...?
Perche' (sciocco io a non pensarci subito), non appena avvia quella chiavica di una applicazione si becca una spataffiata di errori. Ed il funzionamento "normale" della cosa e' un errore ogni 30 secondi. Come potrebbe percio' distinguere un errore da un "errore" ?
Comunque, lui ricomincia la giga ed io tengo un occhio sul db.
CL - Ecco, adesso si e' ribloccato? Vedi che e' il database?
IO - (indicando la console) Database un corno. Non sta facendo niente.
CL - Come non sta facendo niente? Ma guarda che e' bloccato... il database...
IO - Il database ti ha dato le informazioni in clicckety-click unopuntodue
secondi.
CL - Ma la query...
IO - La query e' fatta, finita, hasta lasagna. I dati sono da qualche parte nella
tua applicazione, cosa ne stai facendo lo sai solo tu. Ma il database non e'
il problema.
CL - Ma... i dati... la query...
Io a quel punto mi impossesso del lapdog e faccio un rapido controllo: il processore e' a palla al 100%. Un thread dump dell'applicazione mi dice che negli ultimi 2.5 minuti, il tempo usato dal Garbage Collector e' stato di 2 minuti e 28 secondi. Ergo, gli unici due secondo che l'applicazione ha 'girato' e' stato durante la query al database.
IO - Eccoti il tuo problema, la tua applicazione e' scritta con i piedi.
In effetti potrebbe essere scritta anche con altre parti del corpo, ma sicuramente nessuna che ha minimamente a che fare con il cervello.
CL - Ma... la query... il database...
E cosi' il muro si e' arricchito di un altro dei miei "cartelli":
Davide
14/12/2009 08:00
Comments are added when and more important if I have the time to review them and after removing Spam, Crap, Phishing and the like. So don't hold your breath. And if your comment doesn't appear, is probably becuase it wasn't worth it.
aaaah..... By Herr Franz posted 14/12/2009 08:48
quel cartello By Tommaso posted 14/12/2009 09:10
Parole sante By MaxFrames posted 14/12/2009 09:17
brain dump By Anonymous coward posted 14/12/2009 09:30
@ Anonymous coward By BlackKatMike posted 14/12/2009 10:06
@ BlackKatMike By ringo posted 14/12/2009 10:19
Dovrebbe funzionare By Kesty posted 14/12/2009 10:25
@ Kesty By Cymon posted 16/12/2009 19:31
Ma... By noob posted 14/12/2009 11:16
@ noob By Davide Bianchi posted 14/12/2009 11:19
cartellonistica By Thesadsysadmin posted 14/12/2009 12:03
Commento By Piernicola Comuniello posted 20/12/2009 11:28
This site is made by me with blood, sweat and gunpowder, if you want to republish or redistribute any part of it, please drop me (or the author of the article if is not me) a mail.
This site was composed with VIM, now is composed with VIM and the (in)famous CMS FdT.
This site isn't optimized for vision with any specific browser, nor
it requires special fonts or resolution.
You're free to see it as you wish.