在一个大表中创建索引/主键花费的时间太长。我正在使用Oracle。我怎么知道进展是否顺利?
我有一张非常大的桌子,大约有2亿行。它根本没有索引/pk。此表中的选择(显然)运行缓慢。我决定用3列创建一个PK。我是在一个测试环境中做的,这个表有一个更小的版本,工作起来很有魅力 所以,在回家之前我做了一个 大桌子 添加约束PK_HUGETABLE主键(ID1、ID2、ID3) 我希望它能运行一整晚,但已经超过24小时了,它还在运行 我知道,如果在开始查询之前保留会话Id,我将能够在V$Session_LONGOPS处跟踪它。但我没有在一个大表中创建索引/主键花费的时间太长。我正在使用Oracle。我怎么知道进展是否顺利?,oracle,indexing,primary-key,composite-primary-key,Oracle,Indexing,Primary Key,Composite Primary Key,我有一张非常大的桌子,大约有2亿行。它根本没有索引/pk。此表中的选择(显然)运行缓慢。我决定用3列创建一个PK。我是在一个测试环境中做的,这个表有一个更小的版本,工作起来很有魅力 所以,在回家之前我做了一个 大桌子 添加约束PK_HUGETABLE主键(ID1、ID2、ID3) 我希望它能运行一整晚,但已经超过24小时了,它还在运行 我知道,如果在开始查询之前保留会话Id,我将能够在V$Session_LONGOPS处跟踪它。但我没有 是否有任何方法可以检查我的查询进行得如何,或者还需要多长时
是否有任何方法可以检查我的查询进行得如何,或者还需要多长时间?您应该仍然能够查询V$SESSION\u LONGOPS。如果你像这样跑
SELECT sid, serial#, start_time, sofar, totalwork, time_remaining, message
FROM v$session_longops
WHERE time_remaining > 0
您可能只会看到昨天开始的一个会话,其他专栏应该会证实这一点,并指出会话已经完成了大量工作。该消息还应指示HUGETABLE上的完整扫描。您不需要记住会话id来监视语句的状态。正如Justin所建议的,从前一天开始,您不应该有太多长时间运行的查询。还可以指定开始时间以缩小结果范围
select * from V$SESSION_LONGOPS where time_remaining > 0 and start_time > <'your run date/time here'>;
从剩余时间>0的V$SESSION\u LONGOPS中选择*并开始时间>;
除了“并行n”选项之外,如果您正在创建(或重建)索引,同时在大表上进行并发读/写,那么您也应该考虑使用“联机”选项。我发现有很多过程在进行,但无法识别我的过程。所以我放弃了,取消了:)我会在周末停止一切,再试一次。这次我将在开始作业之前获取会话id。无论如何,谢谢。下次,用PARALLEL n定义索引,其中n是系统上可接受的并行度。完成后,将索引更改为NOPARALLEL。另外,如果您没有使用Data Guard,并且在备份完成后可以对数据库进行备份,请使用NOLOGGING子句。