sql >> Databáze >  >> RDS >> Oracle

Jak provést ladění sql v Oracle

Úvod do ladění SQL

  • Příkazy SQL se zapisují za účelem načtení dat /fetch z databáze. Chceme, aby naše příkazy sql běžely rychle (ladění sql) a poskytovaly výsledky během několika sekund.
  • Špatně navržený sql by mohl zpomalit celou operaci databáze a celou operaci zastavit. Je mnohem těžší napsat efektivní SQL než napsat funkčně správný SQL. Ladění výkonu sql může výrazně zlepšit stav a výkon systému.
  • Klíčem k vyladění SQL je minimalizace dat, ke kterým přistupuje, aby poskytl výsledek. Můžeme minimalizovat data, ke kterým přistupuje, a poskytnout výsledek prostřednictvím optimální vyhledávací cesty.

Jednoduchý příklad by byl

select * from dept where emp=10
  • Nyní bude tento dotaz muset prohledat celé oddělení tabulky, aby zjistil data, kde emp=10. Musí tedy mít přístup k celé tabulce
  • Nyní, když vytvoříme sloupec index to emp, bude mít přístup k indexu a získat výsledek. Zde má přístup k méně datům

12 kroků k provedení ladění SQL v Oracle

Zde jsou obecné tipy pro ladění výkonu SQL

(1) Nejprve musíte mít všechny požadované nástroje pro ladění sql. Musíte mít dobré informace o trasování, formátování trasování, plán vysvětlení, čtení plánu vysvětlení v oracle.
Dobré znalosti o různých metodách spojení dostupných v Oracle a jak je efektivně používat

(2) Čtěte méně dat a buďte I/O efektivní.
Čím více dat pro příkaz sql načtete, tím více zámků potřebuje získat a zpomaluje to výkon. takže to musí vždy dělat méně logických čtení
Zapište rozumný příkaz SQL, kde jsou vhodné filtry. Zkontrolujte počet řádků v různých zahrnutých tabulkách a zjistěte nejlepší metodu k vytvoření příkazu sql

(2) Používejte dobré indexy Oracle
Indexy B-Tree a bitmapové indexy lze použít ke zvýšení výkonu dotazů, pokud jsou vrácená data nižší než 10 %. Při vytváření indexu však musíme být opatrní, protože je třeba jej udržovat pro operace vkládání, aktualizace a odstraňování. Takže vytváření indexu vytváří režii nad mnoha věcmi. Musíme tedy pečlivě prozkoumat účinek vytvoření indexu.

(3) Vyhněte se SQL, které znemožňuje použití index

SQL, který deaktivuje indexy
(a)Funkce ( to_char(), to_date() atd. )
Oprava :přesunutí funkce na stranu „konstantní/vazebná proměnná“
(b) Typ Casting
V SQL
kde emp_no =10 (emp_no je varchar2)
V PL/SQL
kde emp_no =v_emp_num (v_emp_num je číslo)
Modifikátory
a id + 0 =111
a datum + 1 =sysdate (zkuste datum =sysdate – 1)
Oprava:Změňte to, abyste se tomu vyhnuli


(4) V aplikaci vždy používejte proměnnou vazby. Pokud nepoužíváte proměnnou bind v oracle, bude sql analyzován pokaždé a bude mít dopad na výkon databáze. Pokud bude obsahovat proměnnou bind, bude sql uložen do mezipaměti a další spuštění nebude vyžadovat analýzu, a tím se zlepší celkový výkon systému.

(5) UNION vs. OR. Použijte UNION pro dotazy se dvěma jasnými cestami provádění; každý vrací poměrně malý počet řádků. Sjednocení nepoužívejte pro dotazy, které pravděpodobně vrátí velký počet řádků, protože všechny řádky je třeba seřadit a většina z nich bude zahozena. NEBO má tendenci zakázat index

(6) K získání optimálního plánu použijte přesné statistiky optimalizátoru v tabulce.

(7) Pokud v podmínce používáte funkci na výrazu, zkontrolujte, zda je v tomto sloupci index založený na funkcích. Pokud není přítomen, index se nepoužije

(8) Použití existuje vs v a neexistuje vs vs není v pro korelované poddotazy

(9) Vyhněte se špatným praktikám kódování
Některé tipy
(a) Vyhněte se karteziánskému spojení. Ujistěte se, že všechny tabulky požadované v dotazech jsou potřebné a jsou vzájemně propojené
(b) Použijte Decode, abyste se vyhnuli vícenásobným výletům do databáze
(c) Pokuste se vyhnout vnějšímu spojení
(d ) Někdy rozkládání logiky na malé části urychlí práci

(10) Pokud se pokoušíte použít komplexní zobrazení, zkontrolujte, zda lze místo toho použít základní tabulky, protože zobrazení má tendenci zhoršovat výkon

(11) Použijte UNION ALL vs UNION, pokud víte, že načtená data nebudou mít duplicitní řádky

( 12) Použijte rady k optimalizaci plánu realizace. Někdy lze nápovědu použít ke změně plánu provádění dotazu tak, aby se zvolila nejoptimálnější cesta.
Někdy se stane, že nahlédnutí do vazby vytvoří špatný plán, takže v takovém případě zadání potřebné nápovědy k opravě plánu pomůže získat dobrý výkon pokaždé
Nejběžnější rady jsou
/*+ LEADING (alias tabulky) */ určuje tabulku, podle které se má začít spojení
/*+ FIRST_ROWS */ velmi dobré pro online screens – upřednostňuje NESTED LOOPS
/*+ INDEX ( název tabulky alias.index) */ určuje index, který chcete použít. Poznámka:Pokud se index zruší a znovu vytvoří a změní se název, nápověda již není platná.
/*+ USE_NL (alias tabulky alias1 tabulky alias 2)*/ požádá optimalizátor, aby pro dvě zadané tabulky použil spojení Nested Loop Join

Vyhněte se zbytečným optimalizačním radám a používejte je opatrně

Toto jsou některé z tipů, jak se vyhnout problémům a provést ladění sql. Sql tuning je velký oceán a věci se můžete naučit pouze cvičením. Hodně štěstí!!

Také čte
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm


  1. Převést SQLite na JSON

  2. MariaDB VERSION() Vysvětleno

  3. Co si naši zákazníci zaslouží:Představujeme podnikovou dokumentaci MariaDB

  4. Jak nainstalovat sqlcmd &bcp na SUSE