kennissessie instrumentatie-packages dbms_application_info logger rob van wijk•26 mei 2011
TRANSCRIPT
Kennissessie instrumentatie-packages
dbms_application_infologger
Rob van Wijk • 26 mei 2011
Het wat en waarom van instrumentatie
Code larderen met alle informatie die je ooit nodig mocht hebben om problemen op
te kunnen lossen.
Code die je aan en uit kunt zetten. Standaard aan in de ontwikkelomgeving en uit
in alle andere omgevingen.
Bouw het vanaf dag 1 in, zodat je nooit meer hoeft te debuggen en zodat de kleine
overhead ingebakken kosten zijn.
Het heeft een enorm korte terugverdientijd
Het moet gemakkelijk in het gebruik zijn
Package dbms_application_info
PROCEDURE set_module (module_name in VARCHAR2, action_name in VARCHAR2);
PROCEDURE set_action (action_name IN VARCHAR2);
PROCEDURE set_client_info (client_info IN VARCHAR2);
PROCEDURE read_module (module_name OUT VARCHAR2, action_name OUT VARCHAR2);
PROCEDURE read_client_info (client_info OUT VARCHAR2);
PROCEDURE set_session_longops
( rindex IN OUT BINARY_INTEGER
, sno IN OUT BINARY_INTEGER
, op_name IN VARCHAR2
, target IN BINARY_INTEGER
, context IN BINARY_INTEGER
, sofar IN NUMBER
, totalwork IN NUMBER
, target_desc IN VARCHAR2
, units IN VARCHAR2
);
Package dbms_application_info
Stelt DBA’s en anderen in staat om te kunnen zien waar sessies, SQL en gebruik
van systeembronnen vandaan komt.
Module, Action en Client_Info zichtbaar in X$KSUSEX V$SESSION en V$SQLAREA SQL*Trace-bestanden Monitoring-pakketten, bijvoorbeeld i3
Behoeft geen aparte installatie: DBMSAPIN.SQL wordt gedraaid als standaard
onderdeel van een database installatie.
ip1.sql
Package dbms_application_info
Ja, is leuk hoor, maar daar wordt mijn programma onnodig traag van ...
ip2.sql
dbms_application_info.set_session_longops
zet een rij in V$SESSION_LONGOPS Voor database-operaties die langer dan 6 seconden duren Voorbeelden: backup, uitvoeren van zoekvragen, statistieken vergaren Belangrijke kolommen: SOFAR en TOTALWORK Nu dus ook zelf te vullen
ip3.sql
Logger
https://www.samplecode.oracle.com/sf/projects/logger/ Van Tyler Muth en Christopher Beck Ondersteunde database-versies: XE, 10.2, 11.1 en 11.2
“What is Logger?
This is a PL/SQL logging and debugging framework. The goal of logger is to be as simple
as possible to install and use. The primary use cases for this utility include: Debugging: It's often difficult to track down the source of an error without some form
of debugging instrumentation. This is particularly true in multi-tier, stateless
architectures such as Application Express. Error Logging: While most experts agree that it's important not to mask errors, it's also
nice to have a persistent record of them. Timing: Logger has a very simple timing framework built-in that makes it easy to
benchmark sections of code. Instrumentation: Because it's easy to "turn-off" logger globally with virtually no
performance impact, it's easy to get in the habit of leaving debug calls in production
code. Now, when something does go wrong, you simply flip the switch and logger is
enabled making it much quicker to debug errors.”
Logger: de basis
Tabel LOGGER_LOGS Drie views daar bovenop voor extra gebruikersgemak:
• LOGGER_LOGS_5_MIN
• LOGGER_LOGS_60_MIN
• LOGGER_LOGS_TERSE
Package LOGGER met de volgende logprocedures
• LOG_PERMANENT
• LOG_ERROR
• LOG_INFORMATION
• LOG_WARNING
• LOG
ip4.sql
Logger-niveaus
Mogelijke waarden voor LOGGER_LEVEL:
• OFF 0
• PERMANENT 1
• ERROR 2
• WARNING 4
• INFORMATION 8
• DEBUG 16
• TIMING 32
• SYS_CONTEXT 64
• APEX 128
Package logger
Ok, dbms_application_info is snel, maar in productie wil je toch niet al die
aanroepen van logger als ze 99,9% van de tijd toch uit staan ...
ip5.sql
Logger: instellingen
Tabel LOGGER_PREFS 8 rijen die je als systeemparameters kunt zien:
PREF_NAME PREF_VALUE
------------------------------ ------------------------------
LEVEL DEBUG
PURGE_MIN_LEVEL DEBUG
PROTECT_ADMIN_PROCS TRUE
LOGGER_VERSION 1.3.0
INSTALL_SCHEMA LOGGER
INCLUDE_CALL_STACK TRUE
PURGE_AFTER_DAYS 7
GLOBAL_CONTEXT_NAME LOGGER_LOGCTX
Eén tabel voor alle sessies
ip6.sql
Logger: extra’s
flashback APEX CGI environment User environment variabelen purge job overhead: NO_OP optie
13
Bedankt voor jullie aandachtVoor meer informatie: www.ciber.nl