Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gestione del volume delle righe unite
Se un'operazione di vacuum deve unire nuove righe nella regione ordinata di una tabella, il tempo richiesto per un vacuum aumenterà man mano che le dimensioni della tabella aumenteranno. È possibile migliorare le prestazioni di vacuum riducendo il numero di righe che devono essere unite.
Prima di un'operazione vacuum, una tabella è composta da una regione ordinata nella parte superiore della tabella, seguita da una regione non ordinata, che aumenta ogni volta che vengono aggiunte o aggiornate delle righe. Quando un set di righe viene aggiunto mediante un'COPYoperazione, il nuovo set di righe viene ordinato in base alla chiave di ordinamento man mano che viene aggiunto all'area non ordinata alla fine della tabella. Le nuove righe sono ordinate all'interno dello stesso set, ma non all'interno della regione non ordinata.
Il diagramma seguente illustra l'area non ordinata dopo due COPY operazioni successive, in cui si trova la chiave di ordinamento. CUSTID Per semplicità, questo esempio mostra una chiave di ordinamento composta, ma gli stessi principi si applicano alle chiavi di ordinamento interleaved, tranne per il fatto che l'impatto della regione non ordinata è maggiore per le tabelle interleaved.
![Diagram showing unsorted regions in database tables after two COPY operations with CUSTID as sort key.](images/vacuum-unsorted-region.png)
Un vacuum ripristina l'ordinamento della tabella in due fasi:
-
Ordina la regione non ordinata in una regione appena ordinata.
La prima fase è relativamente economica, poiché viene riscritta solo la regione non ordinata. Se l'intervallo dei valori delle chiavi di ordinamento della regione appena ordinata è superiore all'intervallo esistente, solo le nuove righe devono essere riscritte e l'operazione vacuum è completa. Ad esempio, se la regione ordinata contiene valori di ID da 1 a 500 e le successive operazioni di COPY aggiungono valori chiave maggiori di 500, è necessario riscrivere solo la regione non ordinata.
-
Unisci la regione appena ordinata alla regione precedentemente ordinata.
Se le chiavi nella regione appena ordinata si sovrappongono alle chiavi nell'area ordinata, deve unire le righe. VACUUM Partendo dall'inizio della regione appena ordinata (con la chiave di ordinamento più bassa), il vacuum scrive le righe unite dalla regione ordinata in precedenza e la regione appena ordinata in una nuova serie di blocchi.
La misura in cui il nuovo intervallo di chiavi di ordinamento si sovrappone alle chiavi di ordinamento esistenti determina la misura in cui la regione precedentemente ordinata dovrà essere riscritta. Se le chiavi non ordinate sono distribuite nell'intero intervallo di ordinamento esistente, potrebbe essere necessario un vacuum per riscrivere le parti esistenti della tabella.
Il diagramma seguente mostra come un aspirapolvere ordinerebbe e unirebbe le righe che vengono aggiunte a una tabella in cui si trova la chiave di ordinamento. CUSTID Dato che ogni operazione di COPY aggiunge un nuovo set di righe con valori chiave che si sovrappongono alle chiavi esistenti, è necessario riscrivere quasi l'intera tabella. Il diagramma mostra una singola operazione di ordinamento e unione, ma in pratica, un'ampia operazione di vacuum consiste in una serie di fasi incrementali di ordinamento e unione.
![Diagram showing vacuum process: sorting unsorted data, then merging sorted data into final table.](images/vacuum-unsorted-region-sort-merge.png)
Se l'intervallo di chiavi di ordinamento in un set di nuove righe si sovrappone all'intervallo di chiavi esistenti, il costo della fase di unione continua ad aumentare in proporzione alle dimensioni della tabella man mano che queste aumentano, mentre il costo della fase di ordinamento rimane proporzionale alla dimensione della regione non ordinata. In tal caso, il costo della fase di unione eclissa il costo della fase di ordinamento, come mostra il diagramma seguente.
![Diagram showing vacuum sort and merge process with three cylindrical containers representing data stages.](images/vacuum-example-merge-region-grows.png)
Per determinare la proporzione di una tabella che è stata riunita, eseguite la query SVV _ VACUUM _ al SUMMARY termine dell'operazione di vacuo. La seguente interrogazione mostra l'effetto di sei aspirapolvere consecutivi man mano che si sono CUSTSALES ingranditi nel tempo.
select * from svv_vacuum_summary where table_name = 'custsales';
table_name | xid | sort_ | merge_ | elapsed_ | row_ | sortedrow_ | block_ | max_merge_ | | partitions | increments | time | delta | delta | delta | partitions -----------+------+------------+------------+------------+-------+------------+---------+--------------- custsales | 7072 | 3 | 2 | 143918314 | 0 | 88297472 | 1524 | 47 custsales | 7122 | 3 | 3 | 164157882 | 0 | 88297472 | 772 | 47 custsales | 7212 | 3 | 4 | 187433171 | 0 | 88297472 | 767 | 47 custsales | 7289 | 3 | 4 | 255482945 | 0 | 88297472 | 770 | 47 custsales | 7420 | 3 | 5 | 316583833 | 0 | 88297472 | 769 | 47 custsales | 9007 | 3 | 6 | 306685472 | 0 | 88297472 | 772 | 47 (6 rows)
La colonna merge_increments fornisce un'indicazione della quantità di dati che è stata unita per ciascuna operazione di vacuum. Se il numero di incrementi di unione in operazioni vacuum consecutive aumenta in proporzione alla crescita delle dimensioni della tabella, ciò indica che ogni operazione vacuum sta unendo nuovamente un numero crescente di righe nella tabella, poiché le regioni esistenti e appena ordinate si sovrappongono.