sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Παρουσίαση του Resource Governor στον SQL Server 2008.

Antonios Chatzipavlis
Thursday 27 August 2009

 

Μέσα σε έναν οργανισμό θα συναντήσουμε πολλές batabase οι οποίες περιέχουν business-critical data. Πάνω από αυτές θα βρούμε applications τα οποία διαχειρίζονται τα δεδομένα αυτά. Καθώς ο όγκος των δεδομένων γεωμετρικά αυξάνετε, αλλά και ο αριθμός των χρηστών που ζητούν πρόσβαση σε αυτά μεγαλώνει, είναι κατανοητό σε όλους ότι η διαθεσιμότητα των δεδομένων πρέπει να είναι αδιάλειπτη, όπως επίσης και η ταχύτητα απόκρισης στα ερώτημα και στα transactions των χρηστών πρέπει να είναι μεγάλη και σταθερή. Ο SQL Server 2008 παρουσίασε μια σειρά από εργαλεία τα οποία σκοπό έχουν να βοηθήσουν τον DBA στο να παρέχει τα παραπάνω. Ένα από αυτά τα εργαλεία είναι και ο RESOURCE GOVERNOR με τον οποίο θα ασχοληθώ σε αυτό το post μου.

Το πρόβλημα

Στις προηγούμενες εκδόσεις του SQL Server όταν ήμασταν σε ώρες αιχμής κάποιες βασικές εφαρμογές βλέπαμε να υποφέρουν κυριολεκτικά σε performance και αυτό διότι υπήρχαν άλλες λιγότερο βασικές εφαρμογές που έτρεχαν παράλληλα εκτελούσαν "βαριές εργασίες". Όμως ακόμα και στην περίπτωση που έχουμε μια βασική εφαρμογή αλλά μεγάλο αριθμό χρηστών, που ο καθένας όμως κάνει εργασία με διαφορετικό βάρος στην παραγωγική διαδικασία της ημέρας, πόσες φορές έχουμε έρθει αντιμέτωποι με προβλήματα όπως η τιμολόγηση ή το λογιστήριο ή ακόμα χειρότερα το αφεντικό να "σέρνονται"; Η αιτία για όλα αυτά είναι ότι όλες οι εφαρμογές και όλοι οι χρήστες έπαιρναν στο μέτρο του δυνατού ισόποσα ποσοστά χρήσης τόσο της μνήμης όσο και της CPU.

Την λύση στα παραπάνω ήρθε να δώσει ο Resource Governor.

Τί είναι ο Resource Governor?

  • Ταξινομεί τα εισερχόμενα connections και τα βάζει το καθένα σε προκαθαρισμένο workload group.
  • Ομαδοποιεί τα resources σε resource pools, που το κάθε ένα ορίζει όρια όσον αφορά την χρήση της CPU και της μνήμης.
  • Συνδέει τα workload groups σε resource pools.
  • Παρακολουθεί τα resources χρησιμοποιώντας το workload group.
  • Ορίζει την προτεραιότητα μεταξύ των workload groups.

Τι είναι τα Resource Pools?

Ένα recourse pool συσχετίζεται με τους φυσικούς πόρους που ο server μας έχει. Με την ολοκλήρωση της εγκατάστασης του SQL Server 2008 έχω εκ προοιμίου δύο resource pools, τα default (χρησιμοποιείται για όλα τα groups που δεν τους έχω ορίσει pool) και internal (είναι για τις εσωτερικές εργασίες του SQL Server). Μπορώ να φτιάξω και τα δικά μου και κάθε resource pool μπορώ να ορίσω (δεν μπορώ να το κάνω στα default και Internal) τα εξής:

  • Minimum CPU percentage (0->100)
  • Maximum CPU percentage (100->0)
  • Minimum memory percentage (0->100)
  • Maximum memory percentage (100->0)

Τι είναι τα Workload Groups?

Είναι ο container για τα session requests τα οποία τα ίδια κριτήρια ταξινόμησης. Με την ολοκλήρωση της εγκατάστασης του SQL Server 2008 έχω εκ προοιμίου δύο workload groups τα default και internal, τα οποία εξ' ορισμού ανήκουν στα default & internal resource pools. Εδώ θα πρέπει να επισημάνω ότι και αυτά που θα φτιάξω εγώ μπορούν να ανήκουν σε ένα και μόνο ένα resource pool. Σε κάθε workload group μπορώ να ορίσω τα εξής:

  • Assign a Priority

    Ορίζω το priority (Low, Medium, High).

  • Limit Maximum Requests

    Ορίζω τον αριθμό των ταυτόχρονων requests τα οποία επιτρέπονται να εκτελεστούν στο συγκεκριμένο workload group.

  • Limit CPU Time (Sec)

    Ορίζω το maximum χρόνο της CPU που ένα request μπορεί να χρησιμοποιήσει.

  • Limit Memory Grant %

    Ορίζω το maximum ποσοστό μνήμης που ένα request μπορεί να πάρει από το pool.

  • Limit Grant Timeout (Sec)

    Ορίζω το maximum του χρόνου που ένα query θα περιμένει ένα resource να γίνει διαθέσιμο πριν αποτύχει.

  • Limit Degree of Parallelism

    Ορίζω τον maximum αριθμό επεξεργαστών που το request μπορεί να χρησιμοποιήσει.

Τι είναι τo Classifier Function?

Είναι το function αυτό με το οποίο γίνεται η ανάθεση του νέου session/εφαρμογή σε workload group. Αυτό είναι ένα και μόνο ένα κάθε φορά δηλαδή δεν μπορώ να έχω ταυτόχρονα δύο classifier functions. Μετά από κάθε αλλαγή σε αυτό θα πρέπει να κάνω reconfigure τον R.G.

Μέσα σε αυτό το function μπορώ να χρησιμοποιήσω system functions για να κατατάξω το session/εφαρμογή στο workload group όπως τα

  • HOST_NAME
  • APP_NAME

    Προσοχή σε αυτό διότι είναι κάτι το οποίο ορίζεται μέσα στο connection string της εφαρμογής και μπορεί να αλλαχθεί ανά πάσα στιγμή από κάποιον με σκοπό να πάρει καλύτερο workload group.

  • SUSER_NAME
  • SUSER_SNAME
  • IS_SRVROLEMEMBER
  • IS_MEMBER
  • ORIGINAL_DB_ΝΑΜΕ
  • και άλλα

Δέστε στα BOL τι κάνει το καθένα.

Υπάρχουν περιορισμοί?

Βέβαια υπάρχουν και περιορισμοί και αυτοί είναι:

  1. Δουλεύει μόνο με το Database Engine. Δηλαδή όχι Analysis, Integration, Reporting Services.
  2. Ορίζεται ξεχωριστά για κάθε instance. Δηλαδή δεν έχω κεντρική διαχείριση για όλα τα instances του SQL Server.
  3. Δεν έχω την δυνατότητα να ελέγξω IO allocations μόνο MEMORY & CPU (μάλλον στην επόμενη έκδοση)
  4. Σε καμία περίπτωση δεν μπορώ να πως σε ένα συγκεκριμένο query να πάει γρηγορότερα.
  5. Ο Resource Governor είναι διαθέσιμος μόνο στην Enterprise Edition του SQL Server 2008.

Παρατηρήσεις

  • Ο R.G εφαρμόζεται μόνο όταν υπάρχει ανάγκη να εφαρμοστεί. Πχ. έχω μια εφαρμογή η οποία ανήκει σε ένα workload group στο οποίο έχω ορίσει max CPU 40%. Εφόσον την δεδομένη χρονική στιγμή που εκτελείται η εφαρμογή δεν υπάρχει κάποια άλλη που να είναι σε κάποιο άλλο group με μεγαλύτερο ποσοστό, δύναται να χρησιμοποιήσει όλη την CPU.
  • To άθροισμα των μικρότερων (minimum) τιμών δεν μπορεί να περνάει το 100%
  • Ότι πόρους αφήνουν ελεύθερους τα pools αυτά μοιράζονται.

DEMO

Την υλοποίηση του demo την έκανα με T-SQL. Βέβαια υπάρχει και γραφικό περιβάλλον για να υλοποιήσεις τον Resource Governor όπως θα δείτε και στα παρακάτω screen shoots.

 

 

Τα σχόλια σας είναι πάντα ευπρόσδεκτα!

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.