Klient mě hlásil výrazné zpomalení databáze každých 30 min. Vysokou míru čtení z disku a přitom neběželi žádné naplánované úlohy. Dohledal jsem, že to zapřičinil dotaz

Problém

USERNAME DISK_READS EXECUTIONS EXEC_RATIO COMMAND_TYPE
 ------------------------------ ---------- ---------- ---------- ------------
 SQL_TEXT
 --------------------------------------------------------------------------------
 DBSNMP 3067479978 1136 2700246,46 3
 SELECT TO_CHAR(current_timestamp AT TIME ZONE 'GMT', 'YYYY-MM-DD HH24:MI:SS TZD'
 ) AS curr_timestamp, COUNT(username) AS failed_count FROM sys.dba_audit_session
 WHERE returncode != 0 AND TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') >= TO_CHA
 R(current_timestamp - TO_DSINTERVAL('0 0:30:00'), 'YYYY-MM-DD HH24:MI:SS')

Trochu jsem tedy hledal a našel příčinu.
Bug je popsaný i na MOS pod dokumenty

Slow Performance Of DBA_AUDIT_SESSION Query From „Failed logins“ Metric (Doc ID 1178736.1)
Sys.aud$ Issue In OUA DB (Doc ID 2234067.1)

Celý problém byl ve velkém množství auditních záznamů a zároveň bugem, kdy se používá při dotazu funkce TO_CHAR.

SQL> select count(*) from sys.aud$;
COUNT(*)
----------
 101660732
Tablespace Name FREE_SPACE_MB USED_SPACE_MB TOTAL_SPACE MAX_MBYTES ROZDIL PCT_FREE
------------------------------ ------------- ------------- ----------- ---------- ---------- ----------
..
SYSTEM 17 22793 22810 32768 9958 30
..

Řešení

Smazat auditní záznamy a upravit auditování.

SQL> truncate table aud$;
Tabulka zkracena.
SQL> select count(*) from sys.aud$;
COUNT(*)
----------
 16


Komentáře