Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

Oracle DB — kdyz jeden index zmeni vsechno

15. 03. 2011 1 min čtení CORE SYSTEMSdata

Minuly mesic nas kontaktoval klient s problemem, ktery zna kazdy DBA: aplikace je pomala. Konkretne — vyhledavani objednavek v jejich ERP systemu trvalo 45 sekund. Pred rokem to byly 2 sekundy. Databaze: Oracle 11g R2, tabulka objednavek: 12 milionu radku.

Diagnoza: EXPLAIN PLAN

Prvni reflex: potrebujeme vic RAM nebo rychlejsi disky. Ale nez zacnete hazet hardware na problem, podivejte se na execution plan. V 90 procentech pripadu je problem v SQL nebo chybejicich indexech. Oracle provedl FULL TABLE SCAN na tabulce ORDERS a nasledny NESTED LOOPS join s tabulkou CUSTOMERS. Zadny index na sloupci ORDER_DATE, podle ktereho se vyhledavalo.

Reseni

Composite index na sloupcich z WHERE klauzule. Po vytvoreni indexu a aktualizaci statistik se execution plan dramaticky zmenil. Cost spadl z 47 832 na 234. Dotaz z 45 sekund na 0.3 sekundy.

Histogramy — skryty hrdina

Sloupec STATUS mel nerovnomerne rozlozeni hodnot — 95 procent radku bylo ACTIVE. Bez histogramu Oracle odhadoval 50/50, coz vedlo k chybnym execution planum. Reseni: DBMS_STATS.GATHER_TABLE_STATS s histogramem na sloupci STATUS.

Partitioning

Pro tabulku s 12 miliony radku jsme doporucili range partitioning podle ORDER_DATE. Mesicni partice = partition pruning = dalsi zrychleni. Bonus: archivace starych dat je trivialni.

AWR monitoring

Nastavili jsme tydenni AWR reporty s automatickym alertem, kdyz top SQL zmeni execution plan. Prevence je lepsi nez haseni pozaru.

Pravidla pro SQL optimalizaci

  1. Vzdy EXPLAIN PLAN — nehadejtee, merte. 2. Composite indexy. 3. Aktualizujte statistiky pravidelne. 4. Histogramy pro nerovnomerne sloupce. 5. Partitioning pro velke tabulky.
oraclesqlperformanceindexy