Oct 5, 2011

Εξοικονόμηση αποθηκευτικού χώρου στην Oracle για development environment

Δεν είναι λίγες οι περιπτώσεις που μια ομάδα ανάπτυξης διαπιστώνει πως ο database server που χρησιμοποιεί "ξεμένει" από χώρο. Το ίδιο μπορεί επίσης να συμβεί και στο ατομικό μας development environment. Αν και σε φυσιολογικές συνθήκες θα πρέπει να υπάρχει ένας DBA που παρακολουθεί τέτοιου είδους καταστάσεις, υπάρχουν μερικές συμβουλές που μπορούμε να ακολουθήσουμε ώστε να εξοικονομήσουμε χώρο και απόδοση σε μια Oracle βάση δεδομένων.

1. Για παράδειγμα, στην ομάδα που συνεργάζομαι και ο καθένας προγραμματιστής τρέχει το δικό του instance του SOA Suite (επομένως υπάρχει ξεχωριστό repository - σχήμα ανά developer), παρατήρησα πως υπάρχουν συχνά audit logs για την αποσύνδεση από τη βάση, που μάλιστα φθάνουν στα 10ΜΒ σε ημερήσια βάση. Εξ ορισμού, τα audit logs βρίσκονται στον κατάλογο adump και έχουν την επέκταση .aud. Στην περίπτωσή μου, υπήρχαν auditing εγγραφές του τύπου:

SESSIONID:[7] "1639115" ENTRYID:[1] "1" USERID:[9] "DEV02_MDS" ACTION:[3] "102" RETURNCODE:[1] "0" LOGOFF$PREAD:[1] "0" LOGOFF$LREAD:[3] "138" LOGOFF$LWRITE:[1] "4" LOGOFF$DEAD:[1] "0" DBID:[10] "1345676453" SESSIONCPU:[1] "1"

Για τις ανάγκες του development, είναι ασφαλές, κατά περίπτωση, να απενεργοποιήσουμε το auditing της βάσης ως εξής:

alter system set audit_trail=NONE scope=spfile;

και η αλλαγή μας θα γίνει ορατή με το επόμενο restart. Διαφορετικά, αν θέλουμε να κρατήσουμε το auditing, μπορούμε να τρέχουμε ένα cron job για το clean up, καθαρίζοντας αρχεία αρχαιότερα των 10 ημερών με την Linux εντολή:

find /path_audit_logs -mtime +10 -exec rm {} \;


2. Μια άλλη πηγή παραγωγής πολλών MB είναι τα trace files. Μπορούμε εξίσου να καταργήσουμε το tracing με την εντολή:

alter system set trace_enabled=FALSE scope=both;

ή απλά να καθαρίζουμε τα αρχεία σε τακτά χρονικά διαστήματα με την μέθοδο που ήδη περιγράψαμε.


3. Ένα αρχείο που επίσης συχνά έχει μεγάλο μέγεθος είναι το listener.log αφού καταγράφει κάθε προσπάθεια εισόδου στην βάση. Σε περιβάλλον connection pooling και πολλών προγραμματιστών, γρήγορα αυτό το αρχείο "φουσκώνει". Μπορούμε να απενεργοποιήσουμε την λεπτομερή καταγραφή προσθέτοντας στο listener.ora την ακόλουθη γραμμή και να επανεκκινήσουμε τον listener:

LOGGING_LISTENER = OFF


4. Τέλος, θα μπορούσαμε να απενεργοποιήσουμε και το flashback χαρακτηριστικό της Oracle (http://www.dba-oracle.com/t_disable_flashback.htm) ή/και προφανώς το log archiving (που δεν είναι εξ ορισμού επιλεγμένο) ή ακόμα και το recycle bin (http://babudba.blogspot.com/2008/06/how-to-disable-recyclebin-in-oracle-10g.html) ώστε να μειώσουμε τις εγγραφές στον δίσκο.