Progetto fisico e tuning del DB

La valutazione del progetto fisico di un db avviene tramite la misura delle prestazioni del db alle query più frequenti richieste dall’applicazione. Le prestazioni possono essere migliorate

Tuning e principali problematiche

Alcune delle problematiche principali affrontate sono:

🔷 Un indice può velocizzare alcune query, ma tipicamente rallenta le transazioni

✔️ Fondamentale in ambito distribuito, ma importante anche in DBMS centralizzati

Workload

Per effettuare un tuning efficace e fondamentale avere informazioni sull’utilizzo dei dati, in particolare

Selezione degli indici

Il problema della selezione degli indici può essere modellato con un problema di ottimizzazione, dato che lo spazio delle possibili soluzioni dato un Workload e enorme, le best practices sono le seguenti:

Esempio, query con join e selezione

SELECT E.name, D.mgr
FROM Employees E, Departments D
WHERE E.dno = D.dno
AND D.name = 'Toy'

In questo caso un piano di accesso ragionevole potrebbe essere questo:

flowchart TD E((D)) D((E)) C{{INDXSCAN}} B{{INDXJOIN}} A{{OUTPUT}} E --> C --> B D --> B B --> A

In questo caso sono necessari un indice su D.name e un indice su E.dno (possibilmente hash)

Esempio: join con filtro su due relazioni

SELECT E.name, D.mgr
FROM Employees E, Departments D
WHERE E.dno = D.dno
AND D.name = 'Toy'
AND E.age = 25

In questo caso se si possiede un indice su E.age potrebbe non essere necessario l’indice per fare index nested loop join, dipende da quanto e selettivo

Esempio: indici per query range

SELECT E.eid
FROM Employees E
WHERE E.age BETWEEN 20 AND 30
AND E.sal BETWEEN 3000 AND 5000

SELECT E.eid
FROM Employees E
WHERE E.sal BETWEEN 3000 AND 5000
AND E.age = 25

Nel primo caso un indice (b+tree) su age,sal può risultare conveniente, nel secondo caso l’ordine degli attributi nella query e più rilevante, in particolare:

Data clustering

Come mostrato in precedenza DB2 contempla la presenza di indici non perfettamente clustered, di conseguenza e necessario che attributi scegliere per un indice clustered e determinare il livello di clustering desiderato

✔️ Le query di range sono quelle che beneficiano maggiormente dalla clusterizzazione di un indice, insieme alle ricerche = su attributi non chiave traggono vantaggio da indici clustered in caso di molti duplicati

🔷 I piani di accesso index-only non necessitano di indici clustered

Collezione di statistiche su db2

Le informazioni statistiche su tabelle e indici sono fondamentali per permettere all’ottimizzatore di operare scelte accurate e per poter ragionare in fase di tuning

In DB2 si usa il comando RUNSTATS

RUNSTATS ON TABLE MySchema.TableName
WITH DISTRIBUTION ON ALL COLUMNS
AND DETAILED INDEXES ALL

La forma WITH DISTRIBUTION indica di collezionare statistiche dettagliate sulle distribuzioni dei valori (istogrammi e valori frequenti) delle varie colonne. La forma DETAILED INDEXES ALL genera informazioni utili per capire lo “stato di salute” di un indice e il costo di un index scan

Partizionamento dei dati

Il partizionamento dei dati viene svolto per diverse motivazioni tra cui suddividere il costo computazionale su piu server, escludere parti di table a priori data una query e ridurre il numero di transazioni in conflitto

Le strategie di partizionamento si dividono in due categorie

Partizionamento verticale

E’ il caso in cui gli attributi di una relazione vengono ripartiti su 2 o più table, mantenendo su ognuna la primary key

Partizionamento orizzontale

In una relazione partizionata orizzontalmente sono le tuple che vengono fisicamente ripartite in 2 o più table e la relazione originale si ottiene facendo la UNION delle diverse table

Le tipologie di partizionamento orizzontale sono 2:

Partizionamento degli indici

in caso di table partizionate si può partizionare anche gli indici

🔷 questo per evitare in fase di update di dover scandire tutte le partizioni

Transazioni e sql server-side

Un aspetto fondamentale per il tuning e la gestione delle transazioni in particolare

a tal fine possono essere impiegati trigger o stored procedures