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