User Group Italiano SQL Server SQL Server “Denali” CTP3 Sequence Danilo Dominici [email protected] Attribution-NonCommercial-ShareAlike 2.5 http://creativecommons.org/licenses/by-nc-sa/2.5/ Speaker Danilo Dominici • +15 anni su SQL Server – Consulente e docente – Disegno, amministrazione, tuning di SQL Server dalla versione 6.5 – MCSE, MCAD, MCDBA, MCITP, MCT – Microsoft Community Contributor Award 2011 • Dal 2004 DBA in Regione Marche, VMWare administrator • Collaborazione attiva con UGISS – Speaker e autore UGISS - User Group Italiano SQL Server 2 Agenda • L’oggetto SEQUENCE – – – – Che cos’è Come si usa CACHE e prestazioni Scenari d’uso UGISS - User Group Italiano SQL Server 3 SEQUENCE Che cos’è • E’ un generatore di numeri (ANSI standard) • Indipendente, legato ad uno schema, non ad altri oggetti del db • Può essere usato come la IDENTITY specificando NEXT VALUE FOR come valore di default del campo • Al contrario della proprietà IDENTITY però: – Può essere utilizzata direttamente da T-SQL – E’ indipendente dalla tabella che lo utilizza – Può essere usata contemporaneamente da più tabelle (o campi) del database UGISS - User Group Italiano SQL Server 4 SEQUENCE Come si crea • Con il comando CREATE SEQUENCE Ad esempio: CREATE SEQUENCE dbo.MySequence START WITH 1 INCREMENT BY 1; • Posso definire in che modo generare la sequenza di valori: – – – – All’interno di un range specificato (min e max) Ascendente o discendente (incremento negativo) Valore iniziale (può essere diverso dal valore minimo) Ciclica UGISS - User Group Italiano SQL Server 5 SEQUENCE Come si crea Da SSMS UGISS - User Group Italiano SQL Server 6 SEQUENCE Come si usa • Richiedendo un valore singolo • Attraverso la funzione NEXT VALUE FOR – Restituisce il prossimo valore numerico della sequenza – Può essere usata in stored procedure, trigger, default • Maggiori info sul BOL http://msdn.microsoft.com/en-us/library/ff878370(v=sql.110).aspx UGISS - User Group Italiano SQL Server 7 SEQUENCE Come si usa • Richiedendo un “pool” di valori • Attraverso la stored proc sp_sequence_get_range – Accetta come parametri il nome della sequenza ed il numero di valori da assegnare – Restituisce nei parametri di output (opzionali) il primo e l’ultimo valore, il numero di cicli già compiuti, i valori di incremento, minimo e massimo impostati per la sequenza – Da usare quando alla mia applicazione servono n valori sequenziali tutti insieme • Maggiori info sul BOL http://msdn.microsoft.com/en-us/library/ff878352v=sql.110).aspx UGISS - User Group Italiano SQL Server 8 SEQUENCE Caching e prestazioni • Tramite l’opzione CACHE possiamo richiedere l’uso della cache e modificarne la dimensione • Serve a migliorare le prestazioni minimizzando l’I/O su disco – Se non specificata, la dimensione di default è di 50 valori (nella CTP3, potrebbe cambiare nella RTM) – In realtà SQL Server mantiene due soli numeri: il valore corrente ed il numero di valori rimasti in cache • E’ un estensione di SQL Server allo standard ANSI • E’ possibile specificare NO CACHE, ma ogni volta che si richiede un valore, SQL Server deve aggiornare le tabelle di sistema UGISS - User Group Italiano SQL Server 9 SEQUENCE Scenari di utilizzo • Quando usare SEQUENCE ? – L’applicazione richiede un numero prima di fare la INSERT – Più tabelle (o colonne) devono condividere la stessa numerazione – La numerazione deve ricominciare al raggiungimento del limite – I valori della sequenza devono essere generati ordinandoli sulla base di un altro campo della tabella – L’applicazione richiede un range di valori preassegnati – Occorre modificare a runtime le specifiche della sequenza (es. cambiarne il valore di incremento) UGISS - User Group Italiano SQL Server 10 SEQUENCE Scenari di utilizzo • Limitazioni – – – – Nessuna protezione da UPDATE Univocità non garantita by design Nessun controllo sull’utilizzo dei valori generati Se creata con l’opzione CACHE, in caso di shutdown improvviso si possono creare buchi nella numerazione UGISS - User Group Italiano SQL Server 11 SEQUENCE UGISS - User Group Italiano SQL Server 12 SEQUENCE Risorse Generiche • Presentazione e demo – • Informazioni sul prodotto SQL Server – – • microsoft.public.it.sql microsoft.public.sqlserver.* Newsgroups pubblici via WEB – – • http://www.ugiss.org Newsgroups pubblici via NTTP – – • http://www.microsoft.com/technet/prodtechnol/sql http://msdn.microsoft.com/sql Comunità SQL Server – • http://www.microsoft.com/italy/sql http://www.microsoft.com/sql Supporto sviluppo ed professionisti IT – – • http://www.ugiss.org http://www.microsoft.com/italy/communities/newsgroups/default.mspx http://www.microsoft.com/technet/community/newsgroups/server/sql.mspx Formazione – http://www.microsoft.com/italy/traincert UGISS - User Group Italiano SQL Server 13 SEQUENCE Risorse Specifiche • SQL Server “Denali” Books On-Line – – – – – • Articoli magazines – – • Sequence numbers CREATE SEQUENCE NEXT VALUE FOR sp_sequence_get_range sys.sequences SQL Server Magazine - Itzik Ben-Gan (parte 1) SQL Server Magazine - Itzik Ben-Gan (parte 2) Blogs – – – Sergio Govoni (SQL Server MVP) Aaron Bertrand (SQL Server MVP) SSMA Team Blog - Converting Oracle Sequence using SSMA for Oracle v5.1 UGISS - User Group Italiano SQL Server 14