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

您可能只会看到昨天开始的一个会话,而其他列应该证实了这一点,表明该会话已经完成了很多工作。MESSAGE 还应该表明类似对 HUGETABLE 的全面扫描。

于 2010-10-07T14:28:20.870 回答
0

您无需记住会话 ID 即可监控语句的状态。正如贾斯汀建议的那样,从前一天开始,您不应该有太多长时间运行的查询。您也可以指定开始时间以缩小结果范围。

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 回答