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

Dotazy Oracle prováděné relací

Pravděpodobně nezískáte data, která hledáte, aniž byste provedli další konfiguraci (například povolení auditu) nebo udělali nějaké kompromisy. Jaký je obchodní problém, který se snažíte vyřešit? V závislosti na problému vám můžeme pomoci identifikovat nejjednodušší přístup ke konfiguraci databáze, aby bylo možné zaznamenávat informace, které hledáte.

Oracle se nepokouší nikde ukládat, kolikrát konkrétní uživatel (a zejména ne kolikrát konkrétní uživatel operačního systému) provedl konkrétní dotaz. SQL_ID v V$SESSION označuje pouze SQL_ID že relace právě probíhá. Pokud se, jak hádám, jedná o aplikaci klient-server, je docela pravděpodobné, že v 99% případů je NULL, protože v drtivé většině času relace neprovádí žádné SQL, čeká na uživatele udělat něco. PREV_SQL_ID v V$SESSION je předchozí příkaz SQL, který byl proveden -- který alespoň obecně nebude NULL . Ale bude mít pouze jednu hodnotu, nebude mít historii SQL příkazů provedených touto relací.

V$SQL view je reprezentace toho, co je ve sdíleném fondu SQL. Když příkaz SQL ze sdíleného fondu stárne, již nebude v V$SQL Pohled. Jak rychle se to stane, závisí na mnoha faktorech – jak často někdo provádí příkaz, jak často jsou analyzovány nové příkazy (což obecně silně závisí na tom, zda vaše aplikace používají správně proměnné vazby), jak velký je váš sdílený fond atd. Obecně to bude někde mezi několika minutami a dokud se databáze nevypne.

Pokud máte licenci k používání tabulek AWR a zajímají vás spíše aproximace než dokonale správné odpovědi, můžete být schopni získat informace, po kterých toužíte, pohledem na některé z tabulek AWR. Například V$ACTIVE_SESSION_HISTORY zachytí příkaz SQL, který každá relace aktivně prováděla každou sekundu. Protože se však jedná o aplikaci klient-server, znamená to, že převážnou většinu času bude relace neaktivní, takže nebude nic zachyceno. Příkazy SQL, které se náhodou zachytí pro relaci, vám však poskytnou určitou představu o relativní frekvenci různých příkazů SQL. Samozřejmě je pravděpodobnější, že budou zachyceny i déle běžící příkazy SQL, protože je pravděpodobnější, že budou v daný okamžik aktivní. Pokud se dotaz A i B provádějí za přesně stejnou dobu a byla zachycena relace s provedením A 5krát a B 10krát za poslední hodinu, můžete dojít k závěru, že B se provádí zhruba dvakrát častěji než A. A pokud víte, průměrná doba provádění dotazu, průměrná pravděpodobnost, že byl dotaz zachycen, bude počet sekund, po které se dotaz provede (dotaz, který se provede za 0,5 sekundy, má 50% šanci na zachycení, dotaz, který se provede za 0,25 sekund má 25% šanci na zachycení), takže můžete odhadnout, jak často konkrétní relace provedla konkrétní dotaz. To zdaleka není přesné číslo, zejména v kratších časových rámcích a u dotazů, jejichž skutečné doby provádění jsou variabilnější.

Data v V$ACTIVE_SESSION_HISTORY zobrazení je obvykle dostupné po dobu několika hodin. Poté se navzorkuje do DBA_HIST_ACTIVE_SESS_HISTORY tabulka, která omezuje množství dostupných dat o řád, čímž jsou jakékoli odhady mnohem méně přesné. Tato data jsou však uchovávána bez ohledu na váš interval uchování AWR (ve výchozím nastavení je to jeden týden, ačkoli mnoho webů jej prodlužuje na 30 nebo 60 dní).



  1. Sdílený primární klíč

  2. Typy kurzoru SQL Server - Jaký je rozdíl mezi LOKÁLNÍM A GLOBÁLNÍM kurzorem | Kurz SQL Server / Kurz TSQL

  3. MySQL:Počítejte dvě věci v jednom dotazu?

  4. Rozdíl ve výkonu mezi UUID, CHAR a VARCHAR v tabulce PostgreSql?