2010-10-07 6 views
7

Ich habe einen sehr großen Tisch mit ~ 200 Millionen Zeilen. Es hatte überhaupt keinen Index/PK. Die Selektionen in dieser Tabelle verliefen (offensichtlich) langsam. Ich entschied mich, eine PK mit 3 Spalten zu erstellen. Ich habe es in einer Testumgebung gemacht, die eine kleinere Version dieses Tisches hat und es funktionierte wie ein Zauber.Erstellen Index/PK in einer riesigen Tabelle dauert zu lange. Ich benutze Oracle. Woher weiß ich, ob es gut läuft?

Also, bevor sie nach Hause gehen ich habe eine ALTER TABLE HUGETABLE ADD CONSTRAINT PK_HUGETABLE PRIMARY KEY (ID1, ID2, ID3);

Ich erwartete, dass es über Nacht läuft, aber es war schon über 24 Stunden und es läuft noch.

Ich weiß, wenn ich die Session Id behalten würde, bevor ich meine Abfrage starte, könnte ich es bei V $ SESSION_LONGOPS verfolgen. Aber ich habe es nicht getan.

Gibt es eine Möglichkeit zu überprüfen, wie meine Anfrage läuft oder wie lange dauert es noch?

Antwort

7

Sie sollten weiterhin V $ SESSION_LONGOPS abfragen können. Wenn Sie so etwas wie

SELECT sid, serial#, start_time, sofar, totalwork, time_remaining, message 
    FROM v$session_longops 
WHERE time_remaining > 0 

laufen sehen Sie wahrscheinlich nur eine Sitzung, die gestern und die anderen Spalten beginnen sollen, dass erhärten mit Anzeichen dafür, dass die Sitzung eine Menge Arbeit getan hat. Die NACHRICHT sollte auch etwas wie einen vollständigen Scan auf HUGETABLE anzeigen.

+0

Ich konnte es nicht finden. Ich fand eine Menge Prozesse vor, aber konnte meine nicht identifizieren. Also gab ich auf und annullierte es :) Ich werde alles während des Wochenendes stoppen und es erneut versuchen. Diesmal erhalte ich die Session-ID, bevor ich den Job starte. Danke trotzdem. – Michael

+2

Definieren Sie das nächste Mal den Index mit PARALLEL n, wobei n ein akzeptabler Parallelitätsgrad auf Ihrem System ist. Wenn Sie fertig sind, ändern Sie den Index zu NOPARALLEL. Wenn Sie Data Guard nicht verwenden und eine Sicherungskopie der Datenbank erstellen können, verwenden Sie die NOLOGGING-Klausel. –

0

Sie müssen sich Ihre Sitzungs-ID nicht merken, um den Status einer Anweisung zu überwachen. Wie Justin vorgeschlagen hat, sollten Sie seit dem Vortag nicht zu viele Anfragen haben. Sie können auch die Startzeit angeben, um die Ergebnisse einzugrenzen.

select * from V$SESSION_LONGOPS where time_remaining > 0 and start_time > <'your run date/time here'>; 

Neben ‚PARALLEL n‘ Option, sollten Sie auch ‚online‘ Option verwenden, wenn Sie (oder Umbau) erstellen einen Index, während gleichzeitig Lese-/Schreib wird am riesigen Tisch nehmen.