Conosco una persona che apre "Visual Basic Journal" soltanto per leggere gli articoli di Paolo Pialorsi e Ingo Rammer. Premesso che, secondo me, la persona di cui sopra non ha tutti i torti circa la qualità media degli argomenti trattati negli ultimi tempi in VBJ - soprattutto se considerato in rapporto al prezzo della rivista - ... sono pienamente daccordo con lui circa il valore degli articoli di Pialorsi e di Rammer. In particolare, quest'ultimo è capace di tarare fuori dal suo cilindro delle osservazioni tanto semplici quanto brillanti, che si traducono in best practice di grande valore.
Per esempio, se si legge il suo ultimo articolo apparso su VBJ (n. 63) - intitolato "Ottimizzare i lock sui database" -, egli espone alcune linee guida esemplari per far fronte ai blocchi in ambienti ad alta concorrenza, che - a mo' di promemoria - riassumo di seguito:
una prima transazione (T1)
UPDATE Products
SET UnitsInStock = UnitsInStock + 10
WHERE ProductsID = 7
blocca questa seconda (T2)
SELECT UnitPrice
FROM Products
WHERE ProductID = 7
a meno che esista un indice (non-unique e non-clustered) su ProductID e UnitPrice, di modo che la T2 venga soddisfatta pienamente dall'indice, il quale non viene assolutamente bloccato dalla T1.
Un'altra best practice per applicazioni scalabili è non usare metodi di aggiornamento di accesso automatici (tipo DataSet), bensì stored procedure ben localizzate. Inoltre, per evitare lock bloccanti a livello di pagina, si può esplicitare attraverso la direttiva WITH (ROWLOCK) un lock a livello di record, piuttosto che lasciare decidere a SQLServer, il quale potrebbe optare per un lock a livello di pagina.
UPDATE Products
WITH (ROWLOCK)
SET UnitsInStock = UnitsInStock + 10
WHERE ProductID = 7
...anche se a qualcuno potrebbe sembrare poca cosa... bhè a me decisamente NO.
ecco in soldoni di cosa si è trattato:
2 giornate percorse in
3 track parallele suddivise ciascuna in
4 sessioni di
90 minuti interrotte (..e meno male..) da
2 pause caffè (altrimenti dette "pipì-stop" o "smoking-chance") e
1 pausa pranzo
Il ritmo martellante, la qualità e affidabilità degli speaker, le numerose novità introdotte da SQLServer2005 e (diciamolo pure) la qualità del pranzo gentilmente offerto :), hanno reso l'evento di sicuro interesse. A giudicare dalle voci che si alzavano dalla platea numerosa, sono stai in pochi a pentirsi di aver partecipato a questa anteprima. Le novità sono tante ed estremamente interessanti - a tal punto da figurare scenari applicativi davvero innovativi - e, nonostante i webcast, le pubblicazioni e il passa-parola, non a tutti è concesso il privilegio di famigliarizzare con la beta di Yukon, per cui vedere all'opera le novità, fa certamente bene allo "spirito" di chi si è trovato - per forza di cose - a rimandare questo appuntamento con SQLServer2005 Beta 2. Un unico rammarico: il fatto che le track fossero parallele ha reso impossibile seguirle tutte insieme...
comincio a prenderci gusto... sul nr. 63 di VisualBasic Journal un articolo su un utilizzo tanto bizzarro quanto efficace dei trigger per tenere traccia delle operazioni su un database trasazionale.
Per chi si fosse imbattuto in questo post e fosse interessato a questo e/o agli altri articoli segnalati nei post precedenti, sappia che ha la possibilità di leggerlo su www.xplayn.org (però, a distanza di un paio di mesi dalla pubblicazione su VBJ... dopo tutto, "non è mai troppo tardi").