indici - come, quando, perchè

31
Template designed by Indici: Come, Quando, Perché Davide Mauri [email protected] www.davidemauri.it

Upload: davide-mauri

Post on 05-Dec-2014

728 views

Category:

Technology


1 download

DESCRIPTION

Ogni database (relazionale e non) necessità di indici per poter fornire delle prestazioni ottimali. I database relazionali non scappano a questa regola ed, anzi, hanno nell'indicizzaione una grandissima opportunità per fornire prestazioni estreme. In questa sessioni vedremo i tipi di indici che abbiamo a disposizione, come si usano e come NON si usano e come possono migliorare le performance delle applicazioni.

TRANSCRIPT

Page 1: Indici - Come, Quando, Perchè

Template designed by

Indici: Come, Quando, Perché

Davide [email protected] www.davidemauri.it

Page 2: Indici - Come, Quando, Perchè

brought to you by

Page 3: Indici - Come, Quando, Perchè

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

3

Page 4: Indici - Come, Quando, Perchè

Indici e chiavi

Architettura dello storage

Tipi di indici

Utilizzo degli indici

Gestione e manutenzione

Query Tuning

Agenda

4

Page 5: Indici - Come, Quando, Perchè

Perché una sessione sugli indici?

•Dopo il modello dei dati sono gli strumenti che – utilizzati in modo corretto - permettono di ottenere le performance più alte!

Page 6: Indici - Come, Quando, Perchè

Primary key Insieme (minimo) delle colonne che permettono l’identificazione univoca di una riga tra tutte le altre

Foreign KeyChiavi Primarie “migrate” in una tabella collegata

Indici e chiavi

Page 7: Indici - Come, Quando, Perchè

Index keysInsieme delle colonne che compongono l’indice

ATTENZIONE!INDICI e CHIAVI (PK e FK) non hanno nulla in comune!!!!!

Semplicemente – per motivi per performance – le chiavi (PK e FK) usano gli indici.

Indici e chiavi

Page 8: Indici - Come, Quando, Perchè

I dati presenti in tabelle (ed indici) sono memorizzati in paginegrosse circa 8Kb

L’unità di I/O più piccola per SQL Server è la paginaLe pagine sono raggruppate in extent

Extent = 8 pagine da 8 Kb

Architettura dello storage

Page 9: Indici - Come, Quando, Perchè

RelazionaliClustered

Non Clustered

• Included Columns, Filtered Indexes

• Column Store

«Beyond Relational»XML / Full Text / Spatial

Tipi di indici

Page 10: Indici - Come, Quando, Perchè

Strutture ad albero rovesciatoB+ Trees

Clustered Indexes

Root

Non-LeafNon-Leaf Non-Leaf

Leaf (Table Data)

Leaf (Table Data)

Leaf (Table Data)

Leaf (Table Data)

Leaf (Table Data)

Page 11: Indici - Come, Quando, Perchè

Le pagine non-foglia permettono di capire in quali pagine sottostanti sta il dato che si sta cercando

Le pagine foglia contengono i dati della tabella

L’indice cluster ordina “fisicamente” i dati

Un solo indice cluster per tabella

Clustered Indexes

Page 12: Indici - Come, Quando, Perchè

Di default è messo sulla PKMa si può spostare!!!

Può essere costruito su colonne non univoche

Una tabella senza indice cluster si chiama “Heap”

Clustered Indexes

Page 13: Indici - Come, Quando, Perchè

Anche in questo caso B+ Trees

Non-Clustered (Row-Store) Indexes

Root

Non-LeafNon-Leaf Non-Leaf

Leaf (Index Data)

Leaf (Index Data)

Leaf (Index Data)

Leaf (Index Data)

Leaf (Index Data)

Page 14: Indici - Come, Quando, Perchè

GRANDI DIFFERENZE con il clusterLe pagine foglia NON contengono tutti i dati…

• …ma solo i valori delle chiavi dell’indice

E’ una struttura dati separata• Quindi “pesa” e comporta un overhead

Le pagine foglia contengono dei puntatori alle pagine dati della tabella• I puntatori sono diversi a seconda dell’esistenza o meno di un indice cluster

Non-Clustered (Row-Store) Indexes

Page 15: Indici - Come, Quando, Perchè

I puntatori possono essereRow Ids (se Heap)

Clustering Keys (se esiste indice cluster)

Ergo:Gli indici non-cluster sono costruiti sull’indice cluster

Nelle loro pagine foglia portano con se la clustering key

Non-Clustered (Row-Store) Indexes

Page 16: Indici - Come, Quando, Perchè

Se indice cluster non univoco?Univocità mantenuta in automatico da SQL…

…costa 4 byte per riga!

ATTENZIONE! Più è grande la chiave di cluster….…più spazio occupato nell’indice non cluster!

Non-Clustered (Row-Store) Indexes

Page 17: Indici - Come, Quando, Perchè

Included ColumnsColonne i cui valori non sono indicizzati MA sono inclusi nelle pagine foglia dell’indice

Permettono di migliorare, in alcuni casi, le prestazioniIndici di copertura

Non-Clustered (Row-Store) Indexes

Page 18: Indici - Come, Quando, Perchè

La riga di dati viene decomposta nelle singole colonne

Dati memorizzati in segmenti e dizionari

Non-Clustered (Column-Store) Indexes

18

Source: http://dl.acm.org/citation.cfm?id=1989448

Page 19: Indici - Come, Quando, Perchè

Non è importante l’ordine delle colonne

E’ una buona idea mettere TUTTE le colonne nell’indice

La tabella diventa read-only !Quindi aggiornamento tramite swtich partition

Non-Clustered (Column-Store) Indexes

Page 20: Indici - Come, Quando, Perchè

Ordinamenti

Group by

Range Search

Insert• Se e solo se l’indice è costruito su valori sempre crescenti

• Assicura che le pagine dei dati siano i memoria

• E se non avete *troppe* insert (>15000Batch/sec)

Utilizzo: Indice Cluster

Page 21: Indici - Come, Quando, Perchè

Solo se altissima selettivitàSelettività = righe interessate / righe totali

Overhead dato dall’operazione di “Bookmark lookup”Nell’execution-plan in SQL 2005 non è visibile come operatore ad-hoc ma come join tra cluster (o heap) e non-cluster

Utilizzo: Non Cluster

Page 22: Indici - Come, Quando, Perchè

Tipicamente in un Data Warehouse / Data MartOppure soluzione DSS (Decision Support System)

Ideale con uno Star Schema

Ideale per query con group by

Utilizzo: Non Cluster ColumnStore

Page 23: Indici - Come, Quando, Perchè

Indici di copertura (Covering Index)Non-Cluster

“Misto” (Non-Cluster + Cluster)

Indici che, da solo, è in grado di soddisfare una query“Copre” tutti i campi della query

Prima chiave dell’indice = prima colonna nella clausola where

Migliora di MOLTO le prestazioni in lettura!

Utilizzo: Di Copertura

Page 24: Indici - Come, Quando, Perchè

Tramite le “Included Colums” è possible creare indici di copertura più efficientiNon metto tutte le colonne della query come chiavi

Metto solo quelle usate per ricerca i valori (WHERE, GROUP BY)

Le colonne usate in SELECT … FROM le “includo”

Impatta solo sulle dimensioni delle pagine foglia

Utilizzo: Di Copertura

Page 25: Indici - Come, Quando, Perchè

Index in Action!

Page 26: Indici - Come, Quando, Perchè

Numero di indiciMax 249 (Non Cluster)

Max 1 (Cluster)

Numero max di colonne per indice: 16

Dimensione massima chiave dell’indice: 900 byte

Le included columns non contano!Max 1023 included columns per index

Limiti

Page 27: Indici - Come, Quando, Perchè

Obbiettivo: abbassare il più possibile le operazioni di I/OIn lettura

In scrittura

Tanti indici (potenzialmente) più velocità in lettura

(sicuramente) meno velocità in scrittura

Regola Aurea OLTPPOCHI MA BUONI

Performance Considerations

Page 28: Indici - Come, Quando, Perchè

Possibilità di VEDERE se per UNA query mancano degli indiciXML SHOWPLAN

MissingIndexesStatistics

DMVs:

sys.dm_db_missing_index_*

Altre DMVs & DMFs molto Utilisys.indexes & sys.indexes_columns

sys.dm_db_index_usage_stats

sys.dm_db_index_physical_stats()

Query Tuning

Page 29: Indici - Come, Quando, Perchè

Serve TEMPO e PAZIENZA Analisi I/O, TIME, Execution Plans, Cardinality Estimation

Oltre che un ambiente di TEST il più possibile uguale a quello di produzioneLe performance dell’I/O sono determinanti

Query Tuning

Page 30: Indici - Come, Quando, Perchè

Occhio alle stored procedureSe i dati sono molto disomogenei come distribuzione valutare l’uso di WITH RECOMPILE

In alcuni casi (UPDATE/DELETE) gli indici aiutano a diminuire le dimensione dei lock!

Query Tuning

Page 31: Indici - Come, Quando, Perchè

Grazie a tutti per la partecipazione

Riceverete il link per il download a slide e demo via email nei prossimi giorni

Per contattarmi

[email protected]

Grazie