Η εγκατάσταση αυτής της δυνατότητας έγινε ως εξής:
- Ως χρήστης SYS εκτελούμε το script $ORACLE_HOME/rdbms/admin/profload.sql
- Δίνουμε δικαιώματα εκτέλεσης στο πακέτο dbms_profiler σε όλους τους χρήστες της βάσης: GRANT EXECUTE ON dbms_profiler to PUBLIC;
- Ως ένας database user, κατασκευάζουμε στο σχήμα μας τους πίνακες καταγραφής του profiling εκτελώντας το script: $ORACLE_HOME/rdbms/admin/proftab.sql
- Ως αποτέλεσμα θα δημιουργηθούν τρεις πίνακες με το πρόθεμα PLSQL_PROFILER στο σχήμα μας.
dbms_profiler.start_profiler
και την αντίστοιχη εντολή κλεισίματος του profiling session στο τέλος του PL/SQL κώδικά μας:
dbms_profiler.stop_profiler
Τα αποτελέσματα του profiler καταγράφονται ανά database session και ένας αποτελεσματικός τρόπος να τα παρακολουθήσουμε είναι μέσω ενός custom report του SQL Developer της AMIS που βρίσκεται εδώ: http://technology.amis.nl/blog/2327/dbms_profiler-report-for-sql-developer To report εμφανίζει σε μορφή γραφήματος τον χρόνο εκτέλεσης ανά PL/SQL package και έπειτα σε αναλυτική μορφή τους min/max χρόνους εκτέλεσης ανά γραμμή κώδικα καθώς και τον συνολικό χρόνο και αριθμό των εκτελέσεων της γραμμής.
Μια πιο χρήσιμη γενίκευση αυτού του reporting, ειδικά εάν ο PL/SQL κώδικας μας ενεργοποιείται από πολλαπλά sessions μέσω connection pooling ή parallel execution, μπορεί να προκύψει τρέχοντας το script $ORACLE_HOME/plsql/demo/profsum.sql ως ο χρήστης που φτιάχτηκαν οι πίνακες του profiling. Αναφέρω ενδεικτικά τα reports που παράγονται κατά αυτόν τον τρόπο:
- Percentage of time in each module, for each run separately
- Percentage of time in each module, summarized across runs
- Lines taking more than 1% of the total time, each run separate
- Most popular lines (more than 1%), summarize across all runs
- ...
No comments:
Post a Comment