Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
- Πώς μπορούμε να συνδέσουμε Oracle Database με SQL Server με χρήση Oracle Gateway σε Linux - 1 Ιούλιος 2024
Πολλές φορές μπορεί ένας χρήστης στη βάση δεδομένων να καταναλώνει όλους τους πόρους που έχει το SQL Server instance και να μην μπορεί να προχωρήσει κάποια άλλη εργασία από άλλον χρήστη. Σε αυτό το άρθρο θα δούμε πως μπορούμε να το περιορίσουμε με τη χρήση του Resource Governor.
Ο SQL Server Resource Governor είναι ένα εργαλείο του SQL Server που μπορεί να ορίζει ανά ομάδα χρηστών την κατανάλωση πόρων, αναλόγως του φόρτου εργασίας. Μέσα από τον Resource Governor μπορούμε να θέσουμε όρια στη χρήση CPU, I/O, και μνήμης.
Από τι αποτελείται ο Resource Governor
Η παραμετροποίηση του αποτελείται από 3 βασικά βήματα:
- ResourcePool: Το οποίο είναι μία ομάδα πόρων στην οποία ορίζουμε τα όρια που θα μπορεί να κάνει χρήση. Κατά τη δημιουργεία του έχουμε τη δυνατότητα να ορίσουμε τις παραμέτρους:
- MIN_CPU_PERCENT / MAX_CPU_PERCENT: Το κατώτατο / ανώτερο όριο που μπορεί να καταναλώνει CPU το Pool αυτό σε σχέση με τα υπόλοιπα.
- CAP_CPU_PERCENT: Όταν δεν ζητάει resources άλλο Pool παρότι έχουμε θέσει όριο MAX_CPU_PERCENT τότε μπορέι να ξεπεράσει το ποσοστό που έχουμε ορίσει. Με αυτή τη παράμετρο θέτουμε το hard limit που μπορεί να χρησιμοποιήσει για CPU.
- MIN_MEMORY_PERCENT / MAX_MEMORY_PERCENT: Το κατώτατο / ανώτερο όριο που μπορεί να καταναλώνει μνήμη το Pool αυτό σε σχέση με τα υπόλοιπα
- Affinity: Με αυτή τη παράμετρο μπορούμε να ορίσουμε συγκεκριμένο CPU core να χρησιμοποιεί αυτό το Pool.
- MIN_IOPS_PER_VOLUME / MAX_IOPS_PER_VOLUME: Το κατώτατο / ανώτερο όριο Input/Output operations per second ανά δίσκο που μπορεί να καταναλώνει το Pool αυτό.
- Workload Group: Είναι η ομάδα με τους χρήστες που θέλουμε να περιορίσουμε. Η κάθε ομάδα συνδέται με ένα Resource Pool.
- Classification: Δημιουργώντας ένα Classification Function μπορούμε να ορίσουμε σε ποιο Workload Group ανήκει η κάθε εισερχόμενη συνδέση από χρήστη.
Το παράδειγμα
Ας δούμε ένα παράδειγμα ενεργοποίησης του Resource Governor βήμα βήμα.
Για αρχή το ενεργοποιούμε με την παρακάτω εντολή:
ALTER RESOURCE GOVERNOR RECONFIGURE; GO
Δημιουργούμε το Resource Pool με τα όρια που θέλουμε να έχει:
CREATE RESOURCE POOL Limited WITH (MAX_CPU_PERCENT = 60 , CAP_CPU_PERCENT = 90, MAX_MEMORY_PERCENT = 70 , MAX_IOPS_PER_VOLUME = 7168);
Δημιουργούμε το Workload Group ορίζοντας του να χρησιμοποιήσει το Resource Pool που φτιάξαμε στο προηγούμενο βήμα:
CREATE WORKLOAD GROUP [ApplicationGroup] USING Limited; GO
Έπειτα δημιουργούμε το Classification Function που θα ορίζει ανάλογα τον χρήστη που πάει να συνδεθεί αν θα ανήκει σε κάποιο Workload Group:
USE master GO CREATE FUNCTION dbo.Classifier() RETURNS sysname WITH SCHEMABINDING as BEGIN DECLARE @group_name sysname IF (SUSER_NAME() = 'app_user') SET @group_name = 'ApplicationGroup' RETURN @group_name; END GO
Στο τέλος ορίζουμε τον Resource Governor να κάνει χρήση του Classification Function που φτιάξαμε στο προηγούμενο βήμα:
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.Classifier); GO ALTER RESOURCE GOVERNOR RECONFIGURE; GO
Αφου ολοκληρώσουμε όλα τα βήματα θα δούμε μέσα από το SQL Server Management Studio ότι στον Object Explorer κάτω από τον φάκελο Management, θα έχει δημιουργηθεί το Resource Pool με όλες τις παραμέτρους που ορίσαμε.
Με δεξί κλικ properties πάνω στον Resource Governor μπορούμε να δούμε με γραφικό τις παραμέτρους που ορίσαμε.
Πλέον κάθε φορά που θα συνδέεται ο χρήστης αυτός, θα υπόκειται στους περιορισμούς αυτόυς που έχουμε θέσει.