Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server

Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server
Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server

Πολλές φορές μπορεί ένας χρήστης στη βάση δεδομένων να καταναλώνει όλους τους πόρους που έχει το 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 με όλες τις παραμέτρους που ορίσαμε.

Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server

Με δεξί κλικ properties πάνω στον Resource Governor μπορούμε να δούμε με γραφικό τις παραμέτρους που ορίσαμε.

Πώς περιορίζουμε τα resources που μπορεί να καταναλώσει ένας χρήστης στον SQL Server

Πλέον κάθε φορά που θα συνδέεται ο χρήστης αυτός, θα υπόκειται στους περιορισμούς αυτόυς που έχουμε θέσει.

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση