sql >> Databasteknik >  >> RDS >> Oracle

Finns det något sätt att tvinga Oracle att ändra en frågas plan utan att använda tips?

Det finns minst 11 sätt att styra en plan utan att ändra frågan. De listas nedan ungefär i användbarhetsordning:

  1. SQL Plan Baseline - Ersätt en plan med en annan plan.
  2. SQL-profiler - Lägg till "korrigerande" tips till planerna. En profil kan till exempel säga "denna anslutning returnerar 100 gånger fler rader än förväntat", vilket indirekt ändrar planen.
  3. Lagrad kontur - Liknar idén till SQL Plan Baseline, men med färre funktioner. Det här alternativet är enklare att använda men mindre kraftfullt och stöds inte längre.
  4. DBMS_STATS.SET_X_STATS - Manuell modifiering av tabell-, kolumn- och indexstatistik kan avsevärt ändra planer genom att få objekt att på konstgjord väg se mer eller mindre dyra ut.
  5. Sessionskontroll - Till exempel alter session set optimizer_features_enable='11.2.0.3'; . Det finns inte alltid användbara parametrar. Men en av parametrarna OPTIMIZER_* kan hjälpa, eller så kanske du kan ändra planen med en odokumenterad ledtråd eller inaktivera en funktion som denna:alter session set "_fix_control"='XYZ:OFF';
  6. Systemkontroll - Liknar ovan men gäller för hela systemet.
  7. DBMS_SPD - Ett SQL-plandirektiv liknar en profil genom att det ger viss korrigerande information till optimeraren. Men det här fungerar på en lägre nivå, över alla planer, och är nytt för 12c.
  8. DBMS_ADVANCED_REWRITE - Ändra en fråga till en annan fråga.
  9. Virtuell privat databas - Ändra en fråga till en annan fråga genom att lägga till predikat. Den är inte avsedd för prestanda, men du kan förmodligen missbruka den för att ändra indexåtkomstvägar.
  10. SQL Translation Framework - Ändra en fråga till en annan fråga innan den ens har analyserats. Detta kan göra att helt "fel" SQL körs.
  11. SQL-patch (dbms_sqldiag internal.i_create_patch) - Ändra en fråga till en annan fråga. Liknar DBMS_ADVANCED_REWRITE men det är odokumenterat och kanske lite kraftfullare.



  1. PHP mysql_connect set wait_timeout

  2. Planering av diskutrymme för databaser

  3. Yii CDbConnection kunde inte öppna DB-anslutningen:kunde inte hitta drivrutinen med google cloud sql

  4. MySQL och lås en tabell, läs och trunkera sedan