7

私は非常に巨大なテーブルを持っており、2億行まであります。インデックス/pkはまったくありませんでした。この表の選択は(明らかに)遅くなっています。3列でPKを作成することにしました。私はこのテーブルの小さいバージョンを持っているテスト環境でそれをしました、そしてそれは魅力のように働きました。

したがって、家に帰る前に、ALTER TABLE HUGETABLE ADD CONSTRAINT PK_HUGETABLE PRIMARY KEY(ID1、ID2、ID3)を実行しました。

一晩中走ると思っていたのですが、もう24時間以上経っていて、まだ走っています。

クエリを開始する前にセッションIDを保持していた場合は、V$SESSION_LONGOPSで追跡できます。しかし、私はしませんでした。

クエリがどのように進行しているか、またはそれでもどのくらいの時間がかかるかを確認する方法はありますか?

4

2 に答える 2

7

それでもV$SESSION_LONGOPSを照会できるはずです。あなたが次のようなものを実行する場合

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

おそらく昨日開始されたセッションは1つだけで、他の列はそのセッションが多くの作業を行ったことを示すものでそれを裏付けているはずです。MESSAGEは、HUGETABLEでのフルスキャンのようなものも示す必要があります。

于 2010-10-07T14:28:20.870 に答える
0

ステートメントのステータスを監視するためにセッションIDを覚えておく必要はありません。Justinが提案したように、前日以降、長時間実行されるクエリが多すぎないようにする必要があります。開始時刻を指定して、結果を絞り込むこともできます。

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

'PARALLEL n'オプションに加えて、HUGE TABLEで同時読み取り/書き込みが行われているときにインデックスを作成(または再構築)する場合は、'ONLINE'オプションの使用も検討する必要があります。

于 2016-08-04T17:02:41.183 に答える