2013-10-17 11 views
7

Si utilizza Oracle 10G e una delle tabelle richiede molto tempo se si esegue una query/eliminazione di dati. Questa tabella contiene circa 10 milioni di record.Qual è l'impatto dell'abilitazione/disattivazione di ROW_MOVEMENT in Oracle 10g?

Recentemente abbiamo scoperto che ROW_MOVEMENT è disabilitato su questo tavolo, vogliamo capire seguente:

  1. Quello che guadagno di prestazioni che possiamo ottenere se abilitare ROW_MOVEMENT?
  2. Ci sono degli svantaggi nell'abilitare ROW_MOVEMENT?
  3. Quale movimento di fila del trigger? In che modo oracle decide di spostare ROWS?

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie in anticipo !!

risposta

8

Il movimento di riga è principalmente applied to partition tables. Consente alle righe di essere spostate tra le partizioni. Con il movimento fila disattivato, ovvero l'impostazione predefinita, non è possibile spostare una riga con un aggiornamento:

SQL> CREATE TABLE part_table (ID NUMBER) 
    2 PARTITION BY RANGE (ID) 
    3  (PARTITION p0 VALUES LESS THAN (1), 
    4  PARTITION p1 VALUES LESS THAN (MAXVALUE)); 

Table created 

SQL> INSERT INTO part_table VALUES (0); 

1 row inserted 

SQL> UPDATE part_table SET ID = 2; 

UPDATE part_table SET ID = 2 

ORA-14402: updating partition key column would cause a partition change 

Quando consenti movimento fila, è possibile spostare le righe con un aggiornamento:

SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT; 

Table altered 

SQL> UPDATE part_table SET ID = 2; 

1 row updated 

Questo Nella maggior parte dei casi, la funzionalità non influisce sulle prestazioni: le righe vengono archiviate e interrogate esattamente nello stesso modo, indipendentemente dal fatto che la funzione sia abilitata o meno. Tuttavia, quando il movimento di riga è abilitato, le righe possono essere spostate fisicamente (simile a delete + insert) con ALTER TABLE SHRINK SPACE per esempio. Questo può a sua volta influire sul fattore cluster di indice, ad esempio, che può influire sulle prestazioni di alcune query.

Il movimento di riga è disabilitato per impostazione predefinita perché implica che lo rowid di una riga può cambiare, il che non è il solito comportamento in Oracle.

+2

Abilitare il movimento di riga facilita anche lo spazio di restringimento di tabelle alterate, che in alcuni casi può consentire di ridurre le dimensioni di una tabella senza una ricostruzione. –

+0

Grazie mille !! Quindi, anche se lo abilitiamo, le query continueranno a richiedere lo stesso tempo. Mi aspettavo alcuni miglioramenti delle prestazioni. –

+0

Il movimento della riga può influire sulle prestazioni. Le query sull'indice potrebbero richiedere molte operazioni di I/O aggiuntive. Puoi anche leggerlo qui: http://www.dba-oracle.com/t_enable_row_movement.htm –

1

vedere anche http://www.dba-oracle.com/t_callan_oracle_row_movement.htm

ROW movimento è necessario per seguenti operazioni:

  • Righe spostarsi tra partizioni (Tabelle partizionati)
  • flashback di tabelle
  • ridurre le tabelle (Compact, in cascata, normali)

Risposta alla tua domanda: no pe aumento delle prestazioni se si abilita lo spostamento delle righe, ma è possibile ridurre le tabelle che aumenterebbero le prestazioni per le query di tabella complete.

ASKTOM dà anche una buona risposta alla vostra domanda:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:35203106066718

Per quanto riguarda Shrink (che richiede ROW MOVIMENTO):

vorrei suggerire di benchmarking - raccogliere metriche di performance per il tabella prima e dopo l'esecuzione dell'operazione.Ci si aspetterebbe che le scansioni complete funzionassero in modo più efficiente dopo l'intervallo di indice o invariate o "migliori" in quanto si hanno più righe per blocco raggruppate (meno diffusione dei dati). Si potrebbe essere alla ricerca di che accada - statspack o gli strumenti disponibili in dbconsole sarebbero essere utili per la misurazione che (la quantità di lavoro svolto dai vostri domande nel corso del tempo)

1

aspetto negativo di movimento riga è che ROWID s può essere cambiato. Quindi, se hai domande basate su ROWID, potrebbero restituire risultati errati

+0

Grazie per aver aggiunto un altro buon punto alla base di conoscenza. –

Problemi correlati