Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

TimeOut

Îåêßíçóå áðü ôï ìÝëïò gmlogic. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 15-04-2007, 22:53. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-04-2007, 19:19 29349

    TimeOut

    Στέλνω ένα Query σε ένα SQL2000 πχ για διάστημα 10 ημερών.
    Πέρνω κανονικά αποτελέσματα.
    Αυξάνω το διάστημα πχ σε ένα μήνα και πέρνω timeout.
    Θα έπρεπε να πάρω γύρω στις 5000 εγραφές
    Πώς μπορώ να αυξήσω το timeout για να ολοκληρωθή το Query  και μετά θα κοιτάξω την καλύτερη διαχείρηση του.
    Αλλά θέλω πρώτα να ολοκληρωθή το Query.
    Ευχαριστώ.


    George Matzouranis
  •  15-04-2007, 19:32 29351 σε απάντηση της 29349

    Απ: TimeOut


    Εξαρτάται πως συνδέεσαι και πως τραβάς τα data. Στον Query Analyzer παίρνεις time out για το ίδιο query ή μόνο μέσα από την εφαρμογή σου; Τρέχεις το query από το PC που βρίσκεται ο SQL Server ή από τον client; Πως συμπεριφέρεται σε κάθε περίπτωση; Τι μέγεθος (περίπου) έχει κάθε εγγραφή; 5000 εγγραφές δεν μου φαίνονται πολλές για να καθυστερείς να τις πάρεις...


    Vir prudens non contra ventum mingit
  •  15-04-2007, 19:56 29359 σε απάντηση της 29349

    Απ: TimeOut

    Το Command Timeout το ορίζει κανείς στο Command Object το ίδιο. Το default είναι 60 sec. Όμως οι 5000 εγγραφές είναι πολύ λίγες για να προκαλούν τέτοιο timeout. Κάτι συμβαίνει και προκαλεί καθυστέρηση. Το πρόβλημα μπορεί να οφείλεται είτε σε προβληματικό query ή σε blocking που προκαλείται από άλλα connections. Η αύξηση του timeout μπορεί να μην διορθώσει το πρόβλημα σου, απλά να το καθυστερήσει για λίγο, πχ. μέχρι να προσπαθήσεις να επεξεργαστείς δεδομένα 3 μηνών.

    Το πρώτο πρόβλημα, το προβληματικό query μπορεί να οφείλεται σε χρήση cursors μέσα στο query, στην έλλειψη των κατάλληλων index στους πίνακες ή απλά στο ότι το query είναι πολύ περίπλοκο. Αν π.χ. το query περιέχει nested queries σε μεγάλο βάθος, η απόδοση του query μπορεί να είναι χειρότερη απ' ότι αν χρησιμοποιούσες temporary tables για να κρατήσεις τα αποτελέσματα κάθε ενδιάμεσου query.

    Το δεύτερο πρόβλημα, το blocking, μπορεί να προκαλείται αν το βαρύ query αγγίζει πίνακες στους οποίους γράφουν πολλά άλλα connections/εφαρμογές. Αν το query σου χρειάζεται να πιάσει locks σε μεγάλο ποσοστό των πινάκων, είναι πολύ πιθανο το query και τα άλλα connections να χρειάζονται πρόσβαση στα ίδια rows με αποτέλεσμα να καθυστερούν όλα τα queries.

    Έτσι κι αλλιώς, όταν εκτελείς queries μεγάλης διάρκειας αυξάνει κανείς το Command Timeout. Αυτό όμως είναι δεν είναι τρόπος αντιμετώπισης των προβληματικών queries.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  15-04-2007, 19:57 29360 σε απάντηση της 29351

    Απ: TimeOut

    Αγαπητέ Μάνο
    Το ίδιο Timeout πέρνω και στο Query Analyzer και στή εφαρμογή μου.
    Τρέχω την εφαρμογή από client
    Βασικά είναι ένα αρκετά πολύπλοκο query και έχει πολλά join αλλά λειτουργεί σωστά.
    Η βάση φέτος έχει αυξηθεί αρκετά και το ψάχιμο με το select είναι ποιό μεγάλο.
    Όταν λοιπόν αυξήσω το date διαστήμα πέρνω time out.
    Πώς μπορώ να αυξήσω το  time out.
    Σου γράφω το connection string
          CONNECT_STRING = _
            "data source=192.168.111.90\S1MODEL;Initial Catalog=aluset;User ID=sa"





    George Matzouranis
  •  15-04-2007, 20:13 29371 σε απάντηση της 29360

    Απ: TimeOut

    Συμφωνώ απόλυτα με τον Παναγιώτη... Αν τρέξεις το query στον server, μέσω Query Analyzer τι χρόνο εκτέλεσης σου δίνει;


    Vir prudens non contra ventum mingit
  •  15-04-2007, 20:34 29378 σε απάντηση της 29359

    Απ: TimeOut

    Αγαπητέ Παναγιώτη δεν είναι ο σκοπός μου να λύσω το πρόβλημα αυξάνωντας το time out.
    Απλά θέλω να αυξήσω το time out να δώ να ολοκληρώνετε το query και μετά να το ψάξω με όλα αυτά που μου λές.
    Δοκίμασα να τρέξω το query και όταν ήμουν τελείως μόνος μου πάνω στη βάση και πάλι ειχα time out.
    Πέρνω το time out γύρω στα 30 sec.
    Δοκίμασα να δώσω
      CONNECT_STRING = _
            "data source=192.168.111.90\S1MODEL;Initial Catalog=aluset;User ID=sa;Connection Timeout=150"
    αλλά πάλι πέρνω time out γύρω στα 30 sec.



    George Matzouranis
  •  15-04-2007, 20:58 29393 σε απάντηση της 29378

    Απ: TimeOut

    To Connection timeout είναι ένα από τα time outs. Βασικά με αυτό προσπαθεί να συνδεθεί για X χρόνο και γι αυτό δεν θα πετύχεις τίποτα αυξάνοντάς το.

    Πρέπει να δοκιμάσεις άλλη προσέγγιση. 5000 εγγραφές δεν είναι πολλές. Πρέπει να δεις τι φταίει.


    Vir prudens non contra ventum mingit
  •  15-04-2007, 21:04 29394 σε απάντηση της 29393

    Απ: TimeOut

    To Command object έχει το CommandTimeout property που έχει default τιμή τα 30sec.

     


    Vir prudens non contra ventum mingit
  •  15-04-2007, 21:24 29401 σε απάντηση της 29394

    Απ: TimeOut

    Οκ Μάνο έχεις δίκιο εγώ αύξανα το connection time out .
    Θα το κοιτάξω αύριο στη δουλειά.
    Θα παίξω λίγο με το command.CommandTimeout για να πάρω το query και μετά θα δώ πως θα το φτιάξω καλύτερα.
    Σε ευχαριστώ πολύ.


    George Matzouranis
  •  15-04-2007, 21:30 29402 σε απάντηση της 29401

    Απ: TimeOut

    Και... μην ξεχάσεις το "Κατάσταση Ενότητας" και το "Σημείωση ως Απάντησης"


    Vir prudens non contra ventum mingit
  •  15-04-2007, 22:53 29423 σε απάντηση της 29401

    Απ: TimeOut

    Πέρα από το Command Timeout, καλό θα είναι να χρησιμοποιήσεις τον Query Analyzer για να δεις αν χρησιμοποιούνται σωστά τα Indexes των πινάκων και ποιό είναι το σημείο στο οποίο καθυστερεί τόσο το query. Δεν είναι λογικό να προκαλείται τέτοια καθυστέρηση απλά πηγαίνοντας από 10 σε 30 ημέρες. Ο χρόνος ενός query κατά κανόνα δεν αυξάνεται γεωμετρικά, ούτε καν γραμμικά, αν χρησιμοποιούνται τα σωστά indexes.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems