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 04:55