Domanda

Io sono a conoscenza di SQL Server Viste Indicizzate (o Oracle Viste Materializzate), li usiamo nelle nostre applicazioni OLAP.Essi hanno la caratteristica davvero cool di essere in grado di usurpare un piano di esecuzione e rimappare la vista indicizzata w/out dover modificare il codice esistente.

IE.Diciamo che ho avuto una stored procedure che era davvero costoso join.

SELEZIONARE [ALCUNE COLONNE]
Tabella1 INNER JOIN Tabella2 [DETTAGLI]
INNER JOIN Tabella3 [MAZZO PIÙ JOIN] ...

Se ho scritto una vista indicizzata, che ha tenuto un risultato simile impostare la Query Optimizer molto probabilmente inviare la stored procedure per la mia vista indicizzata in contrapposizione le tabelle di base e ottenere un grande aumento di prestazioni.

Ora diciamo che ho voluto utilizzare le viste indicizzate in un OLTP!? Voglio dire, la maggior parte OLTPs (come questo sito) sono relativamente leggere pesante, se sono costosi, si unisce quindi si potrebbe aumentare la velocità di una tonnellata E, potenzialmente, ridurre il blocco contesa (http://www.codinghorror.com/blog/archives/001166.html).Ancora migliore è che non hai bisogno di modificare il codice, solo autore della vista indicizzata.

Ma questo significa anche il database diventa più grande, dal momento che abbiamo bisogno di conservare una copia di questi dati nella vista indicizzata...

Qualcuno ha mai usato le viste indicizzate per risolvere la contesa o problemi di velocità in OLTP?Come mai non l'ho mai visto in uso?

È stato utile?

Soluzione

Viste materializzate può essere utile per la creazione di report contro OLTP, soprattutto è un numero elevato di righe sono aggregati per ottenere i risultati.I requisiti di spazio sono completamente dipendente dalla quantità di dati da salvare.Pensate a come una cache.

Il difficile equilibrio tra come i recenti dati deve essere per il report, e quanto di un colpo si può prendere OLTP prestazioni.Se un po ' stantio dati è OK, si può essere in grado di pianificare gli aggiornamenti per il punto di vista in un momento in cui l'attività del sistema è bassa.

L'unica volta che ho potuto, e non necessita di una corrente di dati, ho finito per usare alcune di sviluppo personalizzato.Ogni aggiornamento della tabella di base licenziato un trigger che ha scritto un record a una tabella di transazione.La vista guardato una cache di aggregazione, più il delta memorizzati nella tabella transazioni.Come risorse di sistema ammessi, le transazioni sono state applicate per la tabella aggregata come delta transazioni.Questo mi ha permesso fino al secondo di dati, buone prestazioni su segnalazione (l'unico centro di aggregazione accadendo era transazioni recenti) e abbastanza poco carico sul database (solo raddoppiando la dimensione di ogni scrittura, non ri-calcolo di un enorme aggregato di ogni tempo).

Purtroppo, è stato complesso da mantenere, e non hanno fatto uso di semplici strumenti.Se si può aspettare di reporting di dati, spesso è meglio utilizzare il costruito nel viste materializzate e rinviare l'aggiornamento.

Altri suggerimenti

Usiamo le viste materializzate per accelerare le cose in cui lavoro.Più spesso per i rapporti con il sistema OLTP.Molti dei nostri report eseguito da un data warehouse, ma dal momento che aggiorna il magazzino durante la notte, fino al momento in cui i dati devono venire dal OLTP tabelle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top