#sqlsatTorino #sqlsat400 May 23, 2015 Analisi prestazionale (Performance Tuning) in Microsoft SQL Server tramite Dynamic Management Objects Gilberto Zampatti
#sqlsatTorino #sqlsat400 May 23, 2015 Sponsors
#sqlsatTorino #sqlsat400 May 23, 2015 Organizers
#sqlsatTorino #sqlsat400 May 23, 2015 Speaker info IT pro IT pro da …un bel mucchietto di anni ;) MCT MCT: un pò meno di metà del tempo in aule di varia misura e capienza Mentore/Consulente Mentore/Consulente: mi si contatta quando le cose vanno …ma si vuol che vadano meglio Speaker Speaker: tra i fondatori di UGISS, qualche conferenza ogni anno mi tiene in salute
#sqlsatTorino #sqlsat400 May 23, 2015 Agenda System views / System Functions Dynamic Management Objects Approccio all’ Analisi prestazionale
#sqlsatTorino #sqlsat400 May 23, 2015 In principio… Ruolo originale del master i metadati erano persistiti in tabelle (system tables) esposte ed accessibili ISV e SW-houses ne facevano uso direttamente Ogni fix o Service pack comportava il rischio di una modifica al modello dei dati
#sqlsatTorino #sqlsat400 May 23, 2015 Ci voleva prudenza… SQL 2005 cambia le carte in tavola: Le system tables sono trasferite in un nuovo database (mssqlsystemresource) Il master si limita a far da tramite esponendo una collezione di viste (compatibility views) A complemento, sono disponibili anche nuove viste (catalog views)… … e sono introdotti per la prima volta nuovi oggetti
#sqlsatTorino #sqlsat400 May 23, 2015 Dynamic Management Objects La denominazione implica dinamicità dei valori esposti Dynamic Management Views (DMVs) Dynamic Management Functions (DMFs) Mondo in costante evoluzione: SQL 2005 ne espone 89 SQL 2008 ne espone 136 SQL 2012 ne espone 179 SQL 2014 ne espone 200
#sqlsatTorino #sqlsat400 May 23, 2015 Panoramica DMV e DMF espongono informazioni e contatori su un ampio ventaglio di oggetti e funzionalità: Informazioni sulle esecuzioni Informazioni sulle transazioni Informazioni sugli Indici Informazioni sui databases e sul rispettivo I/O Informazioni sul resto di SQL OS
#sqlsatTorino #sqlsat400 May 23, 2015 Sicurezza L’accesso ai DMO è protetto: I DMO che espongono oggetti dell’istanza (in senso lato) sono accessibili da accounts che disponono del privilegio VIEW SERVER STATE I DMO che espongono invece informazioni su oggetti di uno o più Databases sono accessibili da account dotati di privilegio VIEW DATABASE STATE
#sqlsatTorino #sqlsat400 May 23, 2015 Ambiti delle informazioni I DMO espongono valori che: Sono uno snapshot del momento dell’esecuzione Sono azzerati allo startup dei servizi e cumulativi fino allo shutdown Quasi sempre si rendono necessarie almeno due letture a distanza di tempo per derivare per ciascun valore un delta rappresentativo dell’intervallo “misurato”
#sqlsatTorino #sqlsat400 May 23, 2015 Un buon punto di partenza Migliorare le prestazioni significa…far attendere di meno l’Utente …ma PERCHE l’Utente attende? Eccessivo consumo di risorse (CPU, Memoria, Storage, Network…) Sys.dm_os_wait_stats fornisce I tempi cumulativi che ciascun “motivo” (Type) ha accumulato dal momento dello start del Servizio( ) In sql server 2012 ne sono classificati 654… Solo alcuni hanno un significato “negativo” e ci danno un primo indirizzo. MOLTO SOMMARIO (e talvolta ambiguo)
#sqlsatTorino #sqlsat400 May 23, 2015 Connessioni, Sessioni, Richieste (1) Connessioni (Connections) Un’Applicazione, per poter operare su un database deve CONNETTERSI all’istanza. Sys.dm_exec_connections fornisce informazioni sul traffico di rete, sul protocollo utilizzato, e sugli attributi della fonte della chiamata. ( ) Sessioni (Sessions) Una connessione consente ad applicazioni ed utenti di iniziare e condurre una o più sessioni. sys.dm_exec_sessions restituisce informazioni su ciascuna sessione applicativa o di Sistema: impostazioni, sicurezza, contatori (uso di CPU, Memoria, I/O, ecc.) ( )
#sqlsatTorino #sqlsat400 May 23, 2015 Connessioni, Sessioni, Richieste (2) Richieste (Requests) Scopo naturale della sessione è quello di richiedere a SQL server di svolgere attività (QUERIES) Sys.dm_exec_requests mette a disposizione un’ampia gamma di informazioni e di statistiche sulle queries eseguite (elapsed time, CPU time, Waits, ecc) ( ) Sys.dm_exec_sql_text restituisce il testo del batch la cui esecuzione è descritta ed individuate dalla richiesta (tramite sql_handle) ( ) Sys_dm_exec_query_plan rende il piano di esecuzione di quanto eseguito dalla richiesta (tramite plan_handle) ( )
#sqlsatTorino #sqlsat400 May 23, 2015 DEMO
#sqlsatTorino #sqlsat400 May 23, 2015 Queries e Piani di esecuzione (1) Quali sono le queries più costose ? Quelle che durano di più Quelle che, pur con relativa “efficienza”, sono eseguite molte volte Quali stored procedures ? I piani di esecuzione sono riutilizzati? Quali e quante queries “ad hoc” impegnano la plan cache?
#sqlsatTorino #sqlsat400 May 23, 2015 Queries e Piani di esecuzione (2) sys.dm_exec_query_stats restituisce statistiche prestazionali su ciascun piano presente in cache ( ) sys.dm_exec_procedure_stats restituisce statistiche prestazionali su ciascuna stored procedure ( ) sys.dm_exec_cached_plans informazioni dettagliate sui piani di esecuzione cached ( ) sys.dm_exec_query_optimizer_info restituisce informazioni relative all’operatività dell’ottimizzatore ( )
#sqlsatTorino #sqlsat400 May 23, 2015 Queries e Piani di esecuzione (3) sys.dm_exec_query_plan restituisce il piano di esecuzione in formato XML ( ) sys.dm_exec_text_query_plan restituisce il piano di esecuzione in formato testo ( ) sys.dm_exec_plan_attributes informazioni dettagliate sui piani di esecuzione (una riga per attributo) ( )
#sqlsatTorino #sqlsat400 May 23, 2015 Transazioni (1) A transaction is a sequence of operations performed as a single logical unit of work. A logical unit of work; must exhibit four properties, called the ACID properties, to qualify as a transaction. Atomic Consistent Isolated Durable
#sqlsatTorino #sqlsat400 May 23, 2015 Transazioni (2) sys.dm_tran_active_transactions offre un primo insieme di informazioni su ciascuna Transazione attualmente in essere Begin time Tipo (Read/write, Read Only, System, DTC) Stato (inizializzata, attiva, completata, in attesa, committed, rollbacked…ecc) ( )
#sqlsatTorino #sqlsat400 May 23, 2015 Transazioni (3) Due approcci alla concorrenza Ottimistico (basato su versioning) Pessimistico Diversi tipi di lock Diversi livelli di isolamento Locking & blocking condizionano le prestazioni Sys.dm_tran_locks restituisce informazioni su lock in essere (resource) e in attesa (requests) ( ) Sys.dm_os_waiting_tasks offer informazioni sui task in attesa di disponibilità di risorse (inclusa la nozione del o dei task “bloccanti”) ( )
#sqlsatTorino #sqlsat400 May 23, 2015 INDICI (1) Criticità del modello dei dati Ci sono indici inutilizzati? ( sys.dm_db_index_usage_stats ) Come sono utilizzati I nostri indici? ( sys.dm_db_index_operational_stats ) È possibile che …manchino indici che potrebbero interessare ( sys.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups, sys.dm_db_missing_idex_details, sys.dm_db_missing_index_columns ) Index related DMO: ( )
#sqlsatTorino #sqlsat400 May 23, 2015 INDICI (2) L’indice è un oggetto dinamico Soffre ineludibilmente di una malattia cronica: Frammentazione Sys.dm_db_index_physical_stats ALTER INDEX…REBUILD ALTER INDEX…REORGANIZE OK: ma quando serve deframmentare?
#sqlsatTorino #sqlsat400 May 23, 2015 INDICI (3) Non dimentichiamo che: CLUSTERED INDEX è sfruttato al meglio quando si inseriscono righe nell’ordine della chiave e quando deve essere PARZIALMENTE scandito NON CLUSTERED INDEX è l’ideale quando la selettività della chiave è elevate e serve un accesso per chiave (seek)
#sqlsatTorino #sqlsat400 May 23, 2015 DEMO
#sqlsatTorino #sqlsat400 May 23, 2015 Q&A Questions?
#sqlsatTorino #sqlsat400 May 23, 2015 THANKS! SPEAKERSCORE #sqlsatTorino #sqlsat400