Database
 sql >> Database >  >> RDS >> Database

Caricamento di Big Data più veloce

Caricare Big Data? Per una maggiore velocità, preordina e carica in blocco

Trovare più velocità durante il caricamento di big data è una sfida in ETL, reorg e nell'indice VLDB (very large database) popolare le operazioni. Un modo per caricare i big data più velocemente è preordinarli, in modo che il database non debba essere ordinato. IBM e altri fornitori di database mainframe hanno dato questo consiglio per decenni, ed è ancora vero nei database relazionali in uso su Unix e altri "sistemi aperti" oggi, inclusi Oracle, DB2, Sybase e SQL Server.

I benchmark in quest'area mostrano miglioramenti rispetto ai carichi non ordinati a seconda del volume, ma i fornitori di smistamento come IRI affermano che le prestazioni del carico sono migliorate da due a dieci volte. Nel rapporto TUSC Consulting "Benchmarking Index Impact on OLTP Load Rates and Online Database Block Size Rebuild in Oracle", un solo test di inserimento a indice singolo di 100.000 righe ha mostrato che i dati preordinati venivano caricati il ​​58% più velocemente e richiedevano il 49% di spazio in meno:

  • Il caricamento in ordine ha avuto una percentuale di caricamento righe/secondo inferiore del 42%
  • Gli inserimenti non ordinati negli indici obbligano a svolgere più lavoro interno al database (gestione dei blocchi e riorganizzazione dello spazio)
  • Negli indici con ordinamento del carico, il fattore di clustering sarà vicino al numero di blocchi foglia
  • L'ordine dei dati caricati è fondamentale per caricare le prestazioni.

Molti anni dopo, nel capitolo 13 della sua guida "Expert Oracle Database 11g Administration", Sam R. Alapati (Miro Consulting) ha raccomandato il pre-ordinamento insieme ai carichi di percorso diretti come il modo più veloce per caricare in blocco Oracle (rispetto agli inserti):

"Il caricamento del percorso diretto l'opzione non utilizza l'istruzione SQL INSERT per inserire i dati nelle tabelle; piuttosto, formatta i blocchi di dati Oracle e li scrive direttamente nei file di database. Questo processo di scrittura diretta elimina gran parte dell'overhead coinvolto nell'esecuzione di istruzioni SQL per caricare le tabelle. Poiché il metodo di caricamento del percorso diretto non contende le risorse del database, caricherà i dati molto più velocemente di un caricamento dati convenzionale. Per carichi di dati più grandi, il metodo di caricamento del percorso diretto è il migliore e potrebbe essere l'unico metodo praticabile per caricare i dati nelle tabelle per il semplice motivo che un caricamento convenzionale potrebbe richiedere più tempo di quello disponibile."

Per gli amministratori di VLDB oggi, è qui che entra in gioco CoSort, dal momento che:

"Oltre agli ovvi vantaggi di un tempo di caricamento più breve, il caricamento diretto aiuta anche a ricostruire gli indici e a preordinare i dati delle tabelle."

CoSort viene tradizionalmente utilizzato nel pre-ordinamento esterno di un file flat che verrà importato in un carico specificando "direct=true" e questa opzione:

"SORTED INDEXES:il parametro SORTED_INDEXES segnala a SQL*Loader che i dati sono ordinati in base a un indice specifico, il che migliora le prestazioni di caricamento."

Allo stesso modo, la documentazione di Microsoft SQL Server specifica il pre-ordinamento dei file come uno dei "Metodi per l'ottimizzazione dell'importazione in blocco":

Per impostazione predefinita, un'operazione di importazione in blocco presuppone che un file di dati non sia ordinato. Se la tabella ha un indice cluster, il bcp l'utilità, l'istruzione BULK INSERT e la funzione OPENROWSET(BULK...) (Transact-SQL) consentono di specificare la modalità di ordinamento dei dati nel file di dati durante un'operazione di importazione in blocco. È facoltativo che i dati nel file di dati vengano ordinati nello stesso ordine della tabella. Tuttavia, puoi migliorare le prestazioni dell'operazione di importazione in blocco se specifichi lo stesso ordine per il file di dati della tabella.

Il campo /KEY in uno script CoSort SortCL sarebbe in genere la chiave di indice (primaria) più lunga nella tabella, ma non è necessario che lo sia. Secondo TUSC, per colonne simili:

  • Sono preferibili indici più lunghi rispetto a indici più brevi
  • La colonna principale determina il costo di caricamento dell'indice

Nota anche che:

  • Per Vertica e altri primer RDBMS, il mantenimento delle colonne in ordine ordinato ottimizza le prestazioni delle query. Anche il vecchio consiglio nella Guida Rdb/VMS di DEC alla manutenzione e alle prestazioni del database è ancora vero:

    “Preordina i record che intendi archiviare in una tabella in base al valore della chiave primaria prima di caricarli nel database. Quando i record vengono caricati, saranno fisicamente adiacenti l'uno all'altro o raggruppati fino a quando non verranno archiviati ulteriori record nel database. Il mantenimento di questa disposizione avvantaggia le query che selezionano righe in base a un intervallo di valori o che uniscono più righe di una tabella con righe nella stessa tabella."

  • Anche il pre-ordinamento dei dati nelle tabelle può far risparmiare tempo nelle viste. Secondo "Oracle Database 10g:The Complete Reference" di Kevin Loney:

    “L'ordinamento dei dati nella vista può semplificare lo sviluppo dell'applicazione. Ad esempio, se il codice passa attraverso una serie di record, avere tali record preordinati può semplificare l'elaborazione e il controllo degli errori. Nello sviluppo della tua applicazione, saprai che i dati ti verranno sempre restituiti in modo ordinato."

  • Il sig. Alapati avverte i DBA di una limitazione dei carichi diretti del percorso:
    “Nota:in un caricamento diretto, non è possibile utilizzare alcuna funzione SQL. Se è necessario eseguire un carico di dati di grandi dimensioni e anche trasformare i dati durante il caricamento, hai un problema. Il caricamento dati convenzionale ti consentirà di utilizzare le funzioni SQL per trasformare i dati, ma il metodo è molto lento rispetto al caricamento diretto. Pertanto, per carichi di dati di grandi dimensioni, potresti prendere in considerazione l'utilizzo di una delle tecniche di caricamento/trasformazione più recenti, come tabelle esterne o funzioni di tabella."
    Tuttavia, il programma SortCL di CoSort può trasformare i dati di caricamento durante il pre-ordinamento; ovvero combinando lo stesso tipo di funzioni SQL nello stesso job script e I/O pass, inclusi:join, aggregazioni, calcoli incrociati, ricerche, funzioni select/filter, sottostringa e instring e numerosi target di formattazione e report personalizzati — nella stessa operazione di pre-ordinamento.
  • La nuova utilità di riorganizzazione offline in IRI Workbench (Eclipse GUI) utilizza IRI FACT (Fast Extract) per scaricare rapidamente i dati delle tabelle tramite OCI, utilizza CoSort per eseguire il pre-ordinamento sulla chiave primaria e scrive ed esegue SQL*Loader direttamente carichi di percorso per ottimizzare e combinare ciascuno di questi passaggi.