Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle 11g - Come ottimizzare la selezione di inserti paralleli lenti?

Migliora le statistiche. Il numero stimato di righe è 1, ma il numero effettivo di righe è superiore a 7 milioni e in aumento. Ciò fa sì che il piano di esecuzione utilizzi un ciclo nidificato anziché un hash join. Un ciclo annidato funziona meglio per piccole quantità di dati e un hash join funziona meglio per grandi quantità di dati. Risolvere ciò può essere facile come garantire che le tabelle pertinenti abbiano statistiche aggiornate e accurate. Questo di solito può essere fatto raccogliendo statistiche con le impostazioni predefinite, ad esempio:exec dbms_stats.gather_table_stats('SIRS_UATC1', 'TBL_RECON_PM'); .

Se ciò non migliora la stima della cardinalità, prova a utilizzare un suggerimento di campionamento dinamico, come /*+ dynamic_sampling(5) */ . Per una query così lunga vale la pena spendere un po' di tempo in più per campionare i dati in anticipo se porta a un piano migliore.

Utilizza il parallelismo a livello di istruzione invece del parallelismo a livello di oggetto. Questo è probabilmente l'errore più comune con SQL parallelo. Se utilizzi il parallelismo a livello di oggetto, il suggerimento deve fare riferimento all'alias dell'oggetto. Dal momento che 11gR2 non c'è bisogno di preoccuparsi di specificare gli oggetti. Questa affermazione necessita solo di un singolo suggerimento:INSERT /*+ PARALLEL(16) APPEND */ ... . Nota che NOLOGGING non è un vero indizio.