1

在此处输入图像描述

我想在 LET_TESTATE_LETTURE 上使用并行执行而不强制进行全表扫描,我想在索引上使用强制并行性。

我该如何解决?

alter session enable parallel dml;  

CREATE TABLE netatemp.let_testate_letture1
AS
   SELECT /* parallel(tele 32) full(tele) */
         tele.TELE_DATA_LETTURA,
         tele.tele_storico_id
     FROM let_testate_letture tele
    WHERE     tele.prov_provenienza_lettura_id = '*1ENI01BCAMBIO'
          AND tele.spwkf_stato_pubblico_id != '*1UNICOANN';


Size    56,1 GB
Number Extents  1.081

OWNER   SIUMETERING
TABLE_NAME  LET_TESTATE_LETTURE
TABLESPACE_NAME SIUMETERING_DATITD
CLUSTER_NAME    
IOT_NAME    
STATUS  VALID
PCT_FREE    10
PCT_USED    
INI_TRANS   30
MAX_TRANS   255
INITIAL_EXTENT  80 KB
NEXT_EXTENT 1 MB
MIN_EXTENTS 1
MAX_EXTENTS 2.147.483.645
PCT_INCREASE    
FREELISTS   
FREELIST_GROUPS 
LOGGING YES
BACKED_UP   N
NUM_ROWS    456.635.338
BLOCKS  3.340.120
EMPTY_BLOCKS    0
AVG_SPACE   0
CHAIN_CNT   0
AVG_ROW_LEN 385
AVG_SPACE_FREELIST_BLOCKS   0
NUM_FREELIST_BLOCKS 0
DEGREE  1
INSTANCES   1
CACHE   N
TABLE_LOCK  ENABLED
SAMPLE_SIZE 456.635.338
LAST_ANALYZED   29/12/2012 13:03:15
PARTITIONED NO
IOT_TYPE    
TEMPORARY   N
SECONDARY   N
NESTED  NO
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE    DEFAULT
ROW_MOVEMENT    DISABLED
GLOBAL_STATS    YES
USER_STATS  NO
DURATION    
SKIP_CORRUPT    DISABLED
MONITORING  YES
CLUSTER_OWNER   
DEPENDENCIES    DISABLED
COMPRESSION ENABLED
COMPRESS_FOR    OLTP
DROPPED NO
READ_ONLY   NO
SEGMENT_CREATED YES
RESULT_CACHE    DEFAULT
4

3 回答 3

2

尝试

/*+ parallel_index(tele, let_tele_letb_prov_fk_idx, 32) */

注意星号后面的“+”。没有它,Oracle 将忽略该提示。

此外,您可能还希望根据返回的行数并行创建表,例如:

CREATE TABLE netatemp.let_testate_letture1 parallel 32 as
select /*+ ...
于 2013-03-22T21:49:32.990 回答
2

您必须将索引更改为并行。IE

alter index xxx parallel;

或者

alter index xxx parallel <n>;

因为并行提示仅适用于表。

于 2013-03-22T14:26:03.900 回答
1

您发布了很多有用的信息,令人耳目一新。因此,除了回答您的问题之外,我还可以提供其他提高性能的建议:

  1. 语句级提示。
    由于您在 11gR2 上(基于 column 的存在SEGMENT_CREATED),您应该使用 语句级并行提示,而不是对象级。使用/*+ parallel(32) */, 然后 Oracle 将并行化查询中的所有内容,无论访问方法或别名如何。
  2. 旧数据还是旧数据?
    最后分析于 2012 年 12 月 29 日似乎有点旧。如果您的表非常活跃,那么您应该重新收集统计信息。如果它真的不经常更改,您可能需要考虑重新创建它,按prov_provenienza_lettura_id. 这可能会显着提高索引的性能。尽管它可能会降低其他索引的性能。
  3. 压缩。
    您的表使用压缩,但您的索引是否也被压缩?如果你真的有 900 万个相同值的条目,索引压缩可以节省大量空间,并使索引读取速度更快。此外,位图索引可能很适合这里。
  4. 全表扫描。
    优化器认为您将读取大约 2% 的行。甚至 2% 也可能足以保证进行全表扫描,具体取决于诸如集群因素之类的因素。您可能不想尝试强制使用特定的访问方法——首先让 Oracle 尝试选择。如果 Oracle 弄错了,那么您应该尝试通过提供更多有用的信息来帮助它,例如更好的统计数据和可能的直方图。

DazzaL 和 Ronnis 的建议也应该会有所帮助。

于 2013-03-23T04:35:50.457 回答