UGI rocks, but today UGISS rulez!

Oggi ho partecipato alla 1° giornata organizzata a Roma (incredibile ma vero) da UGISS, ovviamente incentrata su SQL SERVER 2008.

Ammirevole il coraggio di Davide Mauri, che nonostante il magone (per sua stessa ammissione è tifoso dell'INTER) è venuto nella tana del lupo, proprio a Roma :-) .

Prima di scendere nei dettagli, alcune note generali: albergo con ampio parcheggio per le macchine, ma veramente fuori da tutti i percorsi dei mezzi pubblici, e in una zona di Roma che la mattina è veramente difficile raggiungere per via del traffico intensissimo. Tolto quest'unico punto di demerito, per il resto un albergo a 5 stelle, per ospitalità e cordialità. Io ero arrivato senza aver fatto la prima colazione, e visto che il bar non era ancora aperto sono stato invitato a salire al 7 piano, dove ho fatto una mega prima colazione con cornetto, pane, burro e marmellata e un ottimo latte macchiato. Costo: zero! Me l'hanno offerta. Il pranzo è stato un "vero pranzo", con ottimo vino, primo, secondo e una torta da fare invidia a nonna papera. Una cosa mai vista!

Prima sessione (Davide Mauri & Andrea Benedetti): Miti da sfatare.

Per ogni mito, una breve introduzione e una demo. Metodo che avrebbe senz'altro soddisfatto San Tommaso: provare per credere! Peccato che per l'ultimo mito da sfatare toccherà aspettare domenica, perchè Davide ha scritto (IMHO scaramanticamente): " l'INTER vince lo scudetto! ". Speriamo di sfatarlo, 'sto mito, anche se ci credo poco. E così, tra uno scherzo tra tifosi e molte info utili, se ne andata la prima sessione:

  • Un database non è relazionale perchè esistono relazioni definite tra le tabelle. Un database è relazionale anche se composto da un'unica Table. Una tabella è un insieme di n-tuple, ossia di relazioni tra n colonne. Il mito nasce dalla traduzione in italiano di Relational e Relationship che si traducono con relazionale e relazione: le due parole in inglese hanno significati nettamente distinti, quelle italiane riportano allo stesso concetto base;
  • L'indice cluster, che NON è necessariamente legato alla Primary Key;
  • Le Store Procedures non sono per loro natura transazionali, è lo sviluppatore che deve gestire il tutto secondo le necessità del caso. E se si inserisce il tutto in una transazione, in caso di errore non viene effettuato automaticamente il rollback. Occorre scrivere il codice che in caso di errore richieda esplicitamente di fare il rollback mediate l'apposita istruzione (IMHO un mito veramente assurdo e incomprensibile);
  • Le viste non sono più performanti di una query (mito evidentemente duro a morire, visto che a pranzo vicino a me c'era chi continuava a sostenerlo nonostante la spiegazione e la demo);
  • Una CTE (subquery) non necessariamente viene elaborata prima della Select che la usa (avviene quasi sempre, ma la cosa non è garantita), quindi se ad esempio la CTE filtra tutti i record di una determinata tabella con la colonna quantità maggiore di zero e poi la select che la usa definisce una colonna calcolata dividendo per tale quantità, potremmo comunque incappare in un errore di "division by zero";
  • L'hint NOLOCK è in realtà un hint di DirtyRead (o se preferite di ReadUncommitted). In pratica NOLOCK significa che non ci interessa rispettare i locks impostati da altri, ma la nostra operazione potrebbe benissimo creare dei locks e far aspettare altri;
  • Non usare @@IDENTITY (basta un trigger che fa un'insert su un'altra tabella a seguito del nostro insert per mandare tutto a p..ne!). Al suo posto usare Scope_Identity. Provare per credere!
  • Le viste sono delle tabelle filtrate secondo determinati criteri, e per definizione le tabelle (e quindi le viste) non sono ordinate. Poichè anche selezionare le prime n righe può essere un modo di filtrare una tabella, e tale selezione è evidentemente legata ad un determinato ordinamento, in una vista si può usare ORDER BY solo se si usa la clausola TOP. Ma non bisogna prendersi il braccio quando viene offerto un dito! Quindi niente trucchetti del tipo TOP 100%, perchè l'ottimizzatore potrebbe (e nel SQL Server 2008 lo fa!) accorgersene e restituirvi semplicemente il 100% dei records, ma senza ordinamento. Furbacchioni, attenti! L'ordinamento va messo nella Select che usa la vista. Questa è la cosa buona e giusta... ;
  • Una variabile Table non è transazionale (come non lo sono in generale le variabili). Non è vero che risiede solo in memoria. Anzi, se contiene un fracco di dati potrebbe andare in buona parte su disco, ed essere meno performante di una classica tabella temporanea;
  • "Query ed Event Notification" non ha nulla a che fare con i "Notification Services". sono due cose a se stanti, totalmente indipendenti;
  • Infine, dulcis in fundo, l'ultimo mito da sfatare: l'INTER vince il campionato (già commentata, non ho nulla da aggiungere!)

Seconda sessione (Davide Mauri): SQL Server 2008 - Novità per gli sviluppatori

Parzialmente simile a quanto già visto al lancio, con la differenza (fondamentale) che il tempo a disposizione ci ha permesso di andare più nello specifico su temi caldi, quali:

  • Insert di più rows (Row Values Constructor): come unica istruzione è implicitamente transazionale e molto comoda da usare;
  • Hierarchy: ho già qualche idea su come e dove usarla... ;
  • FileStream: il meglio dei due mondi, consistenza dei dati e backup integrato da una parte, rapidità e semplicità d'uso della risorsa che non è un un Binary Large Object ma un vero e proprio file su una directory del File System;
  • Geodati: bellissima la demo con Virtual Earth, anche se l'avevo già vista;
  • Change Tracking: una vera bomba! Bellissimo, non tocca la struttura del database. Implementato come un indice, ha il medesimo peso in termini di spazio occupato su disco. L'unica informazione che ciascuna applicazione remota deve mantenere è un numero (intero) che in seguito deve essere fornito al change tracking system per fargli sapere a che "punto della storia" si trova l'appicazione remota che vuole effettuare la sincronizzazione.

Mega pranzo!

Terza sessione (Gianluca Hotz & Luca Bianchi): Novità per gli Amministratori

Mio dio, è pur vero che come dice Lorenzo oramai è imperativo specializzarsi, ma qui le cose da studiare/sapere sono talmente tante che anche all'interno di un unico prodotto (vabbé, SQL Server è oramai una piattaforma)  c'è da specializzarsi. O sviluppi in T-SQL & .NET, o fai Business Intelligence, o fai il DB Administrator ! Comunque, armati di voglia e determinazione, pur con qualche difficoltà dovuta al lauto pasto, ci siamo immersi nel mondo dei DBA, e devo dire che la sessione è stata molto interessante:

  • Policy Management (e non mannaggia-ment !)
  • Drill Down Reports for DBA
  • Resource Governor
  • Data compression (molto ben spiegata da Luca Bianchi, andando sul dettaglio, con demo molto chiare e raccomandazioni su come e quando usarla)
  • Transparent Data Encription
  • Database Mirroring

Purtoppo quasi tutto è disponibile solo per la versione Enterprise, e se per molte delle features suddette ciò è più che comprensibile, propongo una petizione della community per chiedere la disponibilità del Transparent Data Encription su tutte le versioni, compresa la Express. Su questo punto penso di fare un post specifico, per chiarire idee e motivazioni.

-- Cofee break saltato per mancanza di tempo!

Quarta sessione (Andrea Benedetti & Francesco De Chirico): SQL Server 2008 - Novità per la Business Intelligence

La mia passione! Mi sono letteralmente "bevuto" ogni parola, e non vedo l'ora di provarlo:

  • Varie:
    • Merge come singola istruzione (quindi transazionale, con rollback automatico in caso di errore);
    • Grouping Set;
    • Star-join optimisation
  • Report Services:
    • No IIS;
    • Tablix;
    • Data Visualization con Dundas (il tutto disponibile anche su SQL Server Express !!!)
  • Analisys Service:
    • Best Practices Warnings (fichissimo!);
    • Facilitazioni e migliorie nel wizard;
    • Migliore UI per la definizione delle relazioni gerarchiche (con un tab dedicato e visual designer);
    • Block Computation (importantissimo, perchè evita ove possibile i calcoli relativi a celle nulle);
    • Detach e distribuzione di copie locali readonly (di cui fare l'attach sulle singole istanze locali di SQL Server);
    • Novità MDX: Create member, set member, definizione di set (quasi) dinamici;

La cosa più carina, IMHO, è avere a disposizione Dundas "a gratis". La più importante (sempre ed ovviamente IMHO) è la block computation.

Alla fine, la testa come un frullato (andato a male) ma felice, me ne sono tornato a casa.

Votazione identica per tutti gli spekers: 10 e lode. Grandissima professionalità. Grazie anche agli sponsor che hanno permesso di realizzare l'evento. Molti dei partecipanti (io incluso) hanno ricevuto una pennetta USB da 1 Giga targata Red Gate, moooolto carina, e un paio di magliette, Red Gate e Idera.

Grande giornata, mille grazie a tutti e in special modo, ovviamente, a Davide Mauri!

Un saluto anche ad Andrea Benedetti col quale ho chiacchierato molto piacevolmente.

posted @ giovedì 15 maggio 2008 1.55

Print

Comments on this entry:

# re: UGI rocks, but today UGISS rulez!

Left by Luca at 16/05/2008 17.41
Gravatar
Ciao Nicolò, è vero l'albergo era fuori da tutti i percorsi dei mezzi pubblici... fortuna che c'è sempre qualche anima pia ;) che pensa ai più sprovveduti come me che se la sono fatta a piedi!!

Sono d'accordo con la petizione... del resto oggi non è più pensabile di parlare di basi dati e non di sicurezza. Penso che Microsoft abbia concepito la versione Express di SQLServer proprio per aumentarne la diffusione e trarre profitto nel momento in cui il cambiamento delle esigenze richiede il passaggio alle versioni commerciali. Non penso che l'inclusione dell TDE nella Express remi contro questo obbiettivo, anzi penso proprio il contrario.

Saluti

# re: UGI rocks, but today UGISS rulez!

Left by Davide Mauri at 16/05/2008 19.15
Gravatar
Wow che bel resoconto! Sono *veramente* contento che la giornata sia venuta molto bene! Sicuramente cercheremo di ripetere l'esperienza :-)

# re: UGI rocks, but today UGISS rulez!

Left by Nicolò Carandini at 16/05/2008 19.32
Gravatar
Grazie Davide, anche se forse ho ecceduto ;-)
Ma mi serviva anche per fissare le idee e per appuntarmi le cose che poi andrò ad approfondire.

# re: UGI rocks, but today UGISS rulez!

Left by Marco Baldessari at 20/11/2008 12.14
Gravatar
Ciao,

Ho trovato molto utile il tuo resoconto.
Mi ha un po' spiazzato la spiegazione su NOLOCK perchè facendo varie ricerche sulla documentazione MSDN e su thread qua e là per Internet, la mia lettura su NOLOCK (meglio READUNCOMMITED) è che se adoperato su una select questo table hint indica a SQL che non deve essere applicato alcun modello di lock (tipicamente Shared Lock per la SELECT) in caso la SELECT non può terminare perchè altre transazioni chiedono lock esclusivo sul set risultato allora è la nostra SELECT che viene bloccata.

Questo è utile ad esempio in processi di reporting o come nel mio caso processi di estrazioni massive di dati attraverso tool ETL per B.I. o Datawarehousing.

vedi msdn.microsoft.com/en-us/library/ms187373.aspx oppure cerca NOLOCK su google

Your comment:



 (will not be displayed)


 
 
 
Please add 1 and 2 and type the answer here:
 

Live Comment Preview:

 
«luglio»
domlunmarmergiovensab
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678