2013-10-17 4 views
7

Wir verwenden Oracle 10G und einer der Tabelle dauert viel Zeit, wenn wir Daten abfragen/löschen. Diese Tabelle enthält ungefähr 10 Millionen Datensätze.Welche Auswirkungen hat das Aktivieren/Deaktivieren von ROW_MOVEMENT in Oracle 10g?

Kürzlich entdeckten wir, dass ROW_MOVEMENT auf dieser Tabelle deaktiviert ist, wollen wir folgendes verstehen: ROW_MOVEMENT

  1. Welche Leistungssteigerung können wir, wenn aktivieren?
  2. Gibt es irgendwelche Nachteile der Aktivierung von ROW_MOVEMENT?
  3. Welche Triggerzeilenbewegung? Wie entscheidet Orakel, dass es ROWs verschieben muss?

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank im Voraus!

Antwort

8

Zeilenbewegung ist hauptsächlich applied to partition tables. Dadurch können Zeilen über Partitionen verschoben werden. Mit Reihen Bewegung deaktiviert, was der Standard ist, können Sie keine Zeile mit einem Update verschieben:

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 

Wenn Sie Reihe Bewegung zulassen, können Sie Reihen mit einem Update verschieben:

SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT; 

Table altered 

SQL> UPDATE part_table SET ID = 2; 

1 row updated 

Diese Feature wirkt sich in den meisten Fällen nicht auf die Leistung aus: Die Zeilen werden genau auf die gleiche Weise gespeichert und abgefragt, ob das Feature aktiviert ist oder nicht. Wenn die Zeilenbewegung jedoch aktiviert ist, können die Zeilen physisch verschoben werden (ähnlich wie Löschen + Einfügen), z. B. mit ALTER TABLE SHRINK SPACE. Diese kann sich wiederum auf den Indexclusterfaktor auswirken, der sich auf die Leistung einiger Abfragen auswirken kann.

Die Zeilenbewegung ist standardmäßig deaktiviert, da dies bedeutet, dass sich die rowid einer Zeile ändern kann, was nicht das übliche Verhalten in Oracle ist.

+2

Die Aktivierung der Zeilenbewegung erleichtert auch das Ausführen alter alter shrink space, wodurch in einigen Fällen die Größe einer Tabelle ohne Neuaufbau reduziert werden kann. –

+0

Vielen Dank !! Selbst wenn wir es aktivieren, werden Abfragen immer noch die gleiche Zeit dauern. Ich habe einige Leistungsverbesserungen erwartet. –

+0

Zeilenbewegung kann sich auf die Leistung auswirken. Indexabfragen benötigen möglicherweise viele zusätzliche E/A-Vorgänge. Sie können das hier auch lesen: http://www.dba-oracle.com/t_enable_row_movement.htm –

1

Siehe auch http://www.dba-oracle.com/t_callan_oracle_row_movement.htm

ROW MOVEMENT für folgende Operationen notwendig ist:

  • Verschieben von Zeilen zwischen Partitionen (partitionierten Tabellen)
  • Rückblick von Tabellen
  • verkleinern Tabellen (Compact, Kaskade, normal)

Antwort auf Ihre Frage: keine pe Wenn Sie die Zeilenverschiebung aktivieren, können Sie die Anzahl der Tabellen erhöhen. Sie können jedoch Tabellen verkleinern, wodurch die Leistung für vollständige Tabellenabfragen erhöht wird.

AskTom gibt auch eine sehr gute Antwort auf Ihre Frage:

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

In Bezug auf Shrink (die ROW Bewegung erfordert):

Ich würde vorschlagen Benchmarking - Performance-Metriken über die sammeln Tabelle vor und nach der Durchführung der Operation.Sie würden erwarten, dass volle Scans effizienter arbeiten, Sie würden erwarten, dass der Indexbereich entweder unverändert oder "besser" ist, da Sie mehr Zeilen pro Block zusammenpacken (weniger Daten verteilt). Sie würden die Suche nach , die geschehen - statspack oder die Werkzeuge zur Verfügung, in dbconsole zur Messung, dass (die Menge der Arbeit, indem Sie Ihre Abfragen im Laufe der Zeit durchgeführt) nützlich wäre

1

Kehrseite der Reihe Bewegung ist, dass ROWID s kann geändert werden. Wenn Sie also Abfragen basierend auf ROWID haben, können sie falsche Ergebnisse zurückgeben.

+0

Vielen Dank, dass Sie der Knowledge Base einen weiteren guten Punkt hinzugefügt haben. –

Verwandte Themen