Jump to content

antonch

Administrators
  • Posts

    1030
  • Joined

  • Last visited

  • Days Won

    7

Blog Entries posted by antonch

  1. antonch
    Για όσους θέλουν να χρησιμοποιήσουν ένα hotmail account σαν SMTP account για το SQL Server Database Mail θα πρέπει να κάνουν τις ρυθμίσεις σε αυτό όπως φαίνονται στην παρακάτω εικόνα

    ΠΡΟΣΟΧΗ ΠΡΟΣΟΧΗ ΠΡΟΣΟΧΗ
    ΣΕ ΚΑΜΙΑ ΠΕΡΙΠΤΩΣΗ ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΣΥΠΛΗΡΩΘΟΥΝ ΤΑ ΕΞΗΣ ΠΕΔΙΑ ΤΗΣ ΠΑΡΑΠΑΝΩ ΦΟΡΜΑΣ ΚΑΘΩΣ ΑΝ ΑΥΤΟ ΓΙΝΕΙ ΔΕΝ ΘΑ ΜΠΟΡΕΙΤΕ ΝΑ ΣΤΕΙΛΕΤΕ EMAIL.
    Description Display Name Reply e-mail
  2. antonch
    Πότε τελικά λέμε ότι αυτός ο άνδρας είναι φαλακρός;
    Η φαλάκρα είναι κάτι το οποίο σε αρκετούς άνδρες δημιουργεί ψυχολογικά προβλήματα σε άλλους πάλι κανένα, και σε κάποιους άλλους μερικές φορές τους ακουμπάει για κάποια χρονικά διαστήματα αλλά γενικά εχουν συμβιβαστεί μαζί της.
    Πέρα όμως από αυτό το ερώτημα παραμένει. Πότε τελικά κάποιος είναι φαλακρός;
    Αν για παράδειγμα από τα μαλλιά μου βγάλω μια τρίχα είμαι φαλακρός; Η προφανής απάντηση είναι όχι. Αν βγάλω και δεύτερη και τρίτη και τέταρτη αυτό με κάνει φαλακρό; Προφανώς όχι.
    Αν όμως χάσω εκατοντάδες τρίχες αυτό με κάνει φαλακρό; Ποιός μπορεί να το απαντήσει αυτό με σιγουριά.
    Αν συνεχίσω να χάνω εκατοντάδες τρίχες καθημερινά και ένα πρωινό ο γιός μου φωνάξει «Πατέρα είσαι φαλακρός» είμαι τελικά φαλακρός ή έχω αρχίσει να φαλακρένω.
    Υπάρχει τελικά κάτι το οποίο μπορεί να ορίσει το αν είμαι φαλακρός ή όχι;
    Στην φιλοσοφία αυτο είναι το Σόφισμα του σωρείτη το οποίο είναι ένα λογικό παράδοξο που ασχολείται με την ασάφεια των κατηγορημάτων σε μία λογική πρόταση δείχνοντας ότι είναι πιθανό να μην υπάρχει ένα σαφές όριο ανάμεσα σε ένα κατηγόρημα και την άρνησή του.
    Στον προγραμματισμό έχουμε μάθει να λαμβάνουμε αποφάσεις με βάση την δυαδική λογική (if/else). Έχουμε δομήσει το τρόπο σκέψης μας με αυτό το pattern. Οτιδήποτε πέρα από αυτό μας ξενίζει, μας δημιουργεί πρόβλημα, μας ανατρέπει τον τρόπο σκέψης μας.
    Θυμάμαι χαρακτηριστικά το CheckBox Control το οποίο όταν πρωτοβγήκε δημιούργησε θύελα αντιδράσεων και αυτό γιατί είχε τρεις διαφορετικές περιπτώσεις checked/unchecked/indeterminate. Η τελευταία ήταν αυτή που δημιουργούσε το πρόβλημα. Δεν μπορούσαμε να καταλάβουμε το λόγο ύπαρξης της. Τι σημαίνει ούτε ναι ούτε όχι. Ταλαιπώρησε και συνεχίζει να ταλαιπωρεί αρκετό κόσμο της πληροφορικής.
    Το να γράψεις λογισμικό τελικά δεν είναι μια δυαδική λογική ή είναι;
    Η τρίτη επιλογή πρέπει να λαμβάνεται υπόψη ή όχι;
    Ποιος μπορεί να δώσει ασφαλή απάντηση, και μιλάω για μια απάντηση η οποία να είναι αποδεκτή από όλους. (Δύσκολο)
    Προς τους αδερφούς developers
    Την επόμενη φορά που θα γράψετε software μη σκεφτήτε το άλλο το περίεργο.
    Σκεφτήτε με την λογική του if/else αλλά αλλάξτε το στη τελική σας υλοποίηση με τη switch αφήνοντας ένα παράθυρο στην πιθανότητα
    Καλές Διακοπές
  3. antonch
    Στο μάθημα της προηγούμενης εβδομάδας δέχθηκα μια ερώτηση από ένα πολύ καλό φίλο και συνάδελφο (καλημέρα Θεόδωρε) μια αρκετά ενδιαφέρουσα ερώτηση που αφορούσε το που αποθηκεύεται η πληροφορία της διαδικασίας του checkpoint σε μια database.
    Επειδή η απάντηση μου τον ξάφνιασε λίγο σε αυτό το post αρχικά θα την μοιραστώ μαζί σας και θα την εξηγήσω.
    http://www.sqlschool.gr/blog/where-stored-the-last-checkpoint-operation-info-1010.aspx
  4. antonch
    To recording μπορείτε να το δείτε εδώ
     
    Σας έλειψαν το ξέρω, και εμένα.
    Αλλά από το τελευταίο έγιναν πολλά, IT PRO|DEV Connections 2010, έπεσε πολύ δουλειά και πολλά ακόμα, που δεν μου έδωσαν χρόνο να διοργανώσω ένα νέο. Όμως ποτέ δεν είναι αργά. Έτσι λέω να κάνουμε ένα το επόμενο Σάββατο 18/12/2010 την γνωστή ώρα 22:30 και με θέμα «Security in SQL Server 2008 R2»
    Για να συνδεθείτε στο event πατήστε εδώ
    Το επόμενο θα είναι με την νέα χρονιά.
  5. antonch
    Είμαι φανατικός αναγνώστης του, έχω διαβάσει σχεδόν όλα του τα βιβλία όχι μια αλλά πολλές φορές, τα οποία κοσμούν την βιβλιοθήκη μου. Προσπαθώ να βρω τα άρθρα του όπου και αν γράφει. Δεν υπάρχει περίπτωση να μην τον αναφέρω μέσα στην τάξη όταν κάνω μάθημα. Αλλά ποτέ μέχρι σήμερα δεν τον είχα δει να κάνει μάθημα. Γενικά δεν κάνει πολλές εμφανίσεις που να μπορώ να βρώ στο web.
     
    Κυρίες και Κύριοι έχω την τιμή να σας παρουσιάσω στο παρακάτω video έναν εκ των σηματικότερων θεμελιωτών των RDBMS τον one and only
    C. J. Date
    Απολαύστε τον στο παρακάτω videο. Ίσως να μην έχει η παρουσίαση αυτή να σας μάθει κάτι που να μην γνωρίζετε, αλλά αξίζει να δείτε αυτόν τον μεγάλο επιστήμονα.
    (κάντε click στο παρακάτω image για να δείτε το video)

  6. antonch
    Για να δείτε την μαγνητοσκόπηση κάντε click εδώ
    ή επισκευθείτε το www.techdays.gr και αναζητήστε την με το tag SQL Saturday Nights
  7. antonch
    Πρωινή συζήτηση με συνάδελφο η οποία έφτασε να αξιολογούμε βάσεις και να μετράμε αντικείμενα σε αυτές. Κάποια στιγμή γράφω το παρακάτω query για να δω ανά object type τι πλήθος αντικειμένων έχω σε αυτό και ο συνάδελφος εντυπωσιάστηκε.

    Αν ποτέ το χρειαστείτε είναι το παρακάτω:
    περισσότερα
  8. antonch
    Ε1. Παίζει ο SQL Server σε virtualization;
    Ε2. Τι κερδίσω και τι χάνω από αυτό;
    Ε3. Να βάζω πάντα τον SQL Server σε virtual environment ή όχι;
    Ε4. Τι θα με οδηγήσει στο να πάρω την σωστή απόφαση για τον αν θα πάω virtual ή όχι;
    Ερωτήματα που κατά καιρούς μου έχουν τεθεί είτε από μαθητές μου είτε από συνεργάτες μου.
    Θα επιχειρήσω να απαντήσω σε όλα αυτά. Ναι ο SQL Server παίζει σε virtual environment. Αυτό με κάνει να κερδίζω σε total cost of ownership (TCO) μιας και είναι χαμηλό αλλά και return of investment (ROI) μιας και αξιοποιώ 100% το hardware μου. Αλλα δεν είναι μόνο αυτά, εξοικονομώ χρήματα διότι καταναλώνω λιγότερη ενέργεια, χρειάζομαι μικρότερους χώρους, αλλά και έχω μια πιο μαζεμένη διαχείριση των server μου.
    Ακόμα εξοικονομώ χρήματα από τις άδειες χρήσης του SQL Server (Enterprise Editon) μιας και μπορώ να έχω όσες virtual μηχανές θέλω, με SQL Server μέσα σε αυτές, σε μια φυσική μηχανή, αρκεί να έχω αγοράσει άδειες, του SQL Server, για όλους τους φυσικούς επεξεργαστές που υπάρχουν σε αυτή (φυσική μηχανή).
    Υπάρχουν και άλλα πλεονεκτήματα αλλά και μειονεκτήματα, δεν θα τα αναφέρω όλα. Μπορείτε όμως να τα βρείτε από το http://www.microsoft.com/sqlserver/2008/en/us/virtualization.aspx link.
    Εκεί που θέλω να δώσω την μεγαλύτερη βαρύτητα είναι στο με πια κριτήρια επιλέγω να πάω τον SQL Server μου σε virtual environment. Ο βασικότερος για μένα είναι το performance. Όλοι ξέρουμε ότι υπάρχει ένα θέμα με αυτό στα virtual enviroments. Αν και στα Windows Server 2008 R2 με Hyper-V τα πράγματα έχουν γίνει αισθητά καλύτερα, εντούτοις παραμένει ένα θέμα, ειδικά για VLDBs (Very Large Databases) και για heavily transactional OLTP databases, και φυσικά καλό είναι να αποφεύγουμε το virtualization σε τέτοιες περιπτώσεις.
    Ποιες είναι όμως οι περιπτώσεις που θα μπορούσα να έχω το SQL Server σε virtual environment χωρίς να αντιμετωπίσω προβλήματα είτε performance είτε οτιδήποτε άλλο;
    Μερικές τέτοιες είναι οι παρακάτω:
    Consolidating underutilized servers BI components όπως Analysis Services και Reporting Services Managing high availability με Hyper-V Live Migration για hardware maintenance Remote site consolidation με Database Mirroring Development and Test environments. Το θέμα είναι μεγάλο. Οι συζητήσεις και οι ερωτήσεις γύρω από αυτό πολλές. Δεν υπάρχει άσπρο ή μαύρο. Όλα είναι θέμα σωστής εκτίμησης η οποία θα βγει μόνο αν είσαι ενημερωμένος σωστά στο θέμα. Εικασίες, φήμες, και μου το είπε ο Μήτσος δεν χωράνε εδώ.
    Εγώ απλά θέλω να σας τριβελίσω το μυαλό αλλά και να σας δώσω μια σειρά από Links μέσα από τα οποία θα βρείτε πληροφορίες σημαντικές για το θέμα αυτό. Παράλληλα όμως θέλω να σας τονίσω ότι καλό είναι να κρατήσετε σαν μπουσούλα τις παραπάνω περιπτώσεις ένα δεν θέλετε να μπείτε περισσότερο σε βάθος.
    Τα links είναι
    http://www.microsoft.com/sqlserver/2008/en/us/virtualization.aspx http://www.microsoft.com/virtualization/solutions/business-critical-applications/default.mspx http://msdn.microsoft.com/en-us/architecture/dd393309.aspx
  9. antonch
    Σε αυτό το post θα σας παρουσιάσω ένα θέμα το οποίο είναι κάτι που αντιμετωπίζουν οι web developers και ιδιαίτερα αυτοί που ασχολούνται με Content Management Systems (CMS). Όπως είναι γνωστό σε αυτά αποθηκεύουμε το περιεχόμενο που βάζουμε στα sites μας, είτε σαν HTML, είτε σαν XML ή κάτι άλλο. Αρκετές είναι οι περιπτώσεις που χρειαζόμαστε να αντλήσουμε από αυτά μόνο το καθαρό περιεχόμενο αγνοώντας δηλαδή τα διάφορα HTML/XML tags.
    περισσότερα
  10. antonch
    Πριν από τρία χρόνια είχα γράψει ένα post με αυτό το θέμα. Το συγκεκριμένο post είναι από τα δημοφιλή θα έλεγα και έχει αρκετούς, από όσο γνωρίζω που έχουν χρησιμοποιήσει την συγκεκριμένη πρόταση.Παρόλα αυτά όμως το παλαιό post χρειάζεται ένα refactoring καθώς από τότε που γράφτηκε μέχρι σήμερα έχουν μεσολαβήσει αρκετές αλλαγές που σε αρκετές περιπτώσεις δεν θα δουλέψει. Για αυτό σε αυτό δίνω μια νέα βελτιωμένη εκδοχή.
    more
  11. antonch
    Πρόλογος
    Αυτό που με εξιτάρει περισσότερο στην δουλειά μου και στην ενασχόληση μου με τον SQL Server είναι να βρίσκω λύση σε προβλήματα, αλλά και σε ποιον δεν αρέσει αυτό;
    Το Πρόβλημα
    Σήμερα ένας συνάδελφος στην εταιρία που εργάζομαι έρχεται με το εξής ερώτημα-πρόβλημα
    «Έχω ένα πίνακα και έχω φτιάξει μια stored procedure η οποία περιέχει ένα business logic αρκετά σημαντικό και περίπλοκο με το οποίο κάνω insert στον συγκεκριμένο πίνακα. Θέλω να κάνω insert στο συγκεκριμένο πίνακα μόνο από την συγκεκριμένη stored procedure και μόνο πως μπορεί να γίνει αυτό;»
    Στην αρχή ξαφνιάστηκα καθώς ο συνάδελφος είναι εμπειρότατος και η ερώτηση του μου φάνηκε κάπως. Του απάντησα ότι αυτό είναι στο χέρι του καθώς αυτός γράφει τον κώδικα. Φυσικά η απάντηση μου δεν τον ικανοποίησε. Έτσι μετά από μια σύντομη συζήτηση κατάλαβα τι ακριβώς ήθελε να κάνει το οποίο τελικά ήταν:
    «Έχω ένα πίνακα και έχω φτιάξει μια stored procedure η οποία περιέχει ένα business logic αρκετά σημαντικό και περίπλοκο με το οποίο κάνω insert στον συγκεκριμένο πίνακα. Θέλω να κάνω insert στο συγκεκριμένο πίνακα μόνο από την συγκεκριμένη stored procedure και μόνο είτε από την εφαρμογή είτε από τον SSMS είτε από οπουδήποτε. Θέλω δηλαδή εκτός από να προστατέψω την ποιότητα των δεδομένων που θα μπαίνουν στον συγκεκριμένο πίνακα θέλω να προστατέψω και εμένα και τους άλλους developers καθώς στην καθημερινότητα μας φτιάχνουμε πολλές stored procedures και υπάρχει πάντα το ενδεχόμενο σε μια νέα που φτιάχνουμε να κάνουμε insert στον συγκεκριμένο πίνακα χωρίς να καλέσουμε την εν λόγο stored procedure με αποτέλεσμα να έχω λάθος στα δεδομένα στον πίνακα. Επίσης αυτό θέλω να μπορεί να γίνει ακόμα και για αυτούς που έχουν δικαιώματα sysadmin στον SQL Server. Πως μπορεί να γίνει αυτό;»
    περισσότερα
  12. antonch
    Αφορμή για αυτό το post ήταν δύο γεγονότα τα οποία μου συνέβησαν το τελευταίο διάστημα. Το ένα ήταν μια «διαμάχη» με έναν συνάδελφο σχετικά με το γεγονός ότι πλέον δεν υποστηρίζεται πλέον στον SQL Server 2012 η sp_dboption, και το άλλο είναι ένα προσωπικό μήνυμα που έλαβα από κάποιον άλλο συνάδελφο σχετικά με το αν θα πρέπει να χρησιμοποιείται το semicolon στο τέλος των εντολών της T-SQL.

    Δεν ξέρω αν το γνωρίζεται αλλά σε κάθε έκδοση του SQL Server που βγάζει η Microsoft μέσα στα books online υπάρχει ένα section το οποίο ονομάζεται Deprecated Features. Για τον SQL Server 2012 και για το Database Engine θα βρείτε αυτά στο link αυτό. Σε αυτό υπάρχει μια πλήρης λίστα αυτών που σε επόμενες εκδόσεις δεν θα υπάρχουν πλέον.

    περισσότερα
  13. antonch
    Αν και πιστεύω ότι αρκετοί θα έχετε υλοποιήσει κάτι τέτοιο εντούτοις σας παραδίδω και την δικιά μου εκδοχή που κάνει parse ένα string με delimiters και επιστρέφει ένα πίνακα με τα αποτελέσματα της εκτέλεσης
    περισσότερα
  14. antonch
    Δεν είναι λίγες οι φορές που θέλουμε να αυτοματοποιήσουμε διαδικασίες ή να κάνουμε εργασίες μαζικά χωρίς να μπλέκουμε με το UI στα SQL Server Reporting Services. Για να κάνουμε κάτι τέτοιο πολλές φορές θα χρειαστεί να γράψουμε κάποιο script σε Visual Basic .NET το οποίο θα πρέπει να εκτελεστεί με το rs.exe utility που έχουν τα SSRS.
    more
  15. antonch
    Αρκετές φορές υπάρχουν πράγματα τα οποία ερωτεύεσαι από την πρώτη στιγμή και θέλεις να είναι όλα πλέον έτσι. Εδώ και λίγο καιρό έχω αρχίσει να φτιάχνω νέα labs για τον SQL Server 2012 σε περιβάλλον Windows Server 2012 Datacenter Edition. Ο συγκεκριμένος συνδυασμός είναι από αυτά που έχουν συνηθίσει να λέμε ότι τα σπάει.Φυσικά όπως πάντα όλα μου τα labs είναι σε Ηyper-V Virtual Machines. Είναι γνωστή η λατρεία μου για τα virtual environments εδώ και χρόνια έτσι και αλλιώς.
    read more
  16. antonch
    Σε προηγούμενα μου post μίλησα για την διαδικασία του upgrade σε SQL Server 2012. Σε αυτό θα σας δώσω μερικές συμβουλές για το πως μπορείτε να κάνετε migration μια ή περισσότερες databases από μια παλαιότερη έκδοση του SQL Server σε SQL Server 2012. Οι προτεινόμενοι τρόποι για να γίνει κάτι τέτοιο είναι οι παρακάτω και δεν υπάρχει καλύτερος ή χειρότερος τρόπος. Ο κάθε ένας έχει τα συν και τα πλην του και θα πρέπει να κατανοήσουμε αυτά πριν διαλέξουμε αυτόν με τον οποίο θα δουλέψουμε.
    περισσότερα
  17. antonch
    Αρκετές φορές έχω αναφέρει κατά την διάρκεια των μαθημάτων και των παρουσιάσεων που κάνω για την αρχιτεκτονική μιας βάσης, ότι τα data files χωρίζονται σε σελίδες των 8K, κάθε 8 τέτοιες σελίδες αποτελούν ένα extent και ότι υπάρχουν δύο είδη extent τα uniform και τα mixed.
    Uniform είναι αυτά που οι 8 σελίδες τους ανήκουν σε ένα object πχ στον πίνακα των πελατών, ενώ mixed είναι αυτά που οι 8 σελίδες τους ανήκουν σε διαφορετικά.

    Επανειλημμένα έχω αναφέρει ότι σε κάθε πίνακα οι πρώτες 8 σελίδες του ανήκουν σε mixed extend και από την 9 και μετά πάνε σε uniform extent.
    Είναι αρκετά χρήσιμο να γνωρίζω το πως έχει γίνει αυτή κατανομή των σελίδων σε extents καθώς θα με βοηθήσει να καταλάβω το πως θα διαβαστούν τα δεδομένα μου αλλά και να μπορώ να καταλάβω το πιθανό fragmentation που θα εμφανιστεί.
    Τι κάνει η DBCC EXTENTINFO;
    Για όλους αυτούς του λόγους είναι χρήσιμο να γνωρίζω την ύπαρξη της DBCC EXTENTINFO. Η συγκεκριμένη ανήκει στην κατηγορία των undocumented dbcc commands, αλλά είναι γνωστή σε όσους ασχολούνται συστηματικά με τον SQL Server.
    Η εκτέλεση της επιστρέφει ένα dataset του οποίου η κάθε γραμμή αντιπροσωπεύει ένα extent στην βάση μου εάν αυτό είναι uniform και πολλές (μέχρι 8) αν είναι mixed.
    περισσότερα


  18. antonch
    Ένας συνάδελφος MVP του SQL Server, που έχει ένα σύστημα σε SQL Server, που ψήνει καφέ, χταπόδια, μουσακά και άλλα ευγενή εδέσματα, μας έστειλε με υπερηφάνια το νέο του παιχνίδι.
    Ζ Η Λ Ε Ψ Τ Ε

  19. antonch
    Θέλετε να ξενoιάσετε μια και καλή με το backup των βάσεων σας σε έναν SQL Server στον οποίο έχετε δώσει δικαιώματα σε developers ή χρήστες να φτιάχνουν databases με αποτέλεσμα να υπάρχουν βάσεις που δεν τις παίρνετε άμεσα χαμπάρι και όταν γίνει η ζημιά να έχετε την γκρίνια τους ότι έχασαν την βάση τους;
    Σε αυτή την περίπτωση το παρακάτω script που έφτιαξα και σας δίνω είναι η λύση.
    Φτιάξτε ένα job στον SQL Server και δώστε σε ένα step το script
    declare @weekday char(3)
    select @weekday=upper(left(datename(dw,getdate()),3))
    declare @command varchar(2048)
    declare @excludedDBs varchar(2048)
    declare @backupPath varchar(2048)
    set @excludedDBs=' ''tempdb'' , ''AdventureWorks'' '
    set @backupPath='C:\temp\'
    set @command = 'if not ''?'' in ('+@excludedDBs+') backup database ? to disk ='''+@backupPath+''+@weekday+'_?.bak' + ''' with init'
    print @command
    sp_MSforeachdb @command
     
    Μπορείτε να δώσετε το path στο οποίο θέλετε να “βγαίνουν” τα backup (set @backupPath='C:\temp\').
    Επίσης με το set @excludedDBs=' ''tempdb'' , ''AdventureWorks'' ' μπορείτε να πείτε ποιές δεν θέλετε να γίνονται backup.
    Τέλος θέλω να επισημάνω ότι αυτό παίρνει μόνο Full backup καθε βάση σε ξεχωριστό device ανα ημέρα μέσα στην εβδομάδα. Την επόμενη εβδομάδα γίνονται overwrite τα προηγούμενα
  20. antonch
    Ο Query Optimizer στον SQL Server είναι αυτός που αποφασίζει με ποιο τρόπο (query plan) θα εκτελεστεί το οποιοδήποτε sql statement το οποίο δίνουμε. Επειδή είναι κάτι το οποίο είναι εσωτερικό στη μηχανή του SQL Server, επειδή δεν παρέχει πολλά χαρακτηριστικά, αλλά δεν υπάρχουν και αρκετοί "τρελλοί" που να ασχολούνται με αυτόν , είναι ίσως από τα λίγα κομμάτια του SQL Server που ακούγονται πολύ αλλά δεν εξηγούνται πολύ.
    Διαβάζοντας το συγκεκριμένο άρθρο φιλοδοξώ να είστε σε θέση να κατανοείτε, τουλάχιστον σε υψηλό επίπεδο, το γιατί επιλέχθηκε ο συγκεκριμένος τρόπος εκτέλεσης για το sql statement το οποίο δώσατε. Βέβαια ο σκοπός μου δεν είναι αυτός. Ο σκοπός μου είναι να μπορείτε να κάνετε επίλυση των προβλημάτων με τα οποία θα έρθετε αντιμέτωποι. Για να γίνει όμως αυτό θα πρέπει να διαβάσετε και όλα τα επόμενα που θα γράψω για το θέμα αυτό.
    Ας πάρουμε τα πράγματα από την αρχή, και ας τα δούμε πρώτα από όλα σε υψηλό επίπεδο.
    Σημείωση προς τον αναγνώστη του άρθρου αυτού.
    Καλό θα ήταν να ανακαλέσεις στην μνήμη σου όσες γνώσεις έχεις από σχεσιακή άλγεβρα.

    Κάθε φορά που δίνετε ένα sql statement για εκτέλεση γνωρίζουμε ότι αυτό γίνεται compile. Στην πραγματικότητα η διαδικασία αυτή περιλαμβάνει τα εξής βήματα τα οποία εκτελούνται με την ακόλουθη σειρά Parse -> Bind -> Optimize -> Execute.
    Parsing
    Στην φάση αυτή το sql statement μεταφράζεται σε μια δενδροειδής παράσταση (tree representation ή query tree). Κάθε κόμβος (node) της παράστασης αυτής αντιπροσωπεύει και μια "λειτουργία" που πρέπει να γίνει πάνω στο sql statement το οποίο έχουμε δώσει προς εκτέλεση. Στην πραγματικότητα δεν το λέμε λειτουργία αλλά τελεστή (operator), και καλό είναι έτσι να το ξέρουμε, απλά χρησιμοποιώ τον όρο λειτουργία εδώ για γίνει κατανοητό. Από εδώ όμως και στο εξής θα το λέω operator.
    Για παράδειγμα έστω ότι έχω το sql statement
    SELECT *
    FROM CUSTOMERS C
    INNER JOIN ORDERS O ON C.CUSTOMERID=O.CUSTOMERID
    WHERE O.ORDERDATE ='19960101'
    Αυτό στην δενδροειδή μορφή του θα είναι κάτι αντίστοιχο με το παρακάτω σχήμα

    Εδώ θα πρέπει να επισημάνω ότι ο query proccesor στην πραγματικότητα προσπαθεί να συνδυάσει τους παραπάνω logical operators με τους παραγματικούς physical operators που είναι και αυτή που εκτελούνται. Μια τέτοια περίπτωση στο παράδειγμα μας είναι το Inner Join όπου είναι ο logical operator, σε αυτή την περίπτωση ο query optimizer επιλέγει τον αλγόριθμο με τον οποίο θα εκτελέσει αυτό (merge, hash ή nested).
    Binding
    Στην φάση αυτή γίνονται μια σειρά από ελέγχους πάνω στο δεδομένο sql statement, όπως το να διαβαστούν τα metadata και να διασφαλισθεί ότι τα πεδία και οι πίνακες υπάρχουν και μπορούν να προσπελασθούν από τον χρήστη που έστειλε το sql statement. Επίσης στη φάση αυτή ελέγχει αν τα πεδία τα οποία εμφανίζονται σε GROUP BY έγκυρα κ.α.
    Optimization
    Και φτάσαμε στην ουσιαστικότερη φάση. Αφού όλα τα παραπάνω έχουν γίνει επιτυχώς ο Query Optimizer αρχίζει την διαδικασία εύρεσης του καταλληλότερου execution plan. Μια διαδικασία που θα μας πάρει αρκετές γραμμές για να την εξηγήσω, οπότε νομίζω ότι είναι η καλύτερη στιγμή να πάτε να φτιάξετε ένα καφέ, να βάλετε ένα ποτάκι, μια πορτοκαλάδα και να πάρετε και τα χάπια σας.
    Υπάρχουν πολλοί τρόποι για την εκτέλεση του query που δίνουμε στον SQL Server. Όμως ποιο είναι το κατάλληλο; Με ποιο τρόπο θα γίνει αυτή η επιλογή; Πόσο γρήγορα θα γίνει αυτή η επιλογή; Είναι σίγουρα η καλύτερη επιλογή;
    Πολλά ερωτήματα ε;
    Σίγουρα δεν το ποιο απλό πρόβλημα. Είναι δύσκολο, σύνθετο και πολλά άλλα επίθετα.
    Ας ξεκινήσουμε όμως σιγά σιγά. Έστω ότι έχω το παρακάτω query
    SELECT * FROM A
    INNER JOIN B ON A.ACOL=B.BCOL
    INNER JOIN C ON B.BCOL=C.CCOL
    INNER JOIN D ON C.CCOL=D.DCOL
    INNER JOIN E ON D.DCOL=E.ECOL
    Το παραπάνω query έχει πολλά execution plans, και αυτό διότι έχει joins τα οποία και μπορούν να υπολογιστούν με διαφορετική σειρά. Θα μπορούσε να εκτελεσθεί με την σειρά ABCDE, ACBDE, ACDBE,… και με διαφορετική τοπολογία A JOIN C, C JOIN B,… .Αυτό σημαίνει ότι ο αριθμός των execution plans είναι μεγαλύτερος από N! (Nx(N-1)x(N-2)x…). Όπως εύκολα γίνεται κατανοητό αν μεγαλώσει ο αριθμός των πινάκων τότε μεγαλώνει και ο αριθμός των συνδιασμών. Αυτό σημαίνει ότι χρειαζόμαστε μνήμη. Και εδώ είναι το θέμα μας. Σε ένα x32 με x86 Intel ο SQL Server έχει 1.6 GB μνήμη διαθέσιμη για κάθε query compilation. Αυτό σημαίνει ότι δεν μπορεί να αποθηκεύσει όλους τους δυνατούς συνδυασμούς σε αυτή. Αλλά ακόμα και να έχει την δυνατότητα αυτή ο χρήστης θα πρέπει να περιμένει αρκετά μέχρι να γίνουν όλοι οι δυνατοί συνδυασμοί. Εδώ έχετε ο φοβερός σχεδιασμός του query optimizer, ο οποίος κάνει χρήση ενός heuristic συστήματος το οποίο οδηγείται από τα στατιστικά (τι έγραψα τώρα, θα το καταλάβετε παρακάτω σιγά σιγά).
    Πολλοί πιστεύουν, και για πολλά χρόνια στο παρελθόν ήμουν και εγώ μέσα σε αυτούς, ότι ο query optimizer επιλέγει το καλύτερο , το απόλυτα καλύτερο, execution plan. Όμως αυτό δεν είναι αλήθεια, και εγώ το κατάλαβα με τα χρόνια και με την συνεχή ενασχόληση μου με τον SQL Server. Δεν είναι τυχαίο ότι αρκετές φορές σε ερωτήσεις απαντάω με την έκφραση "εξαρτάται". Και μην αρχίσετε τώρα τα α καλά στην τύχη διαλέγει και άλλα τέτοια, διότι δεν είναι έτσι τα πράγματα. Οι παράγοντες που λαμβάνονται υπόψη είναι πάρα πολλοί, και ο query optimizer έχει την δυνατότητα να βρει το απόλυτα κατάλληλο execution plan, εφόσον όλα είναι στην ιδανική κατάσταση. Αλλά σίγουρα δεν θα επιλέξει το χειρότερο. Η επιλογή του θα είναι τέτοια που θα έχουμε φτάσει στο δυνατό καλύτερο. Μάλιστα είναι έτσι σχεδιασμένος ώστε να έχει την δυνατότητα να φτάσει γρήγορα σε αυτό, και το κάνει. Αλλά για το τέλειο θέλει περισσότερο χρόνο και μνήμη.
    Στην ουσία ο query optimizer είναι ένα δυνατό search framework, και έχει την δυνατότητα να συγκρίνει πολλά εναλλακτικά execution plans με ακρίβεια. Είναι η χαρά των μαθηματικών αλγορίθμων πληροφορικής. Κάθε γραμμή κώδικα του έχει γίνει με βάση αυτούς τους αλγόριθμους. Αυτό τον κάνει να είναι αξιόπιστος και αποτελεσματικός. Όμως για να πάμε λίγο πιο βαθιά.
    Το search framework το οποίο υπάρχει μέσα στον query optimizer αποτελείται από πολλά components τα οποία παρακάτω θα προσπαθήσω να τα εξηγήσω όσο ποιο απλά γίνεται.
    Για αρχή θα πρέπει να καταλάβουμε ότι διέπετε από κανόνες (Rules). Τι σημαίνει αυτό; Για κάθε query tree o query optimizer το μετατρέπει στην μνήμη σε κάτι ισοδύναμο αλλά διαφορετικό. Αυτές οι μετατροπές γίνονται με βάση κάποιους κανόνες, για παράδειγμα έχω ένα πίνακα Α που γινεται inner join με ένα πίνακα Β. Αυτό είναι ισοδύναμο με το Β INNER JOIN A, διότι και στις δύο περιπτώσεις θα γυρίσουν τον ίδιο αποτέλεσμα. Σας θυμίζει κάτι αυτό; Αν όχι ας το αποκαλύψουμε, είναι μαθηματικά Α Γυμνασίου, αντιμεταθετική ιδιότητα της πρόσθεσης. Με τους κανόνες αυτούς παράγει τα εναλλακτικά execution plans. Βέβαια δεν είναι όλα απλά μαθηματικά, όπως επίσης πρέπει να ληφθεί υπόψη ότι σημαντικό παράγοντας είναι και ο χρόνος που απαιτείται για να παραχθούν όλα αυτά. Για αυτό το λόγο γίνεται χρήση του heuristic συστήματος που ανέφερα παραπάνω . Με την χρήση των κανόνων γίνεται το "ξαναγράψημο" του query tree σε μια νέα μορφή η οποία ονομάστηκε substitution rules. Οι κανόνες οι οποίοι βασίζονται στα μαθηματικά λέγονται exploration rules. Το παραγόμενο αποτέλεσμα των μετατροπών (substitution) δεν μπορεί να εκτελεστεί, έτσι με κανόνες πάλι γίνεται μετατροπή των λογικών δέντρων σε φυσικά τα οποία είναι αυτά τα οποία μπορούν να εκτελεστούν και τα ονομάζουν implementation rules. Το καλύτερο από αυτά τα φυσικά δέντρα είναι και αυτό που επιλέγεται για να γίνει η εκτέλεση στο sql statement, είναι με άλλα λόγια το τελικό execution plan.
    Βέβαια για να γίνουν όλα τα παραπάνω το search framework του query optimizer θα πρέπει να έχει τις απαραίτητες πληροφορίες ώστε να γίνει η σωστή χρήση των κανόνων. Αυτές οι πληροφορίες λέγονται properties (τι άλλο θα μπορούσε να είναι ) και είναι στοιχεία που υπάρχουν στον κάθε κόμβο του δέντρου. Για παράδειγμα ένα τέτοιο property είναι το set των πεδίων που φτιάχνουν unique key στα δεδομένα στο παρακάτω query
    SELECT A,B,MAX© FROM T1 GROUP BY A,B
    Αυτό έχει το παρακάτω query tree:
    PROJECT (A,B,MAX©) ->
    GROUP & AGGREGATION (G: A,B - A: MAX©) ->
    GET (T1)
    Εάν στον πίνακα μας δεν έχουμε unique constraint στα πεδία (Α,Β) τότε θα πρέπει να γίνει η ΜΑΧ© για όλα τα records που εκπληρώνουν το group by. Έτσι το execution plan θα είναι το παρακάτω.

    Αν όμως έχω unique key στα πεδία (Α,Β) τότε έχω μοναδικότητα και η MAX© δεν έχει να υπολογίσει παρά μόνο ένα record. Αυτό έχει σαν αποτέλεσμα το παρακάτω execution plan. Όπως θα παρατηρήσετε σε αυτό δεν υπάρχει grouping (Sort & stream Aggregate).

    Πληροφορίες (properties) σαν αυτή συλλέγονται κατά την φάση του optimization ώστε να βοηθήσουν τους κανόνες ώστε να παράξουν γρηγορότερα το execution plan. Ενδεικτικά αναφέρω μερικές όπως predicates, join conditions, partitioning, check constraints.
    Μέχρι τώρα έχουμε αναφέρει ότι παράγονται πολλά εναλλακτικά πλάνα εκτέλεσης. Σε κάποια sql statements ενδεχομένως να είναι τεράστιος ο αριθμός τους. Σε αυτές τις περιπτώσεις υπάρχουν μηχανισμοί οι οποίοι αποτρέπουν τα διπλά όμοια. Αυτό φυσικά γίνεται για να εξοικονομηθούν μνήμη και χρόνος, γιατί όπως έχω αναφέρει παραπάνω είναι δεδομένη το πόση μνήμη θα χρησιμοποιήσει για κάθε query κατά την φάση στην οποία είμαστε (optimization) (1,6 GB). Η δομή αυτή ονομάζεται Memo structure και ένας από τους βασικούς της σκοπούς είναι να βρίσκει τα προηγούμενα sub-trees ώστε να μην τα ξανακάνει optimize. H διάρκεια ζωής του είναι όσο διαρκεί το optimization. Δουλεύει με την λογική να αποθηκεύει το ισοδύναμα δέντρα σε groups. Επίσης θα πρέπει να αναφερθεί ότι στις περιπτώσεις που υπάρχει μεγάλο πλήθος από groups και εγκυμονείτε ο κίνδυνος να είναι run out of memory, o query optimizer επιλέγει το καλύτερο από τα υπάρχοντα.
    Execution
    Με όλα τα παραπάνω υπομάλης η επόμενη φάση είναι να γίνει η εκτέλεση και να πάρουμε το αποτέλεσμα.
    Εδώ σταματάει η εισαγωγή μου για το συγκεκριμένο θέμα. Σύντομα θα προχωρήσω σε περισσότερο βάθος στο θέμα. Αυτό που θέλω όμως να επισημάνω είναι ότι θέμα είναι αρκετά περίπλοκο με πολλά internal components και features. Αυτό σημαίνει ότι είναι φυσιολογικό κανείς μας να έχει την απόλυτη γνώση του query optimizer, και αυτό διότι από έκδοση σε έκδοση μπαίνουν νέα, αλλάζουν παλιά. Όμως όσο περισσότερα γνωρίζουμε για αυτόν τόσο ευκολότερα θα είμαστε σε θέση να εξετάζουμε τα execution plans και να βρίσκουμε τα τυχόν προβλήματα τους. Επίσης θα μας βοηθήσει αυτή η γνώση στον καλύτερο σχεδιασμό των βάσεων μας, με αποτέλεσμα να έχουμε καλύτερη ποιότητα εφαρμογών.
  21. antonch
    Αγαπητές φίλες και Αγαπητοί φίλοι.
    Ελάτε στις 14/5/2010 να πιούμε μια μπύρα και να σας δείξω τα νέα χαρακτηριστικά του SQL Server 2008 R2.
    Είναι Παρασκευή, είναι βραδάκι, στο χαλαρό και στο φιλικό θα τα πούμε όμορφα σαν μια καλή παρέα.
    Χωρίς powerpoints με πολλά demos…
    Σας περιμένω στο SQL Server booth.
    Φιλικά
    Αντώνης
  22. antonch
    Πριν ξεκινήσω να περιγράφω το συγκεκριμένο εργαλείο, οφείλω να καταθέσω την άποψη μου γι’ αυτό. ΕΙΝΑΙ ΚΑΤΑΠΛΗΚΤΙΚΟ!!!.
    Όσοι έχετε ασχοληθεί από παλία με τον SQL Server, προσωπικά ασχολούμαι από την έκδοση 6.0 (1996), θα έχετε παρακολουθήσει την εξέλιξη του συγκεκριμένου εργαλείου. Σε κάθε έκδοση είχαμε κάποιες βελτιώσεις. Όμως στην έκδοση του SQL Server 2008 πιστεύω ότι έχουμε τις περισσότερες αλλά και τις σημαντικότερες βελτιώσεις. Eίναι μια διαφορετική υλοποίηση του εργαλείου που δίνει μια πληρέστερη εικόνα τόσο στον Database Admin όσο και στον Database Developer.
    Ας ξεκινήσω λοιπόν την περιήγηση στο εργαλείο αυτό.
    Πρώτη αλλαγή είναι το πως τον ξεκινάς. Δεν είναι πλεόν στο Management του SSMS (SQL Server Management Studio). Αλλά πρέπει να κάνεις δεξί κλικ στον server στον Object Explorer και να επιλέξεις την επιλογή Activity Monitor από το menu επιλογών.

    Μετά από αυτο θα δούμε το νέο Activity Monitor

    Όπως θα δείτε υπάρχουν τέσσερα γραφήματα τα οποία δείχνουν
    % Processor Time
    Το ποσοστό του χρόνου που έχει διανυθεί και τον οποίο ο επεξεργαστής έχει δαπανήσει για να εκτελέσει non-idle threads για τον SQL Server σε όλες τις CPUs.
    Waiting Tasks
    Ο αριθμός των tasks τα οποία περιμένουν πόρους είτε του επεξεργαστή, είτε για Ι/Ο, είτε για μνήμη.
    Database I/Ο
    Το transfer rate σε MB/Sec για την μεταφορά των δεδομένων είτε από την μνήμη στον δίσκο, είτε από το δίσκο στη μνήμη, είτε από δίσκο σε δίσκο.
    Batch Requests/sec
    Ο αριθμός των batches που έχουν σταλθεί στον SQL Server.
    Ακριβώς κάτω από τα γραφήματα υπάρχουν τέσσερεις λίστες
    Processes


    Εδώ βλέπουμε κάθε connection που έχει γίνει στον SQL Server και τι ακριβώς κάνει. Η λίστα περιέχει τις εξής πληροφορίες


    Session ID

    Ο μοναδικός αριθμός που παίρνει κάθε connection το γνωστό SPID. Αν δείτε δίπλα του μια κλεψύδρα εύκολα θα καταλάβετε ότι κάτι περιμένει ή είναι μπλοκαρισμένο από κάποιο άλλο connection.

    User Process Flag



    Δείχνει τα αν το συγκεκριμένο process είναι internal (τιμή 0) ή user (τιμή 1). By default δείχνει μόνο τα user αλλά μπορείτε να το αλλαξετε πατώντας το drop down που υπάρχει στο header της κολώνας. Υπάρχει και η τιμή All που τα δείχνει όλα.

    Login



    Το login name με το οποίο το συγκεκριμένο process έχει γίνει.

    Database



    Η τρέχουσα database στην οποία το connection είναι συνδεδεμένο.

    Task State



    Δείχνει εάν το process είναι ενεργό ή όχι. Εδώ μπορώ να έχω τις εξής τιμές
    Done: Ολοκλήρωση Pending: Το process περιμένει ένα worker thread Runnable: Κάτι έχει κάνει λίγο πριν αλλά αυτή την στιγμή δεν κάνει τίποτα αλλά είναι ακόμα συνδεδεμένο. Running: Κάτι κάνει αυτή την στιγμή Suspended: Το process αν και έχει δουλειά να κάνει, έχει σταματήσει γιατί κάτι το εμποδίζει να συνεχίσει. Δες το γιατί από την κολώνα Wait Type.
    Σχόλιο: Διευκρίνηση για το αφεντικό, αυτό δεν δείχνει αν χρήστης το φυσικό πρόσωπο δηλαδή κοιμάτε ή όχι πάνω στο πληκτρολόγιο του. Το λέω γιατί κάποιος πελάτης, μου είπε κάτι τέτοιο στο παρελθόν!!!.


    Command



    Δείχνει το command type (πχ SELECT, DBCC, INSERT, AWAITING COMMAND,…) το οποίο εκτελείτε. Προσοχή δεν δείχνει το πραγματικό command. Εαν θέλετε να δείτε το πραγματικό κάντε δεξί κλικ και επιλέξτε Details.

    Application



    Δείχνει την εφαρμογή με την οποία έχει γίνει το connection. Αυτό μπορεί να ορισθεί από τον developer πάνω στο connection string με το keyword Application Name.

    Wait Time (ms)



    Εαν το process είναι bloked δείχνει τον χρόνο που είναι σε αναμονή σε milliseconds αλλιώς δείχνει 0.

    Wait Type



    Δείχνει το event το οποίο περιμένει το process για να συνεχίσει.

    Wait Resource



    Δείχνει το resource το οποίο περιμένει το process να ελευθερώθεί για να συνεχίσει.

    Blocked By



    Δείχνει το SPID (Session ID) το οποίο έχει μπλοκάρει το process αυτό.

    Head Blocker



    Εαν η τιμή είναι 1 αυτό σημαίνει ότι το Session ID που φαίνεται στην Blocked By κολώνα είναι ο επικεφαλής στην αλυσίδα των μπλοκαρισμάτων.

    Memory Use (KB)



    Δείχνει το ποσό της μνήμης η οποία χρησιμοποιείται από το process αυτό.

    Host



    Δείχνει το computer name από όπου έχει γίνει το connection αυτό.

    Workload Group



    Δείχνει το όνομα του Resource Governor workload group για το query αυτό.
    Resource Waits


    Η λίστα αυτή δείχνει πληροφορίες για την αναμονή στα resources και περιλαμβάνει τις εξής πληροφορίες:
    Wait Category

    Είναι οι κατηγορίες που συγκεντρώνονται για τα wait type statistics. Κάτι αντίστοιχο μπορώ να πάρω με την dmv sys.dm_os_wait_stats.
    Wait Time (ms/sec)
    Ο χρόνος wait time σε ms/sec για όλα τα task τα οποία περιμένουν κάποιο ή κάποια resources στην συγκεκριμένη κατηγορία από το τελευταίο update interval.
    Recent Wait Time (ms/sec)
    O σταθμικός μέσος του wait time ms/sec για όλα τα task τα οποία περιμένουν ένα ή περισσότερα resources στην κατηγορία από το τελευταίο update interval.
    Average Waiter Count
    Ο αριθμός των tasks που περιμένουν για κάποιο ή κάποια resources στην συγκεριμένη κατηγορία σε μια δεδομένη στιγμή.
    Cumulative Wait Time (sec)
    Ο συνολικός χρόνος που τα tasks πρέπει να περιμένουν για ένα ή περισσότερα resources στην κατηγορία από τοτε που ξεκίνησε ο SQL Server ή από τότε που εκτελέσθηκε τελευταία φορά ή DBCC SQLPERF.

    Data File I/O


    Η λίστα αυτή δείχνει πληροφορίες για τα database files των databases που υπάρχουν στον SQL Server, και περιέχει τις εξής πληροφορίες:
    Database

    Το όνομα της βάσης. File Name

    Το όνομα (φυσικό) του αρχειου της βάσης. MB/sec Read

    Το τελευταίο read activity, σε megabytes ανά second, για το database file. MB/sec Written

    Το τελευταίο write activity, σε megabytes ανά second, για το database file. Response Time (ms)

    Ο Μ.Ο του response time, σε milliseconds, για το τελευταίο read-and-write activity στο database file.
    Recent Expensive Queries


    Η λίστα αυτή δείχνει πληροφορίες για τα πιό ακριβά σε resources queries τα οποία έχουν τρέξει στον SQL Server τα τελευταία 30 sec.
    H πληροφορία βγαίνει από την ένωση των dmv sys.dm_exec_requests και sys.dm_exec_query_stats και περιλαμβάνει queries τα οποία είναι σε εξέλιξη αλλά και αυτά τα όποία έχουν τελειώσει μέσα στην χρονική περίοδο των 30 sec, και περιλαμβάνει τις εξης πληροφορίες:
    Query

    Το query statement το οποίο γίνεται monitor.
    Executions/min

    Τα executions ανα λεπτό για το query.
    CPU (ms/sec)

    Η χρήση της CPU από το query
    Physical Reads/sec

    Η χρήση ανα second των physical reads από το query.
    Logical Writes/sec

    Η χρήση ανά second των logical writes από το query.
    Logical Reads/sec

    Η χρήση ανά second των logical reads από το query.
    Average Duration (ms)

    Η μέση διάρκεια εκτέλεσης του query σε milliseconds.
    Plan Count

    O αριθμός των cached query plans για αυτό το query. Ένας μεγάλος αριθμός δείχνει ότι χρειάζεται να στρέψουμε την προσοχή μας στο query αυτό.
  23. antonch
    Επιτέλους η στιγμή την οποία περίμενα εδώ και 1 χρόνο έφτασε.
    Μπορώ να σπάσω την σιωπή μου και να ανακοινώσω ότι πλέον είναι διαθέσιμη σε όλους η νέα έκδοση του SQL Server την οποία μπορείτε να βρείτε στο παρακάτω link
    http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9
    Πολλά έχουν αλλάξει, ακόμα περισσότερα έχουν προσθεθεί. Για όλα αυτά όμως θα μου δωθεί η ευκαιρία να σας μιλήσω σε posts που θα ακολουθήσουν.
  24. antonch
    Έχοντας πλέον επιστρέψει από ένα εξαιρετικό MVP Summit αυτό του 2012 θα ήθελα να μοιραστώ μαζί σας την εμπειρία μου αυτή.
    Ξεκινώντας την Καθαρά Δευτέρα για το ταξίδι αυτό και έχοντας τις εμπειρίες μου από το προηγούμενο summit που είχα παρακολουθήσει το 2010 γνώριζα καλά τι με περιμένει. Αλλά αυτό το summit ήταν πραγματικό εξαιρετικό ιδιαίτερα για τους MVPs του SQL Server. Ήταν πολύ παραπάνω από τις προσδοκίες μου και όχι μόνο τις δικιές μου αλλά όλων SQL Server MVPs. Ενδεικτικά θα πω ότι ίσως για πρώτη φορά σηκωθήκαμε όλοι μας όρθιοι και για αρκετά λεπτά χειροκροτήσουμε την ομάδα που είχε έρθει από το product group για να μας ενημερώσει. Δυστυχώς όμως όλα αυτά είναι κάτω από αυστηρό NDA και δεν μπορώ να μοιραστώ ακόμα τίποτα μαζί σας. Μόλις όμως αρθεί αυτό θα έχω να σας πω πολλά.
    Το ημερήσιο πρόγραμμα ήταν αρκετά γεμάτο εγερτήριο στις 6:00 πρωινό μέχρι τις 8:00 και από εκεί και μετά συνέχεια sessions μέχρι τις 19:00 (το δικό μου PG είχε πολλά περισσότερα να μας πει από κάποια άλλα που τελείωναν στις 17:00).
    Οι πρώτες δύο μέρες ήταν ε κ π λ η τ ι κ έ ς. Τα παλικάρια έχουν ζωγραφίσει. Αυτό και μόνο αυτό θα πω γιατί αν θα πω έστω και μια κουβέντα ακόμα κινδυνεύω να παραβιάσω το NDA.
    SQL Server 2012 και ξερό ψωμί και άσε τον Κλαδάκη να λέει ότι θέλει
    Οι επόμενες δύο μέρες είχαν αρκετά sessions όπου το PG ζητούσε την γνώμη μας. Στην ουσία είχαν ερωτηματολόγια που συμπληρώναμε για αυτά που μας ρωτούσαν (είπαμε υπάρχει NDA δεν μπορώ να σας πω) και αφού επιτόπου έβγαζαν το αποτέλεσμα ξεκινούσε μια ζωηρή συζήτηση μεταξύ μας. Το αποτέλεσμα και το feedback που ήταν αμφίδρομο ήταν κάτι παραπάνω από εξαιρετικό.
    Πέρα όμως από αυτά μου δόθηκε η ευκαιρία να μιλήσω με αρκετούς από το PG. Ιδιαίτερη μνεία θα κάνω στην συζήτηση που είχα κατά την διάρκεια του PG Dinner με το Eric Hanson Principal Program Manager Lead, Query Processing and Storage at Microsoft SQL Server. Είχαμε μια ενδιαφέρουσα συζήτηση για τους columnstore indexes, DW και άλλα όμορφα πράγματα.
    Εκτός όμως από τους ανθρώπους του PG είχα αρκετά ενδιαφέρουσες συζητήσεις και με άλλους MVP μια εμπειρία που σε κάνει να νιώθεις ότι κάτι σκαμπάζεις και εσύ καθώς δεν είσαι πλέον στην Ελλάδα που κάποιοι τα ξέρουν όλα και εσύ είσαι ένα απλό σκουπίδι ή ακόμα χειρότερα να λες κάτι και να προσπαθούν να σε υποβαθμίσουν γιατί λέει αυτά δεν ισχύουν στην Ελλάδα. Δυστυχώς ακόμα είμαστε στην εποχή των δεινοσαύρων και πρέπει να το αλλάξουμε γρήγορα αυτό. Εμένα πάντως αυτό μου έκανε αρκετά καλό καθώς είχα τη δυνατότητα να εμπιστευτώ ξανά τις δυνατότητες μου. Ναι το λέω με πίκρα αυτό…
    Με το φαγητό είχα ένα θέμα σε αυτό το summit καθώς είχε τα περισσότερα γεύματα με σολομό. Αν και μου αρέσουν τα ψάρια δεν είμαι ιδιαίτερα φίλος με το ψάρι αυτό. Αλλά και ο τρόπος που το μαγειρεύουν είναι κάπως πέρα από τα γούστα μου. Αλλά στην Αμερική δεν πρόκειται να πεινάσεις. Με το Hyper Vaggelis είχαμε μερικές αρκετές συνεδρίες με rib eye steaks, επισκέψεις στο Cheesecake Factory και άλλους όμοιους οργανισμούς λύτρωσης της πείνας.
    Στο πάρτι που έγινε την προτελευταία μέρα το κέφι ήταν κάτι άλλο. To karaoke που ακολούθησε όλα τα λεφτά. Ο χώρος που διοργανώθηκε ήταν το CenturyLink Field το γήπεδο στο οποίο παίζουν οι Seattle Seahawks. Ένα γήπεδο εξαιρετικής ομορφίας και λειτουργικότητας. Εμείς μόνο το ΟΑΚΑ και το Καραϊσκάκη
    To φαγητό και η μπύρα έρεαν εν αφθονία. Εκεί με τον Hyper Vaggelis και το Cloud boy περάσαμε απίστευτα. Ο Span δυστυχώς δεν μπορούσε να έρθει καθώς έπρεπε με το χάραμα να ταξιδέψει για NY.
    Έχοντας πλέον επιστρέψει πίσω κρατώ όλα αυτά για να αντλήσω δύναμη για την συνέχεια και ελπίζω να είμαι καλά και να μπορώ του χρόνου να ξαναπάω.
    /*antonch*/
×
×
  • Create New...