Query Optimizer Overview Conor Cunningham Principal Architect, SQL Server Query Processor 1.
Query Processor & Statistics: A Performance Primer
-
Upload
davide-mauri -
Category
Technology
-
view
201 -
download
0
description
Transcript of Query Processor & Statistics: A Performance Primer
![Page 2: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/2.jpg)
brought to you by
![Page 3: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/3.jpg)
Works with SQL Server from 6.5, on BI from 2003
Specialized in Data Solution Architecture, Database Design, Performance Tuning, BI
Microsoft SQL Server MVP
President of UGISS (Italian SQL Server UG)
Mentor @ SolidQ
Regular Speaker @ SQL Server events
Consulting & Training
Davide Mauri
![Page 4: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/4.jpg)
Query Processor
Execution Plans
Data Distribution Statistics
Conclusioni
agenda
![Page 5: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/5.jpg)
SQL è un linguaggio DICHIARATIVO4° Generation Programming Language (4GL)
La query descrive il risultato che si vuole (ossia il «cosa»), senza indicare gli step per ottenerlo (ossia il «come»)
E’ quindi necessario un engine che si preoccupi del «come»
Query Processor Overview
![Page 6: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/6.jpg)
Query Processor Overview
Richiesta
SQLDati
(In Fretta eCorretti)
Magic
![Page 7: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/7.jpg)
Per ogni query inviata, il ciclo di vita è:
Query Processor
Parse Bind Optimize Execute
Qui viene definito il percorso di risoluzione della query, o “Execution Plan”
![Page 8: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/8.jpg)
Optimizer: Percorsi
• Come arrivare da «A» a «B»?
• Valuta i possibili percorsi• E il traffico?• E se usassi un altro
mezzo?
• Da un peso a tutti i percorsi• Prende quello meno costoso
![Page 9: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/9.jpg)
Query Optimization e Complessità
Select o_year, sum(case when nation = 'BRAZIL' then volume else 0end) / sum(volume)from( select YEAR(O_ORDERDATE) as o_year, L_EXTENDEDPRICE * (1 - L_DISCOUNT) as volume, n2.N_NAME as nation from PART, SUPPLIER, LINEITEM, ORDERS, CUSTOMER, NATION n1, NATION n2, REGION where P_PARTKEY = L_PARTKEY and S_SUPPKEY = L_SUPPKEY and L_ORDERKEY = O_ORDERKEY and O_CUSTKEY = C_CUSTKEY and C_NATIONKEY = n1.N_NATIONKEY and n1.N_REGIONKEY = R_REGIONKEY and R_NAME = 'AMERICA‘ and S_NATIONKEY = n2.N_NATIONKEY and O_ORDERDATE between '1995-01-01' and '1996-12-31' and P_TYPE = 'ECONOMY ANODIZED STEEL' and S_ACCTBAL <= constant-1 and L_EXTENDEDPRICE <= constant-2) as all_nationsgroup by o_year order by o_year
Circa 22 Milioni di piani di esecuzioni
possibili!
Query del Benchmark TPC-H
![Page 10: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/10.jpg)
Enumerare piani logicamente equivalenti applicando regole di equivalenza
Per ciascun piano cosi generato equivalenti, enumerare tutti i piani fisici possibili
Stimare il costo di ciascuno dei piani alternativi cosi ottenuti
Eseguire il piano con il più basso costo stimato complessivo
Query Optimization – Main Steps
![Page 11: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/11.jpg)
Operatori LogiciEs:JOIN
Operatori FisiciEs:LOOP JOIN, MERGE JOIN, HASH JOIN
Query Optimization – Operatori
![Page 12: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/12.jpg)
Applicano trasformazioni alla query al fine di poterla riscrivere e quindi semplificareEs: Inner Join è commutativa :
Es: IN, EXISTS, INNER JOIN possono essere riscritte allo stesso modo
397 in SQL Server 2012sys.dm_exec_query_transformation_stats
Query Optimization – Regole di riscrittura
![Page 13: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/13.jpg)
Execution Plans
![Page 14: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/14.jpg)
Ad ogni step del piano di esecuzione viene assegnato un costo stimatoLa somma totale è il costo totale del piano
Viene preso il piano con il costo minore
Per query complesse non vengono valutati tutti i pianiTecniche di «potatura» vengono usate per evitare di percorrere ramificazioni ipoteticamente non efficienti.
Come può sapere il reale costo di ogni piano?Non può!
Necessità di stime per capire cosa ha senso fare
Cost Based Optimization
![Page 15: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/15.jpg)
Estimated vs Actual
Ovviamente, è fondamentale che la stima sia realistica
Il percorso è stimato sulla basedella quantità di dati sui cui si deve operare
![Page 16: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/16.jpg)
Estimated vs Actual
Dall’execution plan è possibile avere informazioni su stima e valori attuali
![Page 17: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/17.jpg)
E’ necessario avere un’idea stimata dei dati con cui si andrà ad operare
Tanto più è verosimile la stima, tanto più i piani di esecuzioni saranno ottimali
Punti delicati
Dati distribuiti in modo non omogeneo
Dipendenze e Correlazioni
Data Distribution Statistics
![Page 18: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/18.jpg)
Numero di righe
Numero di righe campionate
Densità dei datiTotale
Per prefisso
Data ed Ora di campionamento
Lunghezza media della chiave
Numero di step (fino a 200)
Data Distribution Statistics
![Page 19: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/19.jpg)
Creazione Manuale
Statistiche create automaticamente sulle colonne indicizzate
Statistiche create automaticamente da SQL Server anche per le colonne non indicizzate
Data Distribution Statistics
![Page 20: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/20.jpg)
Memorizzano informazioni sulla distribuzione dei dati all’interno della colonnaSolo per la 1° colonna
Limitati a 200 steps
Histograms
![Page 21: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/21.jpg)
Da SQL Server 2005
SYS.STATS, SYS.STATS_COLUMNS, STAT_DATE
DBCC SHOW_STATISTICS
Da SQL Server 2008 SP2 e SQL Server 2012 SP1
SYS.DM_DB_STATS_PROPERTIES
Visualizzazione ed Analisi
![Page 22: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/22.jpg)
Show Statistics
HEADER
DENSITY VECTOR
HISTOGRAM
123 «Alexander»28 Rows tra «Adams» e «Alexander» (limiti esclusi)- 15 Valori Distinti - 1,86 Righe per ogni valore
![Page 23: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/23.jpg)
demoData Distribution Statistics At Work
![Page 24: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/24.jpg)
Ogni cosa che va a deteriorare la qualità delle stime è da evitare
Evitare di applicare funzioni sulle colonne nei predicati di ricerca quando possibile
Attenzione a catene di join lunghe perché amplificano l’errore statisticoL’utilizzo di una tabella temporanea di «appoggio» può essere di grande aiuto
Query Analysis & Optimization
![Page 25: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/25.jpg)
Sapere leggere ed analizzare
Piani di Esecuzione
Statistiche
E’ fondamentale per capire e quindi ottimizare una query
Conclusioni
![Page 26: Query Processor & Statistics: A Performance Primer](https://reader036.fdocuments.in/reader036/viewer/2022062709/558ecbf01a28ab3d3c8b4762/html5/thumbnails/26.jpg)
Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei prossimi giorni
Per contattarmi
Grazie