it-swarm-eu.dev

Jak často by měly být spuštěny statistiky databáze Oracle?

Jak často by měly být databázové statistiky Oracle spuštěny? Náš tým vývojářů nedávno zjistil, že statistika nebyla spuštěna naším výrobním boxem za více než 2 1/2 měsíce. To mi připadá jako dlouhá doba, ale nejsem DBA.

21
user290

Při mé poslední práci jsme jednou týdně vedli statistiky. Pokud si vzpomínám správně, naplánovali jsme je ve čtvrtek večer a v pátek DBA velmi pečlivě sledovali nejdelší dotazy na cokoliv neočekávaného. (Pátek byl vybrán, protože to bylo často jen po vydání kódu, a inklinoval být docela nízký dopravní den.) Když oni viděli špatný dotaz oni by našli lepší plán dotazu a uložit ten jeden tak to by nemělo měnit se neočekávaně\t . (Oracle má nástroje, jak to udělat pro vás automaticky, řeknete, že dotaz optimalizovat a dělá.)

Mnoho organizací se vyhýbá běžícím statistikám ze strachu, že se neočekávaně objevují špatné plány dotazů. To však obvykle znamená, že jejich plány dotazů se časem zhoršují a zhoršují. A když provádějí statistiky, setkávají se s řadou problémů. Výsledný tah, který tyto problémy vyřeší, potvrzuje jejich obavy z nebezpečí plynoucích ze statistik. Pokud by však pravidelně prováděli statistiky, používali nástroje pro monitorování, jak by měly, a opravené problémy, jakmile přišli, měli by méně bolestí hlavy a oni by se s nimi nesetkali najednou.

13
user11318

Kdykoliv se data "významně" změní.

Pokud se tabulka pohybuje od 1 řady do 200 řádků, je to významná změna. Když stůl přejde ze 100 000 řádků na 150 000 řádků, není to strašně významná změna. Když tabulka přejde z 1000 řádků se všemi identickými hodnotami v běžně dotazovaných sloupcích X až 1000 řádků s téměř jedinečnými hodnotami ve sloupci X, je to významná změna.

Statistiky ukládají informace o počtu položek a relativních frekvencích - věci, které mu umožní "odhadnout", kolik řádků bude odpovídat daným kritériím. Když se hádá špatně, optimalizátor může vybrat velmi suboptimální plán dotazů.

13
Jonathan Rupp

Statistiky Oracle 11g jsou standardně shromažďovány automaticky.

Při instalaci Oracle Database jsou předdefinována dvě okna Plánovače:

  • WEEKNIGHT_WINDOW začíná v 22:00. a končí v 6:00 každou pondělí […] až pátek. 
  • WEEKEND_WINDOW pokrývá celé dny sobotu a neděli.

Když byly naposledy shromážděny statistiky?

SELECT owner, table_name, last_analyzed FROM all_tables ORDER BY last_analyzed DESC NULLS LAST; --Tables.
SELECT owner, index_name, last_analyzed FROM all_indexes ORDER BY last_analyzed DESC NULLS LAST; -- Indexes.

Stav automatizovaného shromažďování statistik?

SELECT * FROM dba_autotask_client WHERE client_name = 'auto optimizer stats collection';

Skupiny Windows?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

Plánování oken?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

V tomto schématu ručně shromažďujte statistiky databáze: 

EXEC dbms_stats.gather_schema_stats(ownname=>NULL, cascade=>TRUE); -- cascade=>TRUE means include Table Indexes too.

Ručně shromažďovat statistiky databáze ve všech schématech!

-- Probably need to CONNECT / AS SYSDBA
EXEC dbms_stats.gather_database_stats;
13
grokster

Jakou verzi Oracle používáte? Zkontrolujte tuto stránku, která odkazuje na produkt Oracle 10:

http://www.acs.ilstu.edu/docs/Oracle/server.101/b10752/stats.htm

Říká:

Doporučený přístup ke shromažďování statistik je umožnit společnosti Oracle automaticky shromažďovat statistiky. Oracle shromažďuje statistiky o všech databázových objektech automaticky a udržuje tyto statistiky v pravidelně naplánované údržbě.

5
David Medinets

S 10g a vyšší verzí Oracle optimalizátor potřebuje aktuální statistiky o tabulkách a indexech, aby mohl učinit rozhodnutí o „dobrém“ prováděcím plánu. Jak často shromažďujete statistiky, je to složité volání. Záleží na vaší aplikaci, schématu, datové rychlosti a obchodní praxi. Některé aplikace třetích stran, které jsou napsány tak, aby byly zpětně kompatibilní se starší verzí Oracle, s novým optimalizátorem nevedou dobře. Tyto aplikace vyžadují, aby tabulky neměly žádné statistiky, takže db se uchýlí k plánu provádění pravidel. V průměru však Oracle doporučuje, aby byly statistiky shromažďovány na tabulkách se zastaralými statistikami. Můžete nastavit tabulky, které mají být monitorovány, a kontrolovat jejich stav a nechat je analyzovat, zda/když jsou zastaralé. Často to stačí, někdy to tak není. To opravdu závisí na vaší databázi. Pro moji databázi máme sadu OLTP tabulek, které potřebují noční statistiky pro udržení výkonu. Ostatní tabulky jsou analyzovány jednou týdně. Na naší rozsáhlé databázi dw analyzujeme podle potřeby, protože tabulky jsou příliš velké pro pravidelnou analýzu bez ovlivnění celkového zatížení a výkonu db. Takže správná odpověď je, záleží na aplikaci, změně dat a obchodních potřebách.

2
MichaelN

Když jsem řídil rozsáhlý systém plánování více uživatelů s podporou Oracle, naše DBA měla týdenní práci, která shromažďovala statistiky. Když jsme také spustili významnou změnu, která by mohla ovlivnit statistiky, nebo by mohla být statistikou ovlivněna, donutili bychom práci, aby se nedostala cyklu, aby se věci dostaly do pohybu.

2
Joe Skora

Ujistěte se, že vyvažujete riziko, že nové statistiky způsobí nežádoucí změny v plánech dotazů proti riziku, že statistika zastaralé může způsobit, že se plány dotazů změní. 

Představte si, že máte databázi chyb s tabulkou ISSUE a sloupec CREATE_DATE, kde hodnoty ve sloupci rostou více či méně monotónně. Předpokládejme, že v tomto sloupci je histogram, který říká Oracle, že hodnoty pro tento sloupec jsou rovnoměrně rozděleny mezi 1. lednem 2008 a 17. zářím 2008. To umožňuje optimalizátorovi rozumně odhadnout počet řádků, které by pokud jste hledali všechny otázky vytvořené minulý týden (tj. 7. - 13. září). Pokud bude aplikace nadále používána a statistiky nebudou nikdy aktualizovány, bude tento histogram méně a méně přesný. Optimalizátor tedy bude očekávat, že dotazy na „problémy vytvořené minulý týden“ budou v průběhu času méně přesné a mohou způsobit, že Oracle bude plán dotazů měnit negativně. 

1
Justin Cave

Obecně se nedoporučuje shromažďovat statistiky tak časté v celé databázi, pokud pro to nemáte silné zdůvodnění, například hromadné vkládání dat nebo velká změna dat v databázi často. Shromažďování statistik v databázi v této frekvenci MŮŽE změnit plán provádění dotazů na nové špatné prováděcí plány, může vás to stát hodně času pokusem o vyladění každého dotazu ovlivněného novými špatnými plány, proto byste měli otestovat dopad shromažďování nových statistik na testovací databázi, nebo v případě, že pro to nemáte čas ani moc člověka, měli byste alespoň zachovat havarijní plán zálohováním původní statiky před tím, než shromáždíte nové, takže v případě, že shromáždíte nové statistiky a pak dotazy neučinily t fungovat podle očekávání, můžete snadno obnovit původní statistiky.

Tam je velmi užitečný skript vám pomůže zálohovat původní statistiky a shromáždit nové a poskytnout vám SQL příkaz, který můžete použít k obnovení původní statiky v případě, že věc nešla podle očekávání po shromažďování nových statistik. Skript naleznete v tomto odkazu: http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

V případě systému typu datového skladu můžete uvažovat o tom, že nesbíráte vůbec žádné statistiky a spoléháte na dynamické vzorkování (nastavení optimizer_dynamic_sampling na úroveň 2 nebo vyšší).

0
David Aldridge