Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, θα ήθελα να ρωτήσω το εξής:

 

 

Έχω περάσει στη db μέσω του PL/SQL κάποιους πίνακες και πάνω σε αυτούς στέλνω κάποια ερωτήματα και παίρνω κάποια αποτελέσματα. Αυτό που θα ήθελα να κάνω είναι για αυτές τις επερωτήσεις να υπολογίσω της αναγνώσεις από τον δίσκο - physical reads. Ο αριθμός των αναγνώσεων εξαρτάτε μόνο από της πλειάδες που επιστρέφονται; Η έχει να κάνει και με τα περιεχόμενα της cache; 

 

Ευχαριστώ πολύ.

Δημοσ.

Καλησπέρα, θα ήθελα να ρωτήσω το εξής:

 

 

Έχω περάσει στη db μέσω του PL/SQL κάποιους πίνακες και πάνω σε αυτούς στέλνω κάποια ερωτήματα και παίρνω κάποια αποτελέσματα. Αυτό που θα ήθελα να κάνω είναι για αυτές τις επερωτήσεις να υπολογίσω της αναγνώσεις από τον δίσκο - physical reads. Ο αριθμός των αναγνώσεων εξαρτάτε μόνο από της πλειάδες που επιστρέφονται; Η έχει να κάνει και με τα περιεχόμενα της cache; 

 

Ευχαριστώ πολύ.

 

 

Ό πιο ευκολος τρόπος να κάνεις αυτό που θέλεις είναι να ενεργοποιήσεις και να χρησιμοποιήσεις το autotrace facility της Oracle. Google it να δεις πως θα το κάνεις και πως θα το χρησιμοποιήσεις . Να σου πω όμως ενα δυο πραγματάκια για να καταλάβεις.

 

Όταν εκτελέσεις το query με το autotrace θα σου βγάλει κάποια στατιστικά . Ένα απο τα metrics είναι το physical reads το οποίο και σε ενδιαφέρει. Τι σημαίνει όμως physical reads ? Είναι ο αριθμός των data blocks που χρειάστηκαν να διαβαστούν απο το δίσκο κατα την εκτέλεση του query . Δηλαδή chunks απο bytes. Αυτο δηλώνεται στην database με την παράμετρο DB_BLOCK_SIZE. Δεν σε ενδιαφέρουν οι γραμμές του πίνακα που διαβάστηκαν... μπορεί μία γραμμή να είναι 5ΚΒ και η άλλη 5 ΜΒ . Σε ενδιαφέρει ο όγκος των δεδομένων που διαβάστηκε απο τον δίσκο. Όσο το δυνατόν μικρότερο physical reads τόσο το καλύτερο. Λογικό γιατί μειώνεται το disk IO.

 

Όταν θα τρέξεις δυο φορές συνεχόμενα το query με το autotace on θα δεις ότι το physical reads θα μηδενιστεί . Αυτό γιατί θα έχει πάει στο buffer cache.  Γενικά η Oracle κοιταέι αρχικά να δεί να υπάρχει η πληροφορία στο buffer αν όχι την κάνει fetch απο τον δίσκο και την τοποθετέι στο buffer cache.

 

Ελπίζω να έγινα κατανοητός .

Δημοσ.

Μπορώ με κάποιον τρόπο μέσω του PL/SQL Developer να διαγράψω την cache; Ώστε να εντοπίσω την διαφορά στον χρόνο όταν υπάρχουν τα ζητούμενα δεδομένα στην cache και όταν γίνονται fech από τον σκληρό; Ακόμα, ο χρόνος εκτέλεσης μιας επερώτησης είναι ο χρόνος που εμφανίζεται αφού πατηθεί το "Fetch last page";

 

Επίσης για το μέγεθος σε bytes του πίνακα που έχω δημιουργήσει υπάρχει κάποιος άλλος τρόπος εκτός από το να υπολογίσω το μέγεθος σε bytes μιας πλειάδας και να τον πολλαπλασιάσω με το συνολικό αριθμό πλειάδων;

Δημοσ. (επεξεργασμένο)

Λοιπόν αυτό που κάνω είναι το εξής:

 

Στέλνω μια επερώτηση στο σύστημα και παίρνω ένα αποτέλεσμα. Μετά την επερώτηση στέλνω το εξής:

 
SELECT P.value as PHYSICAL_READS
FROM v$mystat P, v$statname N
WHERE N.name = 'physical reads'
AND P.statistic# = N.statistic#;
 
Το αποτέλεσμα που παίρνω όμως είναι πολύ περίεργο. Τα Physical Reads αυξάνονται και μειώνονται χωρίς μπορώ να δώσω κάποια λογική εξήγηση.
 
Για παράδειγμα αν εκτελέσω την ακολουθία: επερώτηση-εύρεση των physical reads με τον τρόπο που ανέφερα προηγουμένως-ξανά επερώτηση-ξανά εύρεση των physical reads ενώ περιμένω την δεύτερη φορά τα Physical Reads να έχουν ελαχιστοποιηθεί, αυτά αυξάνονται..
Καμιά ιδέα γιατί μπορεί να γίνεται αυτό; Η μήπως κάτι δεν κάνω καλά;
Επεξ/σία από nik324
Δημοσ.

θα ήθελα να προσθέσω μια ακόμα ερώτηση που έχει να κάνει με αναδιατύπωση της για την πλήρη εκμετάλλευση της ενδιάμεσης μνήμης (ελπίζω μόνο να μην μιλάω μόνος μου :P)

 

1η επερώτηση:
 
SELECT p.ID
FROM A p1, B p2
WHERE p1.ID = p2.ID and p1.value > χ;
 
 
2η επερώτηση:
 
SELECT p1.ID
FROM A p1
WHERE p1.ID IN
(SELECT p1.ID
FROM B p2
WHERE p2.value > χ);
 
θα μπορούσα να αλλάξω κάτι σε αυτές τις δύο επερωτήσεις για να εκμεταλλευθώ καλύτερα την ενδιάμεση μνήμη;
 
Ευχαριστώ
Δημοσ.

Θες να κανεις SQL tuning και εχεις μόνο την παραγωγική βάση . Θα κανεις clear την cache ; και πόσες φορές μέχρι να πεις εντάξει παίζει γρήγορα το query. Καταλαβαίνεις τι αντίκτυπο έχει αυτό φαντάζομαι . Όλοι οι χρηστές καθε φορά που θα αδειάζεις την cache θα βαράνε δίσκο. Και τώρα θα με ρωτήσεις δεν μπορείς να κανεις optimize ενα query σε παραγωγικό περιβάλλον ;

 

Η ερώτηση είναι τι έχει σημασία... το logical io η το physical io . Και ποτε το physical io αξιζει προς διερεύνηση . Αν κατανοήσεις αυτα τα δυο θα καταλάβεις ότι αυτο που πρέπει να κανεις focus ειναι το logical io.

 

Οσο για τα υπόλοιπα που ρωτάς κανονικά θα έπρεπε να μπορείς να κανεις ανάλυση με τα εργαλεία που έχει η oracle . Σίγουρα θα απαντήσουν πιο συγκεκριμένα για το δικό σου περιβάλλον .

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...