Oct 30, 2006

Database profiling στις συνδέσεις του Application Server

Είναι αναντίρρητο πως τα όποια προβλήματα απόδοσης σε μια εφαρμογή σχετίζονται σχεδόν πάντα με τον χειρισμό των δομών της Βάσης Δεδομένων, της λειτουργίας της, ή με τον τρόπο πρόσβασης σε αυτήν. Στους περισσότερους που ασχολούνται με την μέτρηση των στατιστικών της Oracle, είναι γνωστή η διαδικασία της ενεργοποίησης του "sql trace". Κατά αυτόν τον τρόπο αποτυπώνονται σε dump files στατιστικά σχετικά με το κόστος των SQL εντολών που εκτελούνται. Αργότερα τα αρχεία αναλύονται από το εργαλείο "tkprof" ώστε να εξαχθούν λεπτομερείς πληροφορίες σχετικά με τις πιο απαιτητικές SQL εντολές που εκτελέστηκαν. Έτσι, είναι δυνατή η διάγνωση προβλημάτων, όπως η έλλειψη ενός index, η απλοποίηση ενός query και ούτω το καθεξής.

Η λειτουργία sql trace ενεργοποιείται είτε σε επίπεδο συστήματος (καταγράφοντας όλες τις SQL εντολές του Oracle instance) είτε σε επίπεδο συνόδου (session) με την εντολή "alter session set sql_trace=true". Η πρώτη επιλογή μπορεί να είναι ανέφικτη σε ένα παραγωγικό σύστημα γιατί θα επιβάλλει μεγάλο φόρτο, ενώ η δεύτερη, αναγκαστικά θα χρειάζεται μια προγραμματιστική προσθήκη προκειμένου να μπορέσουμε να επέμβουμε στην αρχικοποίηση του connection pooling της εφαρμογής, αν μάλιστα αυτό επιτρέπεται από το persistence framework που χρησιμοποιούμε (πράγμα που είναι δυνατόν παρεμπιπτόντως για τα ADF Business Components)

Μια απλή λύση για αυτές τις περιπτώσεις είναι η χρήση του πακέτου της βάσης δεδομένων dbms_support (βρίσκεται στο $ORACLE_HOME/rdbms/admin/dbmssupp.sql που παρέχει την ευκολία της παρακολούθησης sql_trace σε δοσμένες συνδέσεις με την εντολή:

DBMS_SUPPORT.START_TRACE_IN_SESSION( SID , SERIAL# );

ενώ η διακοπή της λειτουργίας επιτυγχάνεται με:

DBMS_SUPPORT.STOP_TRACE_IN_SESSION( SID , NULL );

Επομένως, σε συνεργασία με τον DBA είναι δυνατόν να εντοπιστούν οι συνδέσεις που ανοίγει μια εφαρμογή (από το dynamic view v$session), και κατόπιν επαναληπτικά να εφαρμοστεί η παρακολούθηση των SQL εντολών σε αυτές.

1 comment:

Konstantinos said...

το package dbms_support δεν υποστηρίζεται επίσημα από την oracle

Περισσότερες πληροφορίες μπορεισ να βρεις στα αντίστοιχα metalink notes
The
DBMS_SUPPORT Package (62294.1) and Tracing Sessions in Oracle Using the DBMS_SUPPORT
Package (62160.1)