Jump to content

antonch

Administrators
  • Posts

    1030
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by antonch

  1. Επιτέλους άρχισε να ξεδιαλύνει το τοπίο με τα κλειδιά και τα activations BRAVO NASOS!!!
  2. Ακόμα θεωρώ τραγικό να γινεται χρήση των παρακάτω exec sp_configure 'xp_cmdshell',1 reconfigure go exec sp_configure 'Ole Automation Procedures',1 reconfigure Είναι σαν να βάζω τα χερια μου και να βγάζω τα μάτια μου ενεργοποιόντας τα παραπανω από θέμα security
  3. Επίσης με αυτό το script δεν χρειάζεται να κάνω κάτι με το που φτιαχνετε μια βάση το βράδυ πχ που θα τρεξει το task θα παρθεί backup χωρίς να κάνω κάτι άλλο. Είναι ιδανικό για development servers!!!
  4. Από ότι έχω δει το expressmaint είναι για express edition, αν και δεν το έχω δοκιμάσει σε άλλες εκδόσεις. Προσωπικά δεν βλέπω το λόγο να βάλω ακόμα ένα service να τρέχει την στιγμή που μπορώ να βάλω τον SQL Server να το κάνει. Από την άλλη έχω ένα προσωπικό προβλήμα, εμπιστεύμαι μόνο το backup που παίρνω από τον SQL Server. Ξέρεις είναι από αυτά το κολλήματα που φέρεις σε όλη σου την ζωή
  5. Αφορμή για το post αυτό μου έδωσε αυτό το post, Protect object from accidental deletion. Για να κάνω κάτι τέτοιο στον SQL Server το μόνο που χρειάζεται να κάνω είναι να φτιάξω ένα απλό DML Trigger. Με το παρακάτω script γίνεται αυτό που θέλω και έτσι δεν πρόκειτε ποτέ να σβήσω μια βάση. Αν θελήσω να σβήσω μια βάση θα πρέπει πρώτα να κάνω disable τον trigger να κάνω την διαγραφή μου και μετά να ενεργοποίησω ξανά αυτόν. CREATE TRIGGER NoDeleteDB ON ALL SERVER FOR DROP_DATABASE AS ROLLBACK GO DISABLE TRIGGER NoDeleteDB ON ALL SERVER ENABLE TRIGGER NoDeleteDB ON ALL SERVER
  6. Θέλετε να ξεν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 τα προηγούμενα
  7. φυσικά αστειεύομαι Νικόλα μόλις βρω το χρονο θα σε τακτοποιήσω φίλε μου
  8. execution plan analysis xμ, το ΑΦΜ σου να μου δώσεις για να σου κόψω το τιμολόγιο
  9. Τα πολλά λόγια είναι φτώχια δείτε το περιεχόμενο του και είμαι σίγουρος ότι θα τα κατεβάσετε 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
  10. Η Microsoft ανακοίνωσε όπωσ συνηθίζει μια σειρά από εργαλεία τα οποία μπορούν να κάνουν ευκολότερη (όχι ότι δεν είναι) τη ζωή μας με τον SQL Server 2008 R2. Λήψη του Microsoft® SQL Server® 2008 R2 Feature Pack
  11. Κοίτα αυτά που σου είπε ο Παναγιώτης αλλά ρίξε και μια ματια εδω http://www.dotnetzone.gr/cs/blogs/antonch/archive/2007/12/19/how-to-move-business-contact-manager-2007-database-to-another-instance-of-sql-server-2005.aspx
  12. είναι γνωστή η τρέλλα μου για ποστερ, ευχαριστώ Ευάγγελε
  13. Ο 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 και να βρίσκουμε τα τυχόν προβλήματα τους. Επίσης θα μας βοηθήσει αυτή η γνώση στον καλύτερο σχεδιασμό των βάσεων μας, με αποτέλεσμα να έχουμε καλύτερη ποιότητα εφαρμογών.
  14. Τι να σου πω; Βέβαια χρησιμοποιόντας την επιχειρηματολογία σου ότι φταίει η AT&T και όχι η Apple, θα μπορούσα να πω ότι και για αυτό που ανακοίνωσε η Google ότι αποσύρει τα Windows φταίνε τα κακογραμμένα sites []
  15. Χμμμμμ, μα είναι δυνατόν, αυτά δεν γίνονται σε άλλους μόνο η κακιά εταιρία έχει αυτά τα προβλήματα [6] http://www.businessinsider.com/apples-worst-security-breach-114000-ipad-owners-exposed-2010-6
  16. antonch

    QUIZ

    Αντε να το πάρει το ποτάμι, δεν υπαρχει λόγος να γίνει το thread τεράστιο Σημαίνει System Sizing.
  17. antonch

    QUIZ

    Γιώργη δεν διαφωνώ με τα λεγόμενα σου. Το αν πρέπει ή όχι να μεταφράζονται στα ελληνικά οι όροι νομίζω ότι δεν πρέπει. Αλλά έχω ένα βίτσιο με την ελληνική γλώσσα και μου αρέσει αυτό το παιχνίδι άσχετα αν δεν με βρήσκει σύμφωνο. (Καλά μην βαράτε όλοι μαζί σαν άνθρωπος και εγώ έχω την εγκεφαλική μου λόξα) Όμως παρόλα αυτά υπάρχει σαν λέξη και χρησιμοποιήτε στον χώρο μας και μάλιστα είναι κατά την ταπεινή μου γνώμη αρκετά επιτυχημένη για την έννοια που χρησιμοποιήτε. Υ.Γ Οχι δεν το διάβασα στο RAM!!!.
  18. antonch

    QUIZ

    Ένας απο τους τρεις σας είναι κοντά. Απλά λίγο ακόμα
  19. antonch

    QUIZ

    Τι σημαίνει στο χώρο μας η λέξη "διαστασιολόγηση";
  20. Πριν από μερικές μέρες μου ήρθε ένα ερώτημα από ένα φίλο για το τι είναι το 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)
  21. antonch

    Soy perdido

    Όπως είπα και πιο πάνω δεν ήταν αυτό που ήθελα. Αλλά νομίζω ότι αυτό είναι το καλύτερο. Για φαντάσουν να το πήγαινε κάπου αλλού θα γίνονταν αηδία. Αν και πιστεύω ότι θα υπάρχει και κάποιο bonus με εξηγήσεις.
  22. Κακό!! Γιατί να κάνουν κακο. Εξάλλου μην ξεχνάς ότι αν δεν ήταν αυτοί (εμείς) ακόμα σε μαύρη κονσόλα θα έκανες δουλεια. Ξέρεις πόσοι έχουν IT με τους wizards? Φιλικά
  23. antonch

    Soy perdido

    xa xa με βαζεις σε σκεψεις..... καλοοοοοοοοοο
  24. antonch

    Soy perdido

    Είναι λίγο πικρο το τέλος, ηθελα κάτι διαφορετικό, αλλά μετά σκεφτηκα κάτι άλλο και νομίζω ότι ίσως έτσι είναι καλύτερα. Ας το δουν και οι άλλοι και βλέπουμε
×
×
  • Create New...