Microsoft SQL Server 2005: Temporary Objects & Troubleshooting Francesco Quaratino Francesco Quaratino MCP, MCDBA, MCT Francesco
AgendaAgenda Introduzione Materializzazione dei dati Tabelle temporanee Tempdb Caratteristiche e funzionamento internal objects, version store, user objects User objects Local tables, global tables, in tempdb, table variables Improvements in Sql Server 2005 avoiding “after value” logging, instant data file initialization, deferred drop, caching Troubleshooting Space, I/O bottlenecks, contention in DML/DDL operations Performance counter, Dynamic Management Views (DMVs) Best Practise Number of files, files size, shrinking Introduzione Materializzazione dei dati Tabelle temporanee Tempdb Caratteristiche e funzionamento internal objects, version store, user objects User objects Local tables, global tables, in tempdb, table variables Improvements in Sql Server 2005 avoiding “after value” logging, instant data file initialization, deferred drop, caching Troubleshooting Space, I/O bottlenecks, contention in DML/DDL operations Performance counter, Dynamic Management Views (DMVs) Best Practise Number of files, files size, shrinking
IntroduzioneIntroduzione materializzazione dei dati Tabelle temporanee, viste, table variables, table expressions ospitare dati intermedi Possibilità di indicizzare solo una porzione di dati condividere dati fra più connessioni Tempdb come risorse globale condivisa tabelle temporanee nel tempdb o in cache da qualsiasi connessione e database context materializzazione dei dati Tabelle temporanee, viste, table variables, table expressions ospitare dati intermedi Possibilità di indicizzare solo una porzione di dati condividere dati fra più connessioni Tempdb come risorse globale condivisa tabelle temporanee nel tempdb o in cache da qualsiasi connessione e database context
Tempdb (Caratteristiche e funzionamento) si ricrea ad ogni riavvio A partire dal database model No Recovery Process Non necessità di ripristino all’avvio del servizio recovery model Simple Non può essere modificato si ricrea ad ogni riavvio A partire dal database model No Recovery Process Non necessità di ripristino all’avvio del servizio recovery model Simple Non può essere modificato
Tempdb (Caratteristiche e funzionamento) tempdb log Le operazioni sul tempdb sono loggate! Bulk copy program, bulk insert, SELECT INTO, index rebuild are bulk logged Ammesso il rollback transazioni che coinvolgono tabelle temporanee Non supportato il roll-forward Meno informazioni registrate rispetto a un user-db operazioni fino a 4 volte più veloci! tempdb log Le operazioni sul tempdb sono loggate! Bulk copy program, bulk insert, SELECT INTO, index rebuild are bulk logged Ammesso il rollback transazioni che coinvolgono tabelle temporanee Non supportato il roll-forward Meno informazioni registrate rispetto a un user-db operazioni fino a 4 volte più veloci!
Tempdb (internal objects, version store, user objects) Internal objects Ad uso interno di Sql Server Esempi d’uso: Per variabili di tipo XML e LOB Cursori Keyset e Static Dati intermedi di una query da ordinare Messaggi in transito del Service Broker Non utilizzabili dalle applicazioni Non visibili attraverso sys.all_objects No log records Internal objects Ad uso interno di Sql Server Esempi d’uso: Per variabili di tipo XML e LOB Cursori Keyset e Static Dati intermedi di una query da ordinare Messaggi in transito del Service Broker Non utilizzabili dalle applicazioni Non visibili attraverso sys.all_objects No log records
Tempdb (internal objects, version stores, user objects) Version stores per registrare row versions Snapshot isolation, tiggers, MARS, online index build Non visibili attraverso sys.all_objects No log records User objects Tabelle e indici definiti dall’utente Visibili attraverso sys.all_objects Trattabili mediante DML e DDL Version stores per registrare row versions Snapshot isolation, tiggers, MARS, online index build Non visibili attraverso sys.all_objects No log records User objects Tabelle e indici definiti dall’utente Visibili attraverso sys.all_objects Trattabili mediante DML e DDL
Local (or Private) Temporary Tables Visibilità solo nella connessione che l’ha creata Solo nel batch che l’ha creata Se creata in una SP, al termine di quest’ultima non è più visibile perché automaticamente distrutta No name-collision Ammessi tutti i constraints eccetto Foreign Key Visibilità solo nella connessione che l’ha creata Solo nel batch che l’ha creata Se creata in una SP, al termine di quest’ultima non è più visibile perché automaticamente distrutta No name-collision Ammessi tutti i constraints eccetto Foreign Key CREATE TABLE #T1 ( [id] INT NOT NULL PRIMARY KEY, [nome] VARCHAR(50) DEFAULT ('Ivan'), [età] TINYINT CHECK ([età]>18) )
Local temporary tables
Global Temporary Tables Visibilità Da tutte le connessioni Non necessità di permessi (non molto salutare..) Ogni sessione può farne il DROP Possibilità di name-collision Ammessi tutti i constraints eccetto Foreign Key Visibilità Da tutte le connessioni Non necessità di permessi (non molto salutare..) Ogni sessione può farne il DROP Possibilità di name-collision Ammessi tutti i constraints eccetto Foreign Key CREATE TABLE ##T1 (... )
Global Temporary Tables Muore con la chiusura dell’ultima connessione che la usa Dopo la chiusura della connessione in cui è stata creata, vi accede solo le connessioni che la stanno già utilizzando Di fatto, una connessione che la sta usando detiene un lock sulla tabella e quando l’ultimo lock viene rilasciato, la tabella viene distrutta automaticamente Muore con la chiusura dell’ultima connessione che la usa Dopo la chiusura della connessione in cui è stata creata, vi accede solo le connessioni che la stanno già utilizzando Di fatto, una connessione che la sta usando detiene un lock sulla tabella e quando l’ultimo lock viene rilasciato, la tabella viene distrutta automaticamente
Global temporary tables
Direttamente nel tempdb Tabelle temporanee sempre disponibili..un po’ un controsenso Necessità di permessi sul tempdb Da reimpostare a ogni riavvio! Un idea è sfruttare il model (ma non è consigliabile) Ammessi tutti i constraints Tabelle temporanee sempre disponibili..un po’ un controsenso Necessità di permessi sul tempdb Da reimpostare a ogni riavvio! Un idea è sfruttare il model (ma non è consigliabile) Ammessi tutti i constraints CREATE TABLE tempdb.dbo.T1 (... )
Table variables Create tacitamente nel tempdb Limitazioni No explicit indexes (except PK e Unique) No alter definition No SELECT INTO e INSERT EXEC Visibilità limitata al livello e al batch corrente (come una qualsiasi variabile) Non è parte di una transazione esplicita Create tacitamente nel tempdb Limitazioni No explicit indexes (except PK e Unique) No alter definition No SELECT INTO e INSERT EXEC Visibilità limitata al livello e al batch corrente (come una qualsiasi variabile) Non è parte di una transazione esplicita AS TABLE ( [CustomerID] VARCHAR(100), [name] VARCHAR(100) )
Table variables Table variables
Improvements in Sql Server 2005 evita il log degli “after value” A vantaggio delle operazioni di INSERT e UPDATE delle dimensioni del file di log del tempdb delle operazioni di I/O sul disco che ospita il log instant data file initialization Non azzera il nuovo spazio del data file Solo per il data file Necessita di WinXP o Win2003 evita il log degli “after value” A vantaggio delle operazioni di INSERT e UPDATE delle dimensioni del file di log del tempdb delle operazioni di I/O sul disco che ospita il log instant data file initialization Non azzera il nuovo spazio del data file Solo per il data file Necessita di WinXP o Win2003
Improvements in Sql Server 2005 deferred drop L’applicazione non deve attendere l’avvenuta cancellazione perché realizzata in background Usato per oggetti più grandi di 8 MB Caching A vantaggio delle operazioni di creazione e cancellazione objects smaller than 8 MB are cached Non avviene il cache per le tabelle ridefinite mediante DML dopo la creazione Che presentano constraints con nome Se create in modo dinamico deferred drop L’applicazione non deve attendere l’avvenuta cancellazione perché realizzata in background Usato per oggetti più grandi di 8 MB Caching A vantaggio delle operazioni di creazione e cancellazione objects smaller than 8 MB are cached Non avviene il cache per le tabelle ridefinite mediante DML dopo la creazione Che presentano constraints con nome Se create in modo dinamico
TroubleshootingTroubleshooting Identificare applicazioni e query che consumano risorse Space, I/O bottlenecks, contention in DML/DDL operations Intraprendere azioni correttive Dimensionamento dei file Potenziamento hardware Modifica delle applicazioni Identificare applicazioni e query che consumano risorse Space, I/O bottlenecks, contention in DML/DDL operations Intraprendere azioni correttive Dimensionamento dei file Potenziamento hardware Modifica delle applicazioni
TroubleshootingTroubleshooting Tools for monitoring (for Space) Performance counters Dynamic Management Views (DMVs) Sys.dm_db_file_space_usage allocazione file - a livello di istanza - divisi per categorie di oggetti (internal, versin store, user) Sys.dm_db_session_file_usage allocazione file - livello di sessione Sys.dm_db_task_space_usage allocazione file – livello di task (batch) Tools for monitoring (for Space) Performance counters Dynamic Management Views (DMVs) Sys.dm_db_file_space_usage allocazione file - a livello di istanza - divisi per categorie di oggetti (internal, versin store, user) Sys.dm_db_session_file_usage allocazione file - livello di sessione Sys.dm_db_task_space_usage allocazione file – livello di task (batch)
Best Practices for tempdb (1/2) Numero di file più file di dati e log per potenziare I/O linea guida: un file per ogni CPU Dischi ad-hoc RAID10 per dati RAID1 per log Evitare l’auto-incremento di dafult impostato a 10% Induce alla frammentazione dei dati Numero di file più file di dati e log per potenziare I/O linea guida: un file per ogni CPU Dischi ad-hoc RAID10 per dati RAID1 per log Evitare l’auto-incremento di dafult impostato a 10% Induce alla frammentazione dei dati
Best Practices for tempdb (2/2) Files size Dopo aver osservato le dimensioni del tempdb per un lungo periodo di attività senza riavvio, modificare manualmente la dimensione dei file di dati e log Shrinking non è una buona norma Non agisce su internal object e version store Necessita avvio in single user mode Files size Dopo aver osservato le dimensioni del tempdb per un lungo periodo di attività senza riavvio, modificare manualmente la dimensione dei file di dati e log Shrinking non è una buona norma Non agisce su internal object e version store Necessita avvio in single user mode
RiferimentiRiferimenti Inside Microsoft Sql Server 2005: T-sql Programming Itzik Ben-Gan, Microsoft Press, 2006 Working with tempdb in SQL Server 2005 (whitepaper) /4f8f2dc9-a9a7-4b68-98cb c95e0b/WorkingWithTempDB.doc Inside Microsoft Sql Server 2005: T-sql Programming Itzik Ben-Gan, Microsoft Press, 2006 Working with tempdb in SQL Server 2005 (whitepaper) /4f8f2dc9-a9a7-4b68-98cb c95e0b/WorkingWithTempDB.doc
RisorseRisorse DotNetSide User Group: Xplayn: Ugiss: My.settings. DotNetSide User Group: Xplayn: Ugiss: My.settings.
Prossimi Webcast Dotnetside 19/10/ Introduzione a Windows Presentation Foundation Vito Arconzo
Prossimi Webcast Sql Server /10/2006 – Backup & Restore dei dati Gianluca Hotz 23/10/2006 – Programmazione T-SQL: le stored procedure e le viste Andrea Benedetti 16/10/2006 – Backup & Restore dei dati Gianluca Hotz 23/10/2006 – Programmazione T-SQL: le stored procedure e le viste Andrea Benedetti
Workshop Un workshop gratuto a Bari in cui parleremo di Asp.net, Click Once, Team System, Workflow e Windows Communication Foundation, il tutto accompagnato da esempi reali e subito disponibili per il download! Ed in più un.netShow in compagnia di Francesco Balena e Giuseppe Di Mauro! Consulta l’agenda all’indirizzo: Registrati subito! I posti sono limitati!!!
Grazie! & Enjoy Your SeQueL Grazie! & Enjoy Your SeQueL