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

Oracle 11g - Hvordan optimerer man langsom parallelindsætningsvalg?

Forbedre statistik. Det estimerede antal rækker er 1, men det faktiske antal rækker er over 7 millioner og tæller. Dette får udførelsesplanen til at bruge en indlejret løkke i stedet for en hash-join. En indlejret loop fungerer bedre for små mængder data, og en hash-join fungerer bedre for store mængder data. Rettelse, der kan være lige så let som at sikre, at de relevante tabeller har nøjagtige, aktuelle statistikker. Dette kan normalt gøres ved at indsamle statistik med standardindstillingerne, for eksempel:exec dbms_stats.gather_table_stats('SIRS_UATC1', 'TBL_RECON_PM'); .

Hvis det ikke forbedrer kardinalitetsestimatet, prøv at bruge et dynamisk prøveudtagningstip, såsom /*+ dynamic_sampling(5) */ . For sådan en langvarig forespørgsel er det værd at bruge lidt ekstra tid på forhåndssampling af data, hvis det fører til en bedre plan.

Brug parallelisme på sætningsniveau i stedet for parallelisme på objektniveau. Dette er nok den mest almindelige fejl med parallel SQL. Hvis du bruger parallelisme på objektniveau, skal hintet referere til aliasset af objektet. Siden 11gR2 er der ingen grund til at bekymre sig om at specificere objekter. Denne sætning behøver kun et enkelt tip:INSERT /*+ PARALLEL(16) APPEND */ ... . Bemærk at NOLOGGING er ikke et rigtigt tip.



  1. Hvorfor returnerer password_verify falsk?

  2. PG::Fejl:SELECT DISTINCT, ORDER BY-udtryk skal vises i udvalgslisten

  3. hvordan man konverterer en strengdato til datoformat i oracle10g

  4. Sådan migreres Standalone Moodle til en skalerbar opsætning i grupperet database