Jump to content

antonch

Administrators
  • Posts

    1030
  • Joined

  • Last visited

  • Days Won

    7

Blog Entries posted by antonch

  1. antonch
    Πρόσφατα έπεσα μούρη με μούρη σε μια παρουσίαση του Kevin Cox που είχε το παραπάνω θέμα. Επειδή είναι αρκετά ενδιαφέρουσα και ρίχνει αρκετούς μύθους αποφάσισα να την μοιραστώ μαζί σας.
    Ας ξεκινήσουμε με μερικά στατιστικά
    Category Metric Largest single database
    70 ΤΒ Largest table
    20 ΤΒ Biggest total data 1 application
    88 PB Highest database transactions per second 1 db (from Perfmon)
    130.000 Fastest I/O subsystem in production (SQLIO 64k buffer)
    18 GB/sec Fastest “real time” cube
    5 sec latency data load for 1TB
    20 minutes Largest cube
    12 TB Ας προχωρήσουμε στα πιο ειδικά
    OLTP Systems
    MySpace
    500+ SQL Servers, adding new ones every week Total data managed > 1 PB Data Dependent Routing, Distributed Partitioned Views, Replication, SODA Currently moving to Windows 2008 / SQL 2008 Data Dependent Routing, Distributed Partitioned Views, Replication, Caching Tier, Service Broker 500,000 Users: A Simple Architecture Stumbles (two Web servers talking to a single database server – 3 database servers (1 write, 2 read)) 1 Million Users: Vertical Partitioning Solves Scalability Woes (separate databases for parts of the Web site that served different functions) 3 Million Users: Scale-Out Wins Over Scale-Up (cost for scale-up too high), SODA 9 Million Users: Site Migrates to ASP.NET, Adds Caching Tier, Data Dependent Routing 26 Million Users: MySpace Embraces 64-Bit Technology, SQL Server 2008, Service Broker High Availability Windows Clusters 7+1, moving to 10+1 Unattended patching via custom Powershell scripts and management control screen Extensive testing before patching Continually improving operations process 3,000 – 7,000 connections average 2 data centers Doing SAN snapshots between sites In case of loss of one site, can bring up other site to take over within a few hours. Great article on architecture changes as they grew: http://www.baselinemag.com/article2/0,1540,2082921,00.asp Bwin.com
    Online gaming applications - Europe‘s largest betting line-up Sports Poker Casino Skill Games 90 different sports covered in 22 languages > 12,000 different bets offered per day > 3 million individual and combination bets placed every day Bwin.com sponsors top world soccer teams Real Madrid AC Milan FC Bayern Munich Key Technologies Running on SQL Server 2008 & Windows 2008 Enterprise Windows Communication Foundation Synchronous database mirroring between two centers 12 km apart Added 1 ms delay on transaction 99.99x% availability @ 24 x 7 since migrating to SQL from Oracle. 100.00% uptime in 2008 and 2009 (since moving to SQL 2008 and Windows 2008) Zero data loss (financial transactions are involved) Replication and Log shipping for most databases DB Mirroring for betting data base. Full suite of SQL products - IS, AS and RS ASP.NET for applicatio Some numbers Peak financial transactions 6000 per second Peak db transactions 30,000 per second Databases 800+ Instances 100+ Largest table 2 billion rows Total data in SQL Server 100+ TB Backup of 2 TB over network under 1 hr Largest machines 64 core 512 GB IA2 HP 6 x 32 core IA2 400% boost in performance on 128 cores 256GB RAM on IA64 using SQL 2008 R2 More info http://sqlcat.com/whitepapers/archive/2009/08/13/a-technical-case-study-fast-and-reliable-backup-and-restore-of-a-vldb-over-the-network.aspx http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000001470 Retail Application
    1,200 stores SQL Standard 10 GB average 15,000 cash registers SQL Express 10 MB database average 1 Corporate Server SQL Enterprise Windows Cluster + DB Mirroring AS, IS, RS 12+ TB database, 1.5 TB cube. Merge replication for products & pricing Service Broker for all transactions One of the largest Service Broker and replication projects in the world 2 Million SKUs (products) 25 Million Accounts 10 million transactions / day SQL Server, AS, IS, RS Windows Cluster, DB Mirroring, Log Shipping

    DATA WAREHOUSEs

    Pan Starrs Project
    Largest Astronomy project in history 4 telescopes capturing 1.5 giga pixel images 100TB on single instance (5 db x 20TB) Total data managed > 1PB 5+TB added per day HA/DR Relying on backups of the input files for now Telecom
    CDR Analytics 70TB Relational 4TB largest cube 100+ concurrent queries Itanium 64 core with storage system rated over 20GB/sec throughput Loading 1TB in Processing 1m rec/sec in AS cubes Hilton Hotels
    Room forecasting system Full suite of SQL products (SQL, AS, IS, RS) Scale out AS and RS Load Balanced Analysis Services reader machines 40 to 50 concurrent users per RS server Complex queries Large data sets returned to many clients IBM xSeries and IBM Blade Center servers Case study: http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=49192 Stein Mart
    First Fast Track case study Saved $50,000 / month after AS/400 migration Faster results – 3 hours of processing instead of 14 hours Less people to maintain Users love the new tools! 4 TB data warehouse http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000007013
  2. antonch
    Αφορμή για αυτό το post είναι ένα ερώτημα από ένα φίλο της κοινότητα μας (autoexec.gr). Είναι για τον SQL Server 2005 αλλά μπορείτε να το εφαρμόσετε και στις επόμενες εκδόσεις
    Για να εγκαταστήσουμε το database mail θα πρέπει να ακολουθήσουμε τα παρακάτω βήματα. Μια βασική προυπόθεση είναι να έχουμε ένα smtp server με ένα mail account.
    Ανοίγουμε το SSMS και πάμε

    δεξί κλικ Configure Database Mail

    όπου ο Database mail configuration wizard ξεκινάει
     



     
    Στο ερώτημα αυτό απαντάμε Yes στην ουσία ενεργοποιεί το database mail στον SQL Server. Aν πούμε όχι μετά τα πρέπει να πάμε στο Surface Area Configuration για να το ενεργοποίησουμε

    Δίνουμε ένα αναγνωριστικό στο Profile name και πατάμε Add

     
    Συμπληρώνουμε τα στοιχεία που ζητάει η συγκέκριμένη φόρμα με τα στοιχεία του mail account και του smtp server που αυτό υπάρχει, και πατάμε ΟΚ. Θα γυρίσουμε στην προηγούμενη φόρμα και η εικόνα μας θα είναι κάπως έτσι

    Πατάμε Next κάνουμε τα παρακάτω ανάλογα το πως θέλουμε να είναι το profile μας. Εγώ εδώ ορίζω και τα δύο.


    και πατάμε Next

     
     
     
    Πατάμε Next

    Πατάμε Finish

    Πατάμε Close

    και για να ελέγουμε ότι όλα είναι εντάξει επιλέγουμε Send Test E-Mail

    Αφού βεβαιώθουμε ότι όλα είναι ΟΚ πατάμε ΟΚ

    Έαν στον διάλογο που μας ρωτούσε για το αν θέλουμε να ενεργοποιήσουμε το database mail δεν είχαμε απαντήσει καταφατικά θα πρέπει να πάμε στα configuratio tools του SQL Server και να ανοίξουμε το SQL Server Surface Area Configuration Tool, επιλέγοντας το Surface Area Configuration for Features

    και έπειτα πάμε database mail και κάνουμε κλικ στο Enable Database Mail Stored procedured όπως στη παρακάτω εικόνα

    Εάν τώρα θέλουμε μέσα απο τον SQL Server να στέλνουμε mails τότε θα πρέπει αυτό να γίνει με την χρήση της stored procedure sp_send_dbmail. Ένα παράδειγμα έχω στην παρακάτω εικόνα το οποιο εκτελεί ένα query και στέλνει τα αποτελέσματα στους παραλήπτες που έχουμε ορίσει. Αυτοί μπορεί να είναι πολλοί απλά θα πρέπει στην αντίστοιχη παράμετρο να βάλω τα emails τους χωριζόμενα με semicolon (. Για περισσότερες πληροφορίες για την sp αυτή στα books online.
    Ανοίγουμε ένα νέο query window και εκτελούμε την stored procedure sp_send

     
     
     
     
     
     
     
     
     
    Το αποτέλεσμα θα είναι ο παραλήπτης να δει στο mail box του την παρακάτω εικόνα

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

  4. antonch
    Αρκέτες φορές έχω δεχθεί ερωτήσεις σχετικά με τα database Schemas. Οι πιο δημοφιλείς ερωτήσεις είναι;
    Τι είναι τα Schemas; Ποιά είναι η πρακτική αξία τους; Γιατί τα έβαλαν στον SQL Server τόσο αργά; η Oracle τα έχει χρόνια τώρα! Θα ξεκινήσω με την τελευταία.
    Μπορεί τα schemas να εμφανίστηκαν από τον SQL Server 2005 αλλά αυτό δεν σημαίνει ότι δεν υπήρχαν και πριν. Υπήρχαν αλλά δεν ήταν “ορατά”. Στην πραγματικότητα με το που έφτιαχνες έναν user, αυτόματα δημιουργόνταν το αντίστοιχο schema.
    Στην Oracle υπήρχαν, αλλά ο σκοπός τους ήταν καλύψουν μια ανάγκη που βασικά δεν την είχαμε, ούτε την έχουμε, στον SQL Server. Όπως θα γνωρίζεται κάθε database στην Oracle είναι ένα διαφορετικό service. Έτσι εάν θέλω να έχω μια βάση για το ERP μου, μια βάση για το Web Site μου, και μία βάση για κάτι άλλο, θα πρέπει να έχω τρία διαφορετικά services να τρέχουν. Στο SQL Server δεν το έχουμε ανάγκη αυτό, διότι με ένα service μπορώ να έχω 32767 διαφορετικές βάσεις. Με την χρήση λοιπόν των schemas στην Oracle έλυνα το παραπάνω θέμα. Έφτιαχνα μια βάση στην οποία έφτιαχνα τα αντίστοιχα schemas μέσα σε αυτή ώστε να καλύψω τις τρεις διαφορετικές δομές που είχα σε κάθε βάση.
    Η εμφάνιση των Schemas στον SQL Server είναι για να λύσουν άλλα θέματα. Αλλά ας πάρουμε τα πράγματα από την αρχή.
    Ένα Schema στον SQL Server δεν είναι τίποτα άλλο από ένα named container για τα database objects (tables,views,stored procedures κλπ).
    Βασικός λόγος που έκαναν την εμφάνιση τους τα Schemas από τον SQL Server 2005 και μετά ήταν για να λύσουν ένα βασικό administration πρόβλημα.
    Έστω λοιπόν ότι έχω τον χρήστη Nasos. Δεν είναι administrator, δεν είναι database owner, έχει όμως δικαιώμα να φτιάχνει tables. Έστω ότι αυτός έφτιαξε τους πίνακες Ν1 και Ν2. Άρα έχω dbname.Nasos.N1 και dbname.Nasos.N2.
    Εάν τώρα έσβηνα τον user Nasos είτε κατά λάθος είτε διότι έπρεπε, επειδή ο Νάσος έφυγε από την εταιρεία, στις προηγούμενες εκδόσεις τα object αυτά έμεναν ορφανά, το αποτέλεσμα ήταν ότι είτε δεν λειτουργούσαν stored procedures που πατούσαν πάνω σε αυτά, είτε δεν μπορούσα να προσπελάσω απευθείας, και έπρεπε να μπω στην διαδικασία να πάρω το ownership με ότι αυτό συνεπάγεται.
    Από τον SQL Server 2005 και μετά αυτό δεν συμβαίνει διότι πολύ απλά οι πίνακες αυτοί δεν ανήκουν στον user αλλά στο Schema.
    Αυτός ήταν και ο βασικός λόγος που σαν DBA δεν έδινα δικαιώματα στο user να φτιάχνει δικά του objects ή αν πραγματικά ήθελα να κάνω κάτι τέτοιο έβαζα όλους τους χρήστες με ένα user name.
    Κάθε user ανήκει σε κάποιο Schema. Ακόμα και αν δεν πω κατά την δημιουργία του user στην βάση σε ποιο Schema ανήκει, by default αυτός θα ανήκει στο Schema dbo.
    Επίσης όταν δημιουργώ ένα object πχ έναν πίνακα και δεν λέω κατά την στιγμή της δημιουργίας του σε ποιο Schema αυτό θα ανήκει, by default αυτό πάει στο Schema στο οποίο ανήκει ο user που το δημιούργησε.
    Κάθε Schema έρχεται και κάθεται μεταξύ του database level του object level στην ιεραρχία του SQL Server. Αυτό σημαίνει ότι μπορώ να έχω περισσότερες δυνατότητες στον ορισμό του security πάνω στα objects της βάσης μου. Κάποια στιγμή θα σας πω για το security στον SQL Server και θα σας το εξηγήσω καλύτερα.
    Κάθε Schema επίσης έχει συγκεκριμένο owner. O οποίος μπορεί να είναι είτε συγκεκριμένος user είτε database role είτε application role.
    To Schema πλέον αντικαθιστά τον owner στο multi-part object name. Αυτό σημαίνει ότι στο παράδειγμα SELECT * FROM Northwind.antonis.Customers μέχρι την έλευση του SQL Server 2005 λέγαμε ότι ο antonis είναι ο χρήστης τώρα δεν είναι ο χρήστης αλλά το schema.
    Μερικές χρήσιμες συμβουλές για τα Schemas
    Ομαδοποίηση αντικειμένων σύμφωνα με το σκοπό τους πχ schema το οποίο περιέχει όλα τα αντικείμενα που αφορούν μια συγκεκριμένη ενότητα (π.χ web site). Διαχείριση του security σε επίπεδο βάσης με την χρήση των Schemas. Δηλαδή αντί να δίνω δικαιώματα σε επίπεδο χρήστη δίνω σε επίπεδο schema και ο χρήστης κληρονομεί αυτά μιας και ανήκει στο schema αυτό. Καλό είναι να μην είναι όλος ο κόσμος Schema owner. Ένας χρήστης είναι το ιδανικό. Επισης καλό θα είναι να μην είναι ο dbo ο owner για τα schemas τα οποία έχω μέσα στην βάση μου. Αυτά τα λίγα για τα Schemas και την πρακτική τους αξία στον SQL Server. Ελπίζω να έδωσα απαντήσεις στα ερωτήματα σας.
  5. 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 τα προηγούμενα
  6. 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 και να βρίσκουμε τα τυχόν προβλήματα τους. Επίσης θα μας βοηθήσει αυτή η γνώση στον καλύτερο σχεδιασμό των βάσεων μας, με αποτέλεσμα να έχουμε καλύτερη ποιότητα εφαρμογών.
  7. antonch
    Πριν από μερικές μέρες μου ήρθε ένα ερώτημα από ένα φίλο για το τι είναι το C2 Level Auditing στον SQL Server. Δράττω την ευκαιρία αυτή για να το εξηγήσω σε όλους όσους ενδιαφέρονται να παρακολουθήσουν στενότερα το περιβάλλον τους στον SQL Server.
    Εδώ και πολλά χρόνια όπως ξέρουμε τεράστια ποσά έχουν δαπανηθεί στο να έχουμε ασφαλή συστήματα. Αυτό γίνεται με το να οροθετούνται συνεχώς νέα πρότυπα και standards. Οι λόγοι για κάτι τέτοιο είναι βέβαια προφανείς αλλά ποτέ κανείς δεν έπαθε τίποτα από την επανάληψη τους διότι όπως έλεγαν οι αρχαίοι (δυστυχώς μόνο αυτοί) πρόγονοι μας "Η επανάληψη είναι η μητέρα της μάθησης", έτσι θα τους επαναλάβω εν τάχει.
    · Να εντοπισθεί η κακομεταχείριση του συστήματος και να αποτραπεί η συνέχεια αυτής.
    · Να αποδοθούν οι συνέπειες σε αυτούς που είναι υπεύθυνοι για την κακομεταχείριση του συστήματος.
    · Να γίνουν οι ενέργειες που θα φέρουν το σύστημα στην προγενέστερη κατάσταση του, πριν δηλαδή από την υφιστάμενη κακομεταχείριση του.
    Τι είναι όμως το C2;
    Το Υπουργείο Άμυνας των ΗΠΑ έχει ορίσει μια σειρά από επίπεδα για το security level των υπολογιστικών συστημάτων τα οποία βασίζονται στις δυνατότητες τους αλλά και στο πως αυτά προσπελάζονται.
    Με βάση όλα αυτά από την έκδοση του SQL Server 2000 η Microsoft παρέχει την δυνατότητα να έχω C2 Level για το περιβάλλον του SQL Server. Εδώ θα πρέπει να πως ότι ο SQL Server είναι ήδη από τότε C2 Level certified (και μην με ρωτήσετε από πού, αυτό νομίζω ότι είναι προφανές). Για παράδειγμα θα πω ότι ο SQL Server ότι όλα τα δεδομένα τα οποία βγαίνουν από το C2 (files) βγαίνουν μόνο σε NTFS partitions.
    To C2 δημιουργεί auditing records για όλα τα server level events του SQL Server όπως shutdown. restart, successful & failed login attempts. Επίσης παρέχει την δυνατότητα να παρακολουθεί τα permissions σε database objects σε DDL, DCL, DML statements.
    Η πληροφορία που καταγράφεται περιέχει
    timestamp identifier για τον account το οποίο έκανε trigger το event target server name event type success or failure outcome application name server process ID database name Πώς ενεργοποιώ το C2 Auditing Level;
    Αυτό μπορώ να το κάνω με δύο τρόπους, ο πρώτος τρόπος είναι από το Server Properties windows (δεξί κλικ στο όνομα του server μέσα στο SSMS) όπως παρακάτω

    Ο δεύτερος τρόπος είναι με T-SQL commands όπως παρακάτω


    Code Snippet


    USE master GO sp_configure 'show advanced option', 1 GO RECONFIGURE GO sp_configure 'c2 audit mode',1 GO RECONFIGURE GO



    Σε κάθε περίπτωση απαιτείται restart του SQL Server για την ενεργοποίηση του!
    Από το σημείο αυτό και μετά στο data directory που έχουμε ορίσει για τον SQL Server Instance μας π.χ. C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA παράγονται αρχεία της μορφής audittraceΥΥΥΥΜΜDDHHMMSS.trc. Κάθε τέτοιο αρχείο μπορεί να φτάσει τα 200MB. Σε αυτή την περίπτωση δημιουργείται νέο αρχείο το οποίο περιέχει την συνέχεια. Επίσης θα πρέπει να τονίσω ότι στην περίπτωση που γεμίσει ο δίσκος που είναι τα C2 files τότε ο SQL Server σταματάει αυτόματα. Σε αυτή την περίπτωση θα πρέπει να ξεκινήσουμε το SQL Server service με το διακόπτη -f και μετά να ελευθερώσουμε χώρο στο δίσκο.
    Τα αρχεία αυτά μπορούμε να τα διαβάσουμε με δύο τρόπους. Ο ένας τρόπος είναι χρησιμοποιώντας τον SQL Server Profiler. Ο άλλος τρόπος είναι να τα δούμε σε μορφή πίνακα ώστε να τα κάνουμε manipulate με queries όπως παρακάτω


    Code Snippet


    SELECT *  FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default)



     
    Βέβαια έχω την δυνατότητα να δω μόνο αυτά που θέλω πχ θέλω μόνο τα failed logins π.χ


    Code Snippet


    SELECT *  FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default) WHERE TextData like '%Login failed%'



     
    Μερικές χρήσιμες πληροφορίες
    Υπάρχει όπως είναι κατανοητό κάποιο performance penalty, μιας και πρέπει να γράφονται πράγματα στο δίσκο. Σε αυτή την την περίπτωση καλό είναι να γράφονται σε ξεχωριστό φυσικό δίσκο (όχι partition). Στην περίπτωση που δεν μπορεί να γίνει καταγραφή των συμβάντων ο SQL Server δεν ξεκινάει. Στον SQL Server 2008 υπάρχει εναλλακτικός τρόπος για την καταγραφή των συμβάντων τόσο σε επίπεδο server όσο και σε επίπεδο database. (θα ασχοληθώ με αυτό σε άλλο post)
  8. antonch
    Τα πολλά λόγια είναι φτώχια δείτε το περιεχόμενο του και είμαι σίγουρος ότι θα τα κατεβάσετε
    Contents
    The training kit includes the following content:
    Presentations (32) SQL Server 2008 R2 Update for Developers Overview Part I - SQL Server 2008 Review SQL Server 2008 R2 Update for Developers Overview Part II - Introducing SQL Server 2008 R2 SQL Server 2008: Filestream SQL Server 2008: Spatial SQL Server 2008: T-SQL SQL Server 2008: Date and Time Types SQL Server 2008: SQLCLR SQL Server 2008: Reporting Services SQL Server 2008 R2: Introducing Application and Multi-Server Management with SQL Server 2008 R2 and Visual Studio 2010 SQL Server 2008 R2: Working with Data Tier Application Projects in Visual Studio 2010 SQL Server 2008 R2: Managing Change in Data Tier Application Projects with Visual Studio 2010 and SQL Server 2008 R2 SQL Server 2008 R2: Introducing SQL Server 2008 R2 StreamInsight SQL Server 2008 R2: Querying Events in SQL Server 2008 R2 StreamInsight SQL Server 2008 R2: Designing SQL Server 2008 R2 StreamInsight Event Models and Adapters SQL Server 2008 R2: Installing, Deploying and Maintaining the SQL Server 2008 R2 StreamInsight Runtime Engine SQL Server 2008 R2: What's New in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Developing Reports with the New Features of SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Visualizing Data with Maps in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Working with Shared Components in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Working with ATOM Data Feeds in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Embedded Reporting in Applications with SQL Server 2008 R2 Reporting Services and Visual Studio 2010 SQL Server 2008 R2: Developing with the Microsoft Chart Controls in Visual Studio 2010 SQL Server 2008 R2: What's New in the Excel 2010 Client SQL Server 2008 R2: Loading and Preparing Data for Analysis in SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Creating Reports with SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Defining DAX Calculations with PowerPivot for Excel 2010 SQL Server 2008 R2: Introducing SharePoint 2010 Insights SQL Server 2008 R2: What's New in SharePoint 2010 Excel Services SQL Server 2008 R2: What's New in SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Developing KPI's and Scorecards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Developing Reports and Dashboards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Managing PowerPivot for Excel 2010 Solutions in SharePoint 2010 Demos (39) SQL Server 2008: AdventureWorks Racing All-Up Demo SQL Server 2008: Spatial Demo SQL Server 2008: Spatial Types SQL Server 2008: Introduction to Filestream SQL Server 2008: SQL CLR Nullable Types SQL Server 2008: Programming with Filestream SQL Server 2008: Reporting Services Web Application Integration SQL Server 2008: T-SQL Date and Time Support SQL Server 2008: T-SQL Table-Valued Parameters SQL Server 2008: T-SQL Row Constructors SQL Server 2008: T-SQL Grouping Sets SQL Server 2008: T-SQL Merge SQL Server 2008 R2: Creating a Utility Control Point SQL Server 2008 R2: Enrolling a Managed Instance SQL Server 2008 R2: Creating Data-Tier Applications SQL Server 2008 R2: Data-Tier Application Deployment SQL Server 2008 R2: Managing Change in Data Tier Application Projects in Visual Studio 2010 SQL Server 2008 R2: Introducing SQL Server 2008 R2 StreamInsight SQL Server 2008 R2: Querying Events in SQL Server 2008 R2 StreamInsight SQL Server 2008 R2: Advanced SQL Server 2008 R2 StreamInsight Event Queries SQL Server 2008 R2: Working with SQL Server 2008 R2 StreamInsight CTI Events and Advance Time Settings SQL Server 2008 R2: Creating a SQL Server 2008 R2 StreamInsight Input Adpater SQL Server 2008 R2: Choosing a SQL Server 2008 R2 StreamInsight Development Model SQL Server 2008 R2: Using the SQL Server 2008 R2 StreamInsight Event Flow Debugger SQL Server 2008 R2: Using the New Report Design Features in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Visualizing Data with Maps in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Using Shared Component Libraries in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Using SQL Server 2008 R2 Reporting Services Report Feeds SQL Server 2008 R2: Using the Visual Studio 2010 Report Viewer Control SQL Server 2008 R2: What's New in the Excel 2010 Client SQL Server 2008 R2: Loading and Preparing Data for Analysis in SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Creating Reports with SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Defining DAX Calculations with SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Introducing SharePoint 2010 Insights SQL Server 2008 R2: What's New in SharePoint 2010 Excel Services SQL Server 2008 R2: What's New in SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Developing KPI's and Scorecards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Developing Reports and Dashboards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Managing Excel 2010 PowerPivot Solutions in SharePoint 2010 Hands-on Labs (24) SQL Server 2008: How to build your first Web Application with SQL Server and ASP.NET SQL Server 2008: Using Spatial Data in TSQL SQL Server 2008: Using Spatial Data in Managed Code SQL Server 2008: Using SQL CLR in SQL Server 2008 SQL Server 2008 R2: Introduction to PowerPivot SQL Server 2008 R2: Introduction to Reporting Services Improvements SQL Server 2008 R2: Introduction to StreamInsight and Complex Event Processing SQL Server 2008 R2: Introduction to Data-tier Applications SQL Server 2008 R2: Creating and Deploying a Data-Tier Application SQL Server 2008 R2: Managing Change in Data-Tier Application Projects in Visual Studio 2010 SQL Server 2008 R2: Querying Events in SQL Server 2008 R2 StreamInsight using LINQ SQL Server 2008 R2: Working with the SQL Server 2008 R2 StreamInsight Samples SQL Server 2008 R2: Working with the SQL Server 2008 R2 StreamInsight Event Flow Debugger SQL Server 2008 R2: Visualizing Data with Maps in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Developing and Consuming Report Libraries in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Working with ATOM Data Feeds in SQL Server 2008 R2 Reporting Services SQL Server 2008 R2: Embedded Reporting in Applications with SQL Server 2008 R2 Reporting Services and Visual Studio 2010 SQL Server 2008 R2: Developing with the Microsoft Chart Controls SQL Server 2008 R2: Loading and Preparing Data for Analysis in SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Creating Reports with SQL Server PowerPivot for Excel 2010 SQL Server 2008 R2: Defining DAX Calculations with Excel 2010 PowerPivot SQL Server 2008 R2: Developing KPI's and Scorecards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Developing Reports and Dashboards with SharePoint 2010 PerformancePoint Services SQL Server 2008 R2: Managing Excel 2010 PowerPivot Solutions in SharePoint 2010 Videos (55) SQL Server 2008 R2 Update for Developers Overview Part I - SQL Server 2008 Review SQL Server 2008 R2 Update for Developers Overview Part II - Introducing SQL Server 2008 R2 Introducing SQL Server 2008 R2 StreamInsight Demo: Real Time Analytics with SQL Server 2008 R2 StreamInsight Introducing SQL Server 2008 R2 Application and Multi-Server Management Introducing SQL Server 2008 R2 Reporting Services Introduction To SQL Server 2008 R2 StreamInsight and Complex Event Processing Introducing PowerPivot for Excel 2010 and SharePoint 2010 Presentation: Introducing Application and Multi-Server Management with SQL Server 2008 R2 and Visual Studio 2010 Demo: Creating a Utility Control Point Demo: Enrolling a Managed Instance Presentation: Working with Data Tier Application Projects in Visual Studio 2010 Demo: Creating Data-Tier Applications Demo: Data-Tier Application Deployment Presentation: Managing Change in Data Tier Application Projects with Visual Studio 2010 and SQL Server 2008 R2 (Part I) Presentation: Managing Change in Data Tier Application Projects with Visual Studio 2010 and SQL Server 2008 R2 (Part II) Demo: Managing Change in Data Tier Application Projects in Visual Studio 2010 Presentation: Introducing SQL Server 2008 R2 StreamInsight (Part I) Presentation: Introducing SQL Server 2008 R2 StreamInsight (Part II) Demo: Introducing SQL Server 2008 R2 StreamInsight Presentation: Querying Events in SQL Server 2008 R2 StreamInsight (Part I) Presentation: Querying Events in SQL Server 2008 R2 StreamInsight (Part II) Demo: Querying SQL Server 2008 R2 StreamInsight Using LINQ Presentation: Querying Events in SQL Server 2008 R2 StreamInsight (Part III) Demo: Advanced SQL Server 2008 R2 StreamInsight Event Queries Presentation: Designing SQL Server 2008 R2 StreamInsight Event Models and Adapters (Part I) Presentation: Designing SQL Server 2008 R2 StreamInsight Event Models and Adapters (Part II) Demo: Working with SQL Server 2008 R2 StreamInsight CTI Events and Advance Time Settings Presentation: Designing SQL Server 2008 R2 StreamInsight Event Models and Adapters (Part III) Demo: Creating a SQL Server 2008 R2 StreamInsight Input Adapter Presentation: Installing, Deploying and Maintaining the SQL Server 2008 R2 StreamInsight Runtime Engine (Part I) Presentation: Installing, Deploying and Maintaining the SQL Server 2008 R2 StreamInsight Runtime Engine (Part II) Demo: Choosing a SQL Server 2008 R2 StreamInsight Development Model Presentation: Installing, Deploying and Maintaining the SQL Server 2008 R2 StreamInsight Runtime Engine (Part III) Demo: Using the SQL Server 2008 R2 StreamInsight Event Flow Debugger resentation: What's New in SQL Server 2008 R2 Reporting Services Presentation: Developing Reports with the New Features of SQL Server 2008 R2 Reporting Services Demo: Using the New Report Design Features in SQL Server 2008 R2 Reporting Services Presentation: Visualizing Data with Maps in SQL Server 2008 R2 Reporting Services Demo: Visualizing Data with Maps in SQL Server 2008 R2 Reporting Services Presentation: Working with Shared Components in SQL Server 2008 R2 Reporting Services Demo: Using Shared Component Libraries in SQL Server 2008 R2 Reporting Services Presentation: Working with ATOM Data Feeds in SQL Server 2008 R2 Reporting Services Demo: Using SQL Server 2008 R2 Reporting Services Report Feeds Presentation: Embedded Reporting in Applications with SQL Server 2008 R2 Reporting Services and Visual Studio 2010 Demo: Using the Visual Studio 2010 Report Viewer Control Presentation: Developing with the Microsoft Chart Controls in Visual Studio 2010 Presentation: What's New in the Excel 2010 Client Demo: What's New in the Excel 2010 Client Presentation: Loading and Preparing Data for Analysis in SQL Server PowerPivot for Excel 2010 Demo: Loading and Preparing Data for Analysis in SQL Server PowerPivot for Excel 2010 Presentation: Creating Reports with SQL Server PowerPivot for Excel 2010 Demo: Creating Reports with SQL Server PowerPivot for Excel 2010 Presentation: Defining DAX Calculations with PowerPivot for Excel 2010 Demo: Defining DAX Calculations with SQL Server PowerPivot for Excel 2010 Presentation: Introducing SharePoint 2010 Insights Demo: Introducing SharePoint 2010 Insights Presentation: What's New in SharePoint 2010 Excel Services Demo: What's New in SharePoint 2010 Excel Services Presentation: What's New in SharePoint 2010 PerformancePoint Services Demo: What's New in SharePoint 2010 PerformancePoint Services Presentation: Developing KPI's and Scorecards with SharePoint 2010 PerformancePoint Services Demo: Developing KPI's and Scorecards with SharePoint 2010 PerformancePoint Services Presentation: Developing Reports and Dashboards with SharePoint 2010 PerformancePoint Services Demo: Developing Reports and Dashboards with SharePoint 2010 PerformancePoint Services Presentation: Managing Excel 2010 PowerPivot Solutions in SharePoint 2010 Demo: Managing Excel 2010 PowerPivot Solutions in SharePoint 2010 Λήψη του Training Kit
  9. antonch
    Σήμερα ένας αγαπητός φίλος και συνάδελφος μου έκανε μια ερώτηση. Η στιγμή που μου την έκανε ήταν δύσκολη και δεν είχα την άνεση να του την απαντήσω. Του υποσχέθηκα όμως ότι θα το κάνω. Έτσι αυτό το Post είναι αφιερωμένο εξαιρετικά στο φίλο και συνάδελφο του οποίου η ερώτηση ήταν

    "Αντώνη διαβάζω μέσα από το blog σου ότι το μέγιστο record length που μπορώ να έχω μέσα σε μια σελίδα και κατά συνέπεια μέσα σε κάθε πίνακα είναι 8060 bytes. Όμως αυτό δεν μου βγαίνει με τα μαθηματικά. Διότι όπως λες μια σελίδα είναι 8192 bytes από τα οποία αφαιρούμε 96 bytes σαν page header και υπάρχει και το page slot array(offset) στο οποίο φαίνεται η σειρά με την οποία έχουν μπει τα records στην σελίδα. Αν αφαιρέσω τα 96 bytes του header μου μένουν 8096 bytes μέχρι τα 8060 μου λείπουν 36 bytes. Πόσο τελικά είναι αυτό το page slot array (offset);"

    Λοιπόν έχουμε και λέμε ή λέμε και έχουμε:

    8060 bytes είναι το max record length αυτό είναι αδιαμφισβήτητο.

    8192 bytes είναι το μέγεθος της σελίδας και αυτό είναι αδιαμφισβήτητο.

    96 bytes είναι το μέγεθος του page header και αυτό είναι αδιαμφισβήτητο.

    Άρα έχω υπόλοιπο 8096 bytes.

    Οπότε 8096 - 8060 = 36 bytes που πρέπει να δούμε που πάνε.

    Για κάθε γραμμή έχω κάποια επιπλέον overheads

    14 bytes για την περίπτωση που έχω snapshot isolation level.

    2 bytes για το row status

    2 bytes στα οποία υπάρχει ο μέγεθος των fixed lenght fields

    2 bytes στα οποία υπάρχει ο αριθμός των πεδίων που υπάρχουν στην γραμμή.

    1 byte για τα NULL bitmaps

    2 bytes για τον αριθμό των variable lenght fields

    11 bytes για τον forward record pointer

    και

    2 bytes για το page slot array (offset)

    Άρα στο σύνολο έχω 36

    Οπότε 36 - 36 = 0 bytes

    Θυμάσε Νίκο μου όταν σου είπα δες πως αποθηκεύεται η γραμμή;
  10. antonch
    Αγαπητές φίλες και Αγαπητοί φίλοι.
    Ελάτε στις 14/5/2010 να πιούμε μια μπύρα και να σας δείξω τα νέα χαρακτηριστικά του SQL Server 2008 R2.
    Είναι Παρασκευή, είναι βραδάκι, στο χαλαρό και στο φιλικό θα τα πούμε όμορφα σαν μια καλή παρέα.
    Χωρίς powerpoints με πολλά demos…
    Σας περιμένω στο SQL Server booth.
    Φιλικά
    Αντώνης
  11. antonch
    Η άφιξη του είναι ποια γεγονός. Έτσι όπως κάνω πάντα φτιάχνω τα σχετικά βοηθήματα που θέλω να έχω σε πρώτη ζήτηση. Αφού το έφτιαξα για μένα γιατί να μην το έχετε και εσείς.

    Σας δίνω λοιπόν ένα poster με όλα τα features του SQL Server 2008 R2 ανά έκδοση ώστε να ξέρετε τι και που θα βρείτε αυτό που θέλετε.

    download it


     
  12. antonch
    Πριν μερικές μέρες σε μια συζήτηση που είχα με ένα καλό φίλο και συνάδελφο στο Messenger μου ανάφερε ότι στο www.tpc.org στα TPC-C results δεν υπάρχει καμία αναφορά στον SQL Server.
    Ομολογώ ότι αυτό με έκανε να ξαφνιαστώ, αν και βέβαια είχα πάνω από δύο χρόνια να μπω στο συγκεκριμένο site ώστε να δω τι ακριβώς γίνεται, μιας και πίστευα ότι θα υπήρχε εκεί ο SQL Server, μπορεί να μην ήταν στην πρώτη θέση αλλά τουλάχιστον μέσα στην πρώτη πεντάδα.
    Η έκπληξη μου όπως καταλαβαίνεται ήταν μεγάλη, πολλά άρχισαν να γυρίζουν στο μυαλό μου, αλλά σε καμία περίπτωση δεν θεώρησα ότι κάτι τέτοιο ανταποκρίνεται στην πραγματικότητα. Έτσι αποφάσισα να το διερευνήσω περισσότερο.
    Έπειτα από την έρευνα που έκανα βρήκα τελικά την απάντηση που έψαχνα και αυτή είναι ότι η Microsoft έχει αποσυρθεί από την διαδικασία του TPC-C και έχει μεταφερθεί στην διαδικασία TPC-E.
    Ο λόγος που το έκανε αυτό είναι γιατί η διαδικασία C είναι πλέον παρωχημένη, και δεν εστιάζει στον πραγματικό σημερινό κόσμο. Αυτό φυσικά δεν το λέω εγώ αλλά ούτε η Microsoft αλλά ο ίδιος ο οργανισμός TPC ο οποίος είναι ανεξάρτητος και φυσικά είναι και αυτός που θέτει τις προδιαγραφές.
    Μπορείτε να τις βρείτε όλες εδώ.
    Εγώ απλά θα δανειστώ από αυτές τον παρακάτω πίνακα ο οποίος δείχνει τις διαφορές μεταξύ των δύο μεθόδων
    Characteristic
    TPC-E
    TPC-C
    Tables 33
    9
    Columns
    188
    92
    Min Cols/Table
    2
    3
    Max Cols/Table
    24
    21
    Data Types Count
    Many
    4
    Data Types
    UID, CHAR, NUM, DATE, BOOL, LOB
    UID, CHAR, NUM, DATE
    Primary Keys
    33
    8
    Foreign Keys
    50
    9
    Tables w/Foreign Keys
    27
    7
    Check Constraints
    22
    0
    Referential Integrity
    Yes
    No
    Τα συμπεράσματα όπως πάντα δικά σας.
  13. antonch
    Είμαι φανατικός αναγνώστης του, έχω διαβάσει σχεδόν όλα του τα βιβλία όχι μια αλλά πολλές φορές, τα οποία κοσμούν την βιβλιοθήκη μου. Προσπαθώ να βρω τα άρθρα του όπου και αν γράφει. Δεν υπάρχει περίπτωση να μην τον αναφέρω μέσα στην τάξη όταν κάνω μάθημα. Αλλά ποτέ μέχρι σήμερα δεν τον είχα δει να κάνει μάθημα. Γενικά δεν κάνει πολλές εμφανίσεις που να μπορώ να βρώ στο web.
     
    Κυρίες και Κύριοι έχω την τιμή να σας παρουσιάσω στο παρακάτω video έναν εκ των σηματικότερων θεμελιωτών των RDBMS τον one and only
    C. J. Date
    Απολαύστε τον στο παρακάτω videο. Ίσως να μην έχει η παρουσίαση αυτή να σας μάθει κάτι που να μην γνωρίζετε, αλλά αξίζει να δείτε αυτόν τον μεγάλο επιστήμονα.
    (κάντε click στο παρακάτω image για να δείτε το video)

  14. antonch
    Source: SQL Server Magazine
    SQL Server 2008 R2 has been released to manufacturing. Microsoft’s Ted Kummert, the senior vice president for the Business Platform Division, and Tom Casey, the general manager for Microsoft Business Intelligence, were excited to point out that this release comes only 20 months after SQL Server 2008 was released. However, SQL Server 2008 R2 won’t be generally available until May 13 (you can download it May 3 if you’re a MSDN or TechNet subscriber). In the meantime, you can download an evaluation version from the SQL Server 2008 R2 launch site.
  15. antonch
    from msdn
    Accessing SQL Server Databases with PHP Auditing in SQL Server 2008 Best Practices for Data Warehousing with SQL Server 2008 Connectivity Options for Microsoft SQL Server 2008 Integration Services Consolidation Guidance for SQL Server Consolidation Using SQL Server 2008 Cryptography in SQL Server Data Access Tracing in SQL Server 2008 Database Encryption in SQL Server 2008 Enterprise Edition Embedding SQL Server 2008 Express in an Application Engine Separation of Duties for the Application Developer FILESTREAM Storage in SQL Server 2008 Geo-Replication Performance Gains with SQL Server 2008 on Windows Server 2008 High Availability with SQL Server 2008 How to Implement Kerberos Constrained Delegation with SQL Server 2008 Hub-And-Spoke: Building an EDW with SQL Server and Strategies of Implementation Improving Performance with SQL Server 2008 Indexed Views Installing SQL Server 2008 Express Guidance Introduction to Fast Track Data Warehouse Architectures Introduction to New Data Warehouse Scalability Features in SQL Server 2008 Introduction to New T-SQL Programmability Features in SQL Server 2008 Introduction to Spatial Coordinate Systems: Flat Maps for a Round Planet Migrating DTS Packages to Integration Services Migrating to SQL Server from Other Database Products Partitioned Table and Index Strategies Using SQL Server 2008 Plan Caching in SQL Server 2008 Remote BLOB Store Provider Library Implementation Specification Reporting Services SharePoint Integration Troubleshooting Resources for Upgrading to SQL Server 2008 Scaling Up Your Data Warehouse with SQL Server 2008 SQL Server Best Practices - Implementation of Database Object Schemas SQL Server RDL Specification SQL Server 2008 Full-Text Search: Internals and Enhancements Statistics Used by the Query Optimizer in Microsoft SQL Server 2008 Troubleshooting Performance Problems in SQL Server 2008 Using the Microsoft Connector for Oracle by Attunity with SQL Server 2008 Integration Services Using Microsoft Connector for Teradata by Attunity Using the Resource Governor Using SQL Server to Build a Hub-and-Spoke Enterprise Data Warehouse Architecture Using SQL Server 2008 Integration Services with SAP BI 7.0 Using SQL Server 2008 Reporting Services with the.NET Framework Data Provider for Teradata Using SQL Server 2008 Reporting Services with SAP NetWeaver Business Intelligence Using Star Join and Few-Outer-Row Optimizations to Improve Data Warehousing Queries We Loaded 1 Terabyte in 30 Minutes with SSIS, and So Can You
  16. antonch
    Ένα όνειρο αρκετών χρόνων αποκτά σάρκα και οστά. Φιλοδοξία μου είναι όταν σας το παρουσιάσω με περιεχόμενο να αποτελέσει μια σοβαρή πηγή γνώσης για τον SQL Server.
    Αυτό που μένει πλέον είναι να βρω το χρόνο και να στρωθώ στην δουλειά ώστε να γίνει παραγματικότητα το όνειρο μου, γιατί είναι ωραίο να έχεις όνειρα και να τα πραγματοποιείς.
  17. antonch
    This is copy-paste from the original article
    We’re thrilled to offer another free ebook: Own Your Future: Update Your Skills with Resources and Career Ideas from Microsoft, by Katherine Murray. The ebook contains eight chapters and an appendix describing how you can assess and build your technology-based job skills.
    To give you a sense of the ebook’s content, here is its Foreword, by Microsoft Learning’s Lutz Ziob:

    Foreword

    In the midst of a struggling economy, our fast-changing, knowledge-based economy has created unprecedented challenges for employers and workers alike. Employers increasingly need workers with a broad range of information technology (IT) skills. These skills will become even more important as we continue to retool major sectors of our economy, such as healthcare, transportation and energy. By 2014, more than three-quarters of all jobs in the United States will require some level of computing or technology skills, and the vast majority of newly created jobs will require post-secondary education or training. To meet this demand, students need a solid foundation in science, technology, engineering, math, and design, as well as in related disciplines such as computer science. And this means that workforce training systems need to be improved and expanded to meet the needs of all workers—the underemployed, the unemployed, and students who need better access to the requisite skills. Everyone entering or already in the workforce should have access to the resources they need to become lifelong learners who can adapt to an ever-changing workplace.
    Technology is only one piece of the puzzle, but it has a pivotal role to play in these efforts. It can offer students, workers, and employers the training tools they need, and it can help to quickly and efficiently expand access to educational resources. IT also helps people develop other essential 21st-century skills such as collaboration and teamwork, finding and interpreting information, and using data to aid in decision making.
    In this book, students will find a wealth of Microsoft resources they can
    use to identify the technology skills they need, and gather knowledge and experience to help them take charge of their careers. Here at Microsoft, we care about students’ career success and hope these resources will open doors to learning that will lead them to better opportunities and a deeper understanding of the way technology continues to change and improve the ways people work—both here in the U.S. and around the world.
    Lutz Ziob
    Microsoft Learning General Manager
    You can download the ebook in XPS format here and in PDF format here.
    We hope that you find this material useful. Please leave us a comment and let us know!
  18. antonch
    Πάντα ήθελα να τους συναντήσω από κοντά όλους μαζί και τελικά τα κατάφερα. Είναι φοβέρο συναίσθημα να είσαι ανάμεσα στους θρύλους του SQL Server. Μίλησα αρκετά μαζί τους και είχα την ευκαιρία να βγάλω και φωτογραφίες μαζί τους.

     
    Ανάμεσα στον Paul Nielsen και την Kalen Delaney. RESPECT!
  19. antonch
    Επειδή στο προηγούμενο μου post είχα βάλει για την MySQL τα αντίστοιχα εργαλεία. Θα ήταν μεγάλη μου παράλειψη να μην βάλω και για την Oracle, μιας και στις μέρες μας υπάρχουν αρκετοί που φεύγουν από Oracle και πάνε σε SQL Server. Έτσι λοιπόν για όποιο θέλει να φέρει μια Oracle database σε SQL Server 2005 είτε 2008 μπορεί να καταβάσει τα αντίστοιχα migration tools από τα παρακάτω links
    SQL Server Migration Assistant 2008 for Oracle V4.0 SQL Server Migration Assistant 2005 for Oracle V4.0
  20. antonch
    Στο 18ο event μας που είχα την ομιλία μου η συζήτηση μας έφερε να μιλήσουμε για το ότι ευτυχώς πλέον δεν υποστηρίζεται η χρήση της BACKUP LOG dbname> WITH TRUNCATE_ONLY.
    Ο φίλος μου, συναγωνιστής μου, Αθανάσιος Κλαδάκης είχε την εύλογη απορία γιατί έγινε αυτό. Είπαμε κάποια πράγματα αλλά επειδή ο χρόνος ήταν περιορισμένος διότι περίμεναν οι μπύρες και η πίτα-πίτσα δεν έμεινα ικανοποιημένος με την απάντηση που έδωσα. Έτσι επανέρχομαι στο θέμα.
    Ο Νάσος είπε ότι σε όσους πελάτες του βλέπει σε κάποια βάση ότι το Transaction Log (TL) έχει γίνει μεγάλο εκτελεί την εντολή αυτή και φέρνει τα πράγματα στα ίσια τους. Μέχρι εδώ σωστά. Όμως αυτό εγκυμονεί κινδύνους. Ο σημαντικότερος από αυτούς είναι ο παρακάτω.
    Έστω ότι έχω εγκαθιδρύσει μια διαδικασία backup στην βάση με την οποία παίρνω και TL Backup. πχ
    Στις 05:00 κάνω Full Backup (FB) και από τις 06:00 παίρνω TL backup.
    Κάποια στιγμή το μεσημέρι βλέπω το TL να είναι μεγάλο και σαν καλό παιδί αποφασίζω να το μικρύνω με την χρήση της παραπάνω εντολής. Όλα πάνε καλά και είμαι ευτυχισμένος. Αυτό ας υποθέσουμε ότι έγινε γύρω στις 12:30.
    Στις 17:30 για κάποιο λόγο σκάει η βάση και πρέπει να κάνω RESTORE. Σύμφωνα με αυτά που ξέρω θα πρέπει να κάνω RESTORE το FB των 05:00 WITH NORECOVERY και στη συνέχεια να κάνω RESTORE όλα τα TL backups με την σειρά που τα πήρα όλα WITH NORECOVERY εκτός του τελευταίου το οποίο είναι στις 17:00 (εκτός και αν έχω πάρει και tail log backup αμέσως μετά από την εμφάνιση του προβλήματος) το οποίο θα πρέπει να γίνει με RECOVERY.
    Όμως σιγά που θα γίνει αυτό που θέλω. Επειδή στις 12:30 έκανα το truncate στο log δεν μπορώ να συνεχίσω στο restore των logs από εκεί και πέρα διότι πολύ απλά δεν έχω τέτοια μιας και με την χρήση της εντολής που συζητάμε έχω καταφέρει να κάνω break το Log Sequence Number (LSN) πάνω στο οποίο βασίζεται η διαδικασία του TL backup.
    Αποτέλεσμα, πάω για κρύες μπύρες, διότι έχω χάσει τα περιεχόμενα του TL από το τελευταίο FB. (Ένα ρίγος περνάει αυτή τη στιγμή την πλάτη μου μόνο και που το σκέφτομαι)
    Αυτό που μέχρι την διακοπή της χρήσης της εντολής η Microsoft συνιστούσε ήταν αμέσως μετά την ολοκλήρωση της εντολής να παίρνουμε FULL BACKUP ώστε τα TL backups να μην σκάνε.
    Σήμερα (SQL Server 2005, 2008, 2008 R2) με την κατάργηση της εντολής αν θέλουμε να κάνουμε αυτό που θέλει να κάνει ο Νάσος σύμφωνα πάντα με την Microsoft θα πρέπει να γυρίσουμε την βάση σε SIMPLE RECOVERY MODEL ώστε να γίνει truncate το log και όταν τελειώσει αυτό να την επαναφέρουμε σε FULL RECOVERY MODEL.
    Ελπίζω να έδωσα τώρα μια πιο κατατοπιστική απάντηση γιατί δεν έχει θέση στον SQL Server η TRUNCATE_LOG.
    Να σημειώσω ότι μπορεί να την δείτε και σαν NO_LOG είναι το ίδιο αλλά με άλλο όνομα, και αυτή πήγε στον Καιάδα.
    Υ.Γ. Δεν ξέρω αν η κοινότητα είναι εξοικειωμένη με τις διάφορες μορφές backup που μπορώ να έχω στον SQL Server. Επειδή μέχρι σήμερα δεν έχω αναφερθεί σε αυτό, θεωρώντας το γνωστό, θα ήθελα να ξέρω αν υπάρχει ενδιαφέρον ώστε να γράψω για αυτό.
  21. antonch
    Ένα από τα πράγματα τα οποία προσωπικά θεωρώ από τα διαμάντια του SQL Server που έχουμε διαθέσιμα από την έκδοση του SQL Server 2005 (Standard & Enterprise) SP1 είναι το Database Mirroring.

    Μέχρι την εμφάνιση του για να έχω αυτό που όλοι θέλουμε και δεν είναι άλλο από το database availability έπρεπε να καταφύγουμε σε κάποιες λύσεις όπως:

    1. Clustering

    Ιδανική λύση αλλά στοιχίζει αρκετά σε χρήμα τόσο για την υλοποίηση της όσο και στη διαχείριση του.

    2. Replication

    Αξιόπιστη λύση, με κάποια θεματάκια στην υλοποίηση της, αλλά και με κάποιες παραδοχές που πρέπει να λάβουμε ανάλογα με το τι είδος replication θα υλοποιήσουμε και αφορούν στην παλαιότητα της πληροφορίας που θα έχουμε στην replica.

    3. Log Shipping

    Μια ιδανική λύση για αυτούς που δεν έχουν χρήματα για να υλοποιήσουν τις παραπάνω λύσεις, αλλά έχουν την δυνατότητα να υποστούν απώλεια δεδομένων πχ τα transactions των τελευταίων 15 λεπτών. Αλλά έχουν και την πολυτέλεια να έχουν ένα αρκετά υψηλό downtime μέχρι το αντίγραφο να έρθει σε κατάσταση λειτουργίας και να ενημερωθούν όλες οι εφαρμογές να χρησιμοποιούν αυτό πλέον.

    Προσωπικά και χαριτολογώντας πάντα αυτό το ονομάζω το cluster του φτωχού.

    Έχοντας υλοποιήσει στο παρελθόν και τις τρεις λύσεις, έχω μόνο καλά λόγια να πω και για τις τρεις. Απλά θέλω να υποσημειώσω ότι κάθε μία έχει υλοποιηθεί με οδηγό τις ανάγκες του κάθε πελάτη. Για παράδειγμα αν αυτός δεν μπορεί να έχει data loss και θέλει zero downtime δεν θα του βάλεις την 2 και την 3 λυση.



    Σημείωση

    Αν και με την λύση 2 έχοντας ένα transactional replication σε ένα πολύ γρήγορο δίκτυο μπορείς να έχεις παλαιότητα πληροφορίας κάτω από 1 sec

    Τι είναι όμως το Database Mirroring;

    Είναι δυνατότητα που μας δίνει ο SQL Server ώστε να έχω ένα hot standby αντίγραφο της βάσης μου σε ένα άλλο server που είναι σε διαφορετική γεωγραφική περιοχή. Η μόνη απώλεια δεδομένων που θα έχω θα είναι μόνο τα transactions τα οποία ήταν σε εξέλιξη (δεν είχαν προλάβει να γίνουν commit) κατά την στιγμή της καταστροφής της βάσης ή του server, όπως ακριβώς συμβαίνει και με την λύση του cluster.

    Σημείωση

    Το Database Mirroring είναι σε επίπεδο database και όχι σε επίπεδο server όπως το clustering. Αυτό σημαίνει ότι αν στο server της παραγωγής έχω 10 databases θα πρέπει να κάνω Mirror κάθε μια ξεχωριστά.



    ΔΕΝ ΜΠΟΡΩ ΝΑ ΚΑΝΩ MIRROR ΣΤΙΣ SYSTEM DATABASES (MASTER, MSDB, MODEL, TEMPDB)

    Ποια είναι η Αρχιτεκτονική του Database Mirroring;

    Η αρχιτεκτονική του database mirroring είναι σχετικά απλή όπως φαίνεται στο παρακάτω σχεδιάγραμμα.



    Αυτή είναι η απλή λύση όπου έχω τους δύο servers μου. Τον Server της παραγωγής με την βάση μου το ονομάζουν Principal Server ενώ το mirror server τον ονομάζουν Mirror Server. Σε αυτή την περίπτωση όμως αν "σκάσει" ο Principal θα πρέπει με το "χέρι" να φέρω στην ζωή τον Mirror ο οποίος θα γίνει μετά από αυτή την διαδικασία Principal.

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

    Υπάρχει η κανονική λύση η οποία είναι η παρακάτω:



    Σε αυτή την περίπτωση εμπλέκεται ακόμα ένας server o Witness Server του οποίου η δουλειά είναι να παρακολουθεί το database mirroring έτσι ώστε αν "πέσει" o principal αυτόματα να κάνει principal τον mirror server.

    Σημείωση

    Συνηθίζουμε να ονομάζουμε τους τρεις αυτούς servers (Principal, Mirror, Witness) σαν Mirror Partners ή Partners.



    Προϋποθέσεις και μικρά αλλά σημαντικά μυστικά για την Υλοποίηση

    1. Όλοι οι servers πρέπει να είναι στην ίδια version του SQL Server π.χ 2008. Δεν μπορεί κάποιος από αυτούς να είναι σε 2005

    2. Ο Principal και ο Mirror πρέπει να είναι στην ίδια edition πχ. Standard ή Enterprise

    3. O Witness πρέπει να είναι σε ένα reliable computer system και μπορεί να είναι Standard, Enterprise, Workgroup ή Express edition.

    4. O Mirror server πρέπει να έχει τον χώρο που χρειάζεται η βάση που έχουμε στον Principal.

    5. Στην περίπτωση που θα υλοποιήσουμε το σενάριο high safety with automatic failover σε όλους τους partners το cpu load να είναι μικρότερο από το 50% (ειδικά για τον principal και τον mirror). Και αυτό διότι αν έχουμε cpu overload o failover partner μπορεί να μην μπορέσει να κάνει ping τα άλλα server instances με αποτέλεσμα να έχω unnecessary failover!!!. Εάν αυτό δεν μπορεί να γίνει τότε διαλέξετε κάποιο άλλο από τα διαθέσιμα σενάρια (high safety without automatic failover ή high performance).

    6. Όλοι οι SQL Servers που συμμετέχουν στο database mirroring πρέπει στην master database να έχουν το ίδιο code page και collation, αλλιώς θα έχουμε προβλήματα κατά την διάρκεια του database mirroring setup!.

    7. Για καλύτερο performance είναι καλύτερα να χρησιμοποιηθεί dedicated network adapter για το mirroring.

    8. Εάν έχουμε 32bit system, τότε το database mirroring μπορεί να υποστηρίξει μέχρι 10 databases ανά SQL Server instance εξαιτίας του αριθμού των worker threads τα οποία καταναλώνονται για κάθε database mirroring session.

    9. Το database mirroring υποστηρίζει οποιοδήποτε database compatibility level.

    10. To RESTORE του BACKUP από την principal server στον mirror server πρέπει να γίνει με WITH NORECOVERY.

    11. Μόνο το FULL RECOVERY model υποστηρίζεται στο database mirroring. Αυτό σημαίνει ότι η database που θα κάνω Mirror θα πρέπει να έχει αυτό το recovery model, κανένα

    12. Databases που έχουν Filestream enable δεν μπορούν να γίνουν mirror.

    Ποια είναι τα πλεονεκτήματα του Database Mirroring;

    1. Αυξάνει την ασφάλεια των δεδομένων

    2. Αυξάνει την διαθεσιμότητα της database.

    3. Αυξάνει την διαθεσιμότητα του παραγωγικού περιβάλλοντος στην περίπτωση που θελήσουμε σε αυτό να κάνουμε upgrades.

    Πώς δουλεύει το Database Mirroring;



    Ο principal και ο mirror server έχοντας ένα database mirror session μεταξύ τους και στην ουσία του πράγματος ότι γίνεται στον principal server γινεται redo στον mirror server. Αυτό γίνεται όσο το δυνατό γρηγορότερα και στην πραγματικότητα ο principal server στέλνει κάθε ενεργό transaction log record στον mirror server, ο οποίος με την σειρά του το κάνει στην mirror database.

    Σημείωση

    Δεν είναι όπως στο transactional replication το οποίο είναι σε logical level, εδώ είναι σε physical log record level.

    Το database mirroring session τρέχει είτε σύγχρονα είτε ασύγχρονα. Το αν θα χρησιμοποιήσω κάποιο από αυτά εξαρτάται από τον τρόπο με τον οποίο θέλω να γίνεται το database mirroring, επιλέγοντας ένα από τους παρακάτω:

    1. High Safety (synchronous operation)

    Κάθε φορά που ένα transaction γίνεται στην database του principal, αυτός στέλνει τα active log στον mirror server. O mirror με την σειρά του γράφει το active log που πήρε το δυνατόν γρηγορότερα και αφού το κάνει αυτό τότε o principal server παίρνει ένα μήνυμα ότι mirror server έχει κάνει την δουλειά του και κάνει commit (ο principal).



    Σημείωση

    Ο Mirror δεν κάνει commit απλά γράφει το log στο δίσκο μιας και όπως θα δούμε παρακάτω η database στον mirror server είναι σε φάση restore.

    Μετά από αυτό το status τον database είναι synchronized και όσο διατηρείται το database mirroring session αυτό θα είναι πάντα το ίδιο.

    Στον συγκεκριμένο τρόπο έχω δύο ακόμα επιλογές και αυτές είναι αν θα έχω automatic failover ή όχι. Απλά στην πρώτη περίπτωση πρέπει να έχω και witness server, ο οποίος κοιτάζει αν ο principal είναι στην ζωή και αν δεν τότε σηκώνει τον mirror μόνος του. Στην άλλη περίπτωση θα πρέπει να τον σηκώσω εγώ κάνοντας αλλαγή ρόλου είτε με Τ-SQL είτε μέσα από τα UI

    Σημείωση για τους Developers

    Εάν θέλετε οι εφαρμογές που έχετε φτιάξει αυτόματα να βλέπουν τον mirror όταν πέσει ο principal τότε καλό είναι να χρησιμοποιήσετε το SQL Native Client Access σαν provider στο connection string βάζοντας ακόμα μέσα σε αυτό την επιλογή failover parter στην οποία θα βάζεται το όνομα του Mirror Server ενώ στο Server/Data Source θα έχετε κανονικά τον principal π.χ



    Provider=SQLNCLI10.1; Data Source=ac-demosrv; Failover Partner=ac-demosrv\inst01;…

    Στην περίπτωση που έχετε legacy εφαρμογές υπάρχουν δύο λύσεις που σας προτείνω:

    a) Να έχετε 2 connection strings το ένα να δείχνει στον principal και το άλλο στον mirror. Πάντα χρησιμοποιούμε το πρώτο και αν αυτό είναι κάτω πιάνουμε το timeout error και μετά χρησιμοποιούμε το άλλο

    Με κάποιον τρόπο έχουμε εκτός εφαρμογής το connection string και το αλλάζουμε με το χέρι πχ udl file , registry entry με ότι βέβαια συνεπάγεται αυτό από κόστος σε χρόνο για να γίνει.



    Σημείωση

    Εάν θέλω να αλλάξω τους ρόλους με t-sql θα πρέπει να εκτελέσω το εξής command

    ALTER DATABASE SET PARTNER FAILOVER;

    To ίδιο μπορώ να το κάνω από εάν κάνω δεξί κλικ Properties πάνω στην βάση μου και πάω στην επιλογή Mirroring και πατήσω το κουμπί Failover



    Εδώ πρέπει να τονίσω ότι υπάρχουν και μερικές παραλλαγές αλλά για αυτές δείτε τα BOL.



    Ο τρόπος αυτός προσφέρει ασφάλεια και εγγυάται ότι δεν θα έχω απώλεια δεδεμένων στον mirror server όμως έχω κάποιο performance penalty στον principal όσον αφορά το transaction

    2. High Performance (asynchronous operation)

    Εδώ αν και έχω καλύτερο performance μιας και ή όλη διαδικασία γίνεται ασύγχρονα υπάρχει η πιθανότητα να έχω απώλεια δεδομένων στον Mirror Server. Και αυτό διότι όταν γίνεται το transaction στον Principal Server αυτός στέλνει στον Mirror Server το log αλλά δεν περιμένει να πάρει απάντηση για αν το έκανε ή όχι apply αλλά κάνει commit και φυσικά στέλνει στον client ότι όλα είναι ΟΚ. Αυτό σημαίνει ότι ο Mirror Server μπορεί να είναι πίσω όσον αφορά τα δεδομένα που έχει πάρει και σε περίπτωση που πέσει ο Principal και έρθει στην ζωή θα έχει λιγότερα δεδομένα. Στην περίπτωση αυτή ο Mirror Server είναι DISCONNECTED.

    Αυτός ο τρόπος είναι ιδανικός στην περίπτωση που έχω Principal που είναι oveloaded ή στην περίπτωση που έχω τον Mirror σε WAN το οποίο δεν έχει κάλο δίκτυο.

    Υπάρχει ακόμα ένα θέμα στο τρόπο αυτό που έχει να κάνει με τη χρήση του Witness Server. Αν και μπορεί να υπάρχει σε αυτό υπάρχουν περιπτώσεις όπου μπορεί να δημιουργήσει πρόβλημα όπως


    Εάν χαθεί ο Mirror Server ο Principal πρέπει να κάνει connect στον Witness αν δεν τα καταφέρει τότε ο Principal κάνει την database offline ακόμα και αν μετά συνδεθεί είτε ο Mirror είτε ο Witness.
    Στην περίπτωση που χαθεί ο Principal ο Mirror με την σειρά του πρέπει να κάνει connect στον Witness και αν αυτός είναι μη διαθέσιμος τότε η database δεν θα γίνει διαθέσιμη.
    Bήματα Yλοποίησης του Database Mirrorning με T-SQL (εύκολος τρόπος ;-) )

    Aς δούμε την υλοποίηση με κώδικα t-sql στο demo που ακολουθεί

    Demo Video

    Τον κώδικα της παρουσίασης μπορείτε να τον κάνετε download από εδώ

    Bήματα Yλοποίησης του Database Mirrorning με την χρήση του SSMS (δύσκολος τρόπος ;-) )

    Aφού είδαμε το εύκολο τρόπο ας δούμε τον δυσκολο τρόπο υλοποίησης

    Demo Video

    Σας ευχαριστώ για την προσοχή σας

    Αντώνης
  22. antonch
    Θα επανέλθω στο συγκεκριμένο θέμα μετά από απαίτηση συναδέλφων που είδαν την παρουσίαση που έχω κάνει για το 34ο dotNetZone Event και την οποία θα βρείτε εδώ. Υπήρχαν κάποιες απορίες και ερωτήσεις που φιλοδοξώ να τις απαντήσω με το παρόν post μου. Ας πάρουμε λοιπόν τα πράγματα από την αρχή μιας και διακαείς πόθος όλων μας είναι να έχουμε την τέλεια απόδοση στα queries μας δηλαδή όλα να εκτελούνται σε χρόνο μηδέν και να επιστρέφουν δισεκατομμύρια εγγραφές (καλά πλάκα κάνω ).
    Όμως για όλα αυτά υπάρχουν κάποιες προϋποθέσεις όπως:
    1. Tuning queries κάνει αυτός που είναι database developer ΚΑΙ όχι ένας developer γενικά. Δεν σημαίνει ότι όποιος ξέρει να γράφει C++, C#, VB, Java ξέρει και τι σημαίνει query execution. Εξάλλου όλοι πλέον οι developers δεν θέλουν να γράφουν queries μέσα από τις εφαρμογές τους (συμφωνώ και εγώ με αυτό) αλλά να χρησιμοποιούν εργαλεία όπως LINQ to SQL, Entity Framework κ.α σωστά;
    2. Αυτός που θα αναλάβει να κάνει την συγκεκριμένη εργασία δεν φτάνει να ξέρει πως τα queries, οι indexes δουλεύουν. Πρέπει να ξέρει την γενικότερη αρχιτεκτονική του SQL Server καθώς επίσης και πως ΟΛΑ του τα κομμάτια παντρεύονται μεταξύ τους.
    3. Θα πρέπει να είναι βαθύς γνώστης του σχεδιασμού της βάσης στην οποία θα κάνει tuning το ή τα queries. Όπως επίσης θα πρέπει να ξέρει την ποιότητα και την ποσότητα των δεδομένων τα οποία θα χρησιμοποιήσει για να βελτιώσει την απόδοση στο query του.
    Αν εκπληρώνονται οι παραπάνω προϋποθέσεις θα πρέπει να γνωρίζει τα εξής:
    1. Τι είναι το Query Performance και πως αυτό μετριέται.
    Βασική αρχή στην βελτίωση της απόδοσης ενός query είναι να βρω το τι φταίει και για να γίνει αυτό πρέπει να έχω μια μονάδα μέτρησης για να μπορέσω να εξάγω ένα συμπέρασμα το οποίο θα μου δείξει το δρόμο που θα με οδηγήσει στην επίλυση του προβλήματος. Στον SQL Server έχουμε τρεις βασικές μονάδες μέτρησης αυτές είναι query cost, page reads, query execution time.
    Για να τις δούμε όμως λίγο καλύτερα μήπως και βγάλουμε κάποιο συμπέρασμα
    Query Cost: Συνήθως είναι η βασική μας μονάδα μέτρησης όταν θέλουμε να συγκρίνουμε την απόδοση ενός ερωτήματος. Είναι μια εσωτερική μετρική του SQL Server η οποία λαμβάνει υπόψη της το πόσο CPU και Ι/Ο χρησιμοποιεί το ερώτημα μας. 'Οσο μικρότερη είναι η τιμή του (σε %) τόσο καλύτερη είναι και η απόδοση στο ερώτημα μας. Αλλά δεν λαμβάνει υπόψη θέματα που αφορούν πχ Waiting Locks ή Resource Contention. Επίσης όταν μέσα στο query μας υπάρχουν user defined functions (UDFs) ή Common Language Runtime (CLR) ρουτίνες αυτές δεν λαμβάνονται υπόψη στον υπολογισμό του query cost και αυτός είναι και ο λόγος που ονομάζεται estimated query cost. Αυτό το βλέπουμε από το Εxecution Plan

    Page Reads: Είναι ο αριθμός των σελίδων (8KB/page) που το Storage Engine του SQL Server διαβάζει κατά την διάρκεια εκτέλεσης του query. Αυτό το βλέπουμε εάν στο session στο οποίο εκτελούμε το query μας και πριν την εκτέλεση τους εκτελέσουμε την SET STATISTICS IO ON. To αποτέλεσμα θα είναι το παρακάτω

    Από το output καταβαίνουμε ότι έχει κάνει logical reads 27 pages δηλαδή τις διάβασε από την μνήμη (buffer cache, δείτε παλαιότερο post μου). Σε αυτές συμπεριλαμβάνονται και τα data και τα index pages. Με τα physical read και read-ahead reads βλέπουμε πόσα pages διάβασε από τον δίσκο και τις ανέβασε στην buffer cache. Με το Scan count βλέπουμε το πόσες φορές έκανε scan τις σελίδες αυτές για να βγάλει το αποτέλεσμα (εάν δούμε πάνω από 1 σημαίνει ότι κάτι δεν πάει καλά δηλαδή ξαναδιαβάζει τα ίδια data). Με το lob physical reads και lob read-ahead reads βλεπουμε τον αριθμό των σελίδων που χρειάσθηκε να διαβάζει για να μας φέρει δεδομένα τύπου varchar(max), nvarchar(max), varbinary(max), text, image, xml. Αλλά δεν συμπεριλαμβάνεται το CPU Cost όπως επίσης δεν συμμετέχουν οι UDFs και CLR ρουτίνες.
    Query Execution Time: Αυτή είναι η ποιο επηρεαζόμενη μετρική, και αυτό διότι μπορεί να έχω locks, resource contention στον server κατά την διάρκεια της εκτέλεσης του query. Αυτή την μετρική την βλέπουμε εάν στο session στο οποίο εκτελούμε το query μας και πριν την εκτέλεση τους εκτελέσουμε την SET STATISTICS ΤΙΜΕ ON. To αποτέλεσμα θα είναι το παρακάτω

    Από το output βλέπουμε τους χρόνους που χρειάσθηκε για την προεργασία (parse and compile) και τον χρόνο εκτέλεσης.
    2. Να γνωρίζει πως εκτελείτε λογικά ένα query.
    Έχω ήδη γράψει για αυτό σε παλαιότερο άρθρο μου το οποίο μπορείτε να βρείτε εδώ.
    3. Να μπορεί να διαβάσει και να ερμηνεύσει το Graphical ή μη Execution Plan

    Για όσους δεν ξέρουν πώς να το κάνουν αυτό θα του πω απλά ότι διαβάζεται από δεξιά προς τα αριστερά και κάθε σύμβολο σημαίνει μια διαφορετική διαδικασία εκτέλεσης. Υπάρχουν αρκετά τέτοια σύμβολα, τα οποία και μπορείτε να τα βρείτε όλα μέσα στο SQL Server Books Online (BOL). Θα σας δώσω όμως μερικά hints.
    a. Εάν βλέπετε παχιά βελάκια τα οποία συνδέουν το ένα task με κάποιο άλλο, αυτό σημαίνει ότι μεγάλος όγκος δεδομένων μεταφέρεται από task σε task. Γενικότερα θέλουμε να βλέπουμε λεπτά βελάκια.
    b. Εάν στο query μας έχουμε join ή group by και βλέπουμε ότι αυτό υλοποιείτε με Hash Match (Inner Join) αυτό συχνά σημαίνει ότι δεν υπάρχει ο κατάλληλος index ώστε να γίνει γρηγορότερα η διαδικασία πχ. Index στο foreign key στο join ή στο πεδίο με το οποίο κάνουμε group by.
    c. Εάν βλέπουμε το σύμβολο του Sort και το ποσοστό του κόστους που έχει είναι υψηλό, τότε καλό είναι να εξετάζουμε την περίπτωση να γίνει κάποιος Index στo πεδίο αυτό ώστε να απαλοιφή η διαδικασία Sort.
    d. Τα μεγάλα excecution plans δεν σημαίνει ότι είναι κακά αλλά καλό είναι να έχω μικρά execution plans και αυτό διότι έχω λιγότερα βήματα εκτέλεσης στο query μου.
    e. Επίσης όταν στον execution plan δω σε κάποιο task Table Scan ή Clustered Index Scan σημαίνει ότι δεν υπάρχει Index τέτοιος ώστε να γίνει καλύτερη υλοποίηση εκτέλεσης. (Σημείωση: Αν ο πίνακας σας έχει δεδομένα που είναι κάτω από 8ΜΒ τότε ακόμα και αν υπάρχει index ο SQL Server επιλέγει την συγκεκριμένη υλοποίηση διότι έχει λιγότερο κόστος σε resources και χρόνο).
    Βέβαια υπάρχουν και άλλα που πρέπει να γνωρίζουμε αλλά αυτά είναι τα βασικά. Ας αρχίσουμε με αυτά και επιφυλάσσομαι στο μέλλον να γράψω και για τα άλλα
  23. antonch
    Σήμερα βγήκε η παρακάτω ανακοίνωση
    Today, SQL Server 2008 R2 received an official release date. It will be listed on Microsoft’s May price list, and will be available by May 2010.
    SQL Server 2008 R2 showcases Microsoft’s continued commitment to business intelligence and mission-critical workloads. Since we made this release available as a Community Technology Preview (CTP) in August 2009, it has been well-received by the community with more than 150,000 downloads. Key customer benefits include:
    · A trusted and scalable platform with high availability, Master Data Services supporting data consistency across heterogeneous systems, StreamInsight enabling high-scale complex event processing, and support for high scale applications with up to 256 logical processors.
    · IT and developer efficiency through central management of multiple database applications, instances or servers, accelerating the development and deployment of applications and providing improved support for virtualization and Live Migration through Hyper-V™ in Windows Server 2008 R2.
    · Managed self-service business intelligence empowering a new class of business users to build and share powerful BI solutions with little to no IT support, while still enabling IT to monitor and manage end-user generated BI solutions with the new PowerPivot for Excel and PowerPivot for SharePoint
    “SQL Server 2008 R2 is freeing up our IT departments to focus on bigger challenges while keeping control of our most valuable asset, our information,” said Fabio Catassi, CTO Mediterranean Shipping Company. “Using Excel and PowerPivot as an interface for Self-Service BI, we are modeling, analyzing and pivoting millions of records in memory and publishing our BI solutions to SharePoint in few minutes. This also allows our geographically remote office branches to access them from a URL at a fraction of the time, and our IT department to centrally manage and monitor information.”
    Customers with Software Assurance can upgrade to SQL Server 2008 R2 and take advantage of the new features without incurring additional licensing costs.
    There’s still time to download, preview, and provide feedback!
    Go to http://www.microsoft.com/sqlserver/2008/en/us/R2Downloads.aspx to get more information and to download the November CTP of SQL Server 2008 R2. And let us know what you think: connect with the SQL Server 2008 R2 Development Team and provide feedback.
×
×
  • Create New...