sql >> Database >  >> RDS >> Oracle

Oracle 11g - Hoe kan ik langzame parallelle invoegselectie optimaliseren?

Statistieken verbeteren. Het geschatte aantal rijen is 1, maar het werkelijke aantal rijen is meer dan 7 miljoen. Dit zorgt ervoor dat het uitvoeringsplan een geneste lus gebruikt in plaats van een hash-join. Een geneste lus werkt beter voor kleine hoeveelheden gegevens en een hash-join werkt beter voor grote hoeveelheden gegevens. Dit oplossen kan net zo eenvoudig zijn als ervoor zorgen dat de relevante tabellen nauwkeurige, actuele statistieken hebben. Dit kan meestal worden gedaan door statistieken te verzamelen met de standaardinstellingen, bijvoorbeeld:exec dbms_stats.gather_table_stats('SIRS_UATC1', 'TBL_RECON_PM'); .

Als dat de kardinaliteitsschatting niet verbetert, probeer dan een dynamische steekproefhint, zoals /*+ dynamic_sampling(5) */ . Voor zo'n langlopende zoekopdracht is het de moeite waard wat extra tijd te besteden aan het vooraf nemen van gegevens als dit tot een beter plan leidt.

Gebruik parallellisme op instructieniveau in plaats van parallellisme op objectniveau. Dit is waarschijnlijk de meest voorkomende fout bij parallelle SQL. Als u parallellisme op objectniveau gebruikt, moet de hint verwijzen naar de alias van het voorwerp. Sinds 11gR2 hoeft u zich geen zorgen te maken over het specificeren van objecten. Deze instructie heeft slechts een enkele hint nodig:INSERT /*+ PARALLEL(16) APPEND */ ... . Merk op dat NOLOGGING is geen echte hint.



  1. Genereer een set of sequentie zonder lussen – deel 2

  2. Automatisering gebruiken om releasetests op PostgreSQL te versnellen

  3. Wat zijn Oracle-joins (Sql-joins)?

  4. MySQL - Hoe zoek ik naar exacte woordovereenkomst met LIKE?