{"id":177,"date":"2011-10-30T19:54:05","date_gmt":"2011-10-30T17:54:05","guid":{"rendered":"http:\/\/www.flip-design.de\/?p=177"},"modified":"2011-11-27T17:52:28","modified_gmt":"2011-11-27T15:52:28","slug":"ressourcen-kontrolle","status":"publish","type":"post","link":"https:\/\/www.flip-design.de\/?p=177","title":{"rendered":"Ressourcen Kontrolle"},"content":{"rendered":"<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/RG.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-178\" title=\"RG\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/RG.png\" alt=\"\" width=\"154\" height=\"174\" \/><\/a>Die Ressourcen Kontrolle (engl. Resource Governor) ist ein Microsoft SQL Server Enterprise Feature, welches erlaubt, dass Anwendungen oder Benutzer im Verbrauch von Systemressourcen eingeschr\u00e4nkt werden. Die Einschr\u00e4nkung erfolgt jedoch nur, wenn nicht mehr ausreichend Ressourcen verf\u00fcgbar sind. D.h. wenn eine Anwendung max. 50% der CPU Last verwenden darf, aber 100% verf\u00fcgbar sind, erfolgt die Einschr\u00e4nkung nicht, erst wenn der Bedarf von h\u00f6her konfigurierten und priorisierten Anwendungen vorhanden ist. Die Einschr\u00e4nungen k\u00f6nnen unter den folgenden Indikatoren vorgenommen werden:<\/p>\n<ul>\n<li>Arbeitsspeicher<\/li>\n<li>CPU<\/li>\n<li>Timeouts<\/li>\n<li>Anfragen<\/li>\n<\/ul>\n<p>Die jeweiligen Einstellungen k\u00f6nnen mit min. und max. Werten konfiguriert werden.<\/p>\n<p>In der Umsetzung werden sogenannte Pools erzeugt, die den Ressourcen Gruppen zur Verf\u00fcgung stehen. Die Unterscheidung welcher Benutzer oder welche Anwendung wie eingeschr\u00e4nkt wird, bzw. hier \u00fcberhaupt ber\u00fccksichtigt wird, erfolgt \u00fcber Klassifizierungsfunktionen.<\/p>\n<p>Die \u00dcberwachung der Einstellungen kann \u00fcber den Windows Ressourcen Monitor durchgef\u00fchrt werden. Daf\u00fcr wird eine Gruppe &#8222;Workload Group Stats&#8220; zur Verf\u00fcgung gestellt. Dazu aber sp\u00e4ter mehr &#8230;<\/p>\n<p>In diesem Beispiel geht es nun um die Einschr\u00e4nkung von 2 Anwendern, die jeweils nur eine bestimmte CPU Zeit zugewiesen bekommen sollen. (kleiner Hinweis: Besser nur eine CPU im SQL Server verwenden, damit die CPU Auslastung besser sichtbar wird)<\/p>\n<p>Um erstmal zu beginnen, werden 2 Logins erstellt:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">CREATE LOGIN [BenutzerKundeA] WITH PASSWORD=N'asdf', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF\r\nGO\r\nCREATE LOGIN [BenutzerKundeB] WITH PASSWORD=N'asdf', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF\r\nGO<\/pre>\n<p>Nun wird die Ressourcen Kontrolle aktiviert (zu finden unter der Verwaltung im SMSS):<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE GOVERNOR RECONFIGURE;<\/pre>\n<p>Nun werden 2 Pools erstellt:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">CREATE RESOURCE POOL [HoheLeistung]\r\nGO\r\nCREATE RESOURCE POOL [NiedrigeLeistung]\r\nGO<\/pre>\n<p>Und nun 2 Gruppen die dem jeweiligen Pool zugewiesen werden (jeder Pool kann unterschiedliche Gruppen beinhalten die dazu noch priorisiert werden k\u00f6nnen):<\/p>\n<pre escaped=\"true\" lang=\"tsql\">CREATE WORKLOAD GROUP [KundeA] USING [HoheLeistung]\r\nGO\r\nCREATE WORKLOAD GROUP [KundeB] USING [NiedrigeLeistung]\r\nGO<\/pre>\n<p>Nun wird die Ressourcen Kontrolle aktiviert und die \u00c4nderungen \u00fcbernommen:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE GOVERNOR RECONFIGURE;<\/pre>\n<p>Nun erfolgt die Einschr\u00e4nkung der Pools:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE POOL [HoheLeistung] WITH (min_cpu_percent=0, max_cpu_percent=50);\r\nALTER RESOURCE POOL [NiedrigeLeistung] WITH (min_cpu_percent=0, max_cpu_percent=50);<\/pre>\n<p>Beide Pools verf\u00fcgen \u00fcber maximal 50% CPU Last<\/p>\n<p>&#8230; und nun wieder die \u00c4nderungen \u00fcbernehmen)<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE GOVERNOR RECONFIGURE;<\/pre>\n<p>Nun wird in der master Datenbank die Klassifizierungsfunktions erstellt, welche nach dem jeweiligen Benutzernamen die jeweilige, zu verwedende Gruppe zur\u00fcckgibt:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">CREATE FUNCTION dbo.RG_KlassifizierungsFunktion() RETURNS SYSNAME\r\nWITH SCHEMABINDING\r\nAS BEGIN\r\nDECLARE @GroupName SYSNAME\r\nIF(SUSER_NAME() = 'BenutzerKundeA')\r\nBEGIN\r\nSET @GroupName = 'KundeA'\r\nEND\r\nIF(SUSER_NAME() = 'BenutzerKundeB')\r\nBEGIN\r\nSET @GroupName = 'KundeB'\r\nEND\r\nRETURN @GroupName\r\nEND\r\nGO<\/pre>\n<p>Nun wird die Funktion der Ressourcen Kontrolle \u00fcbergeben und die \u00c4nderungen werden angewendet:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.RG_KlassifizierungsFunktion)\r\nGO\r\nALTER RESOURCE GOVERNOR RECONFIGURE;\r\nGO<\/pre>\n<p>Wenn man nun folgenden Code unter den beiden Benutzern ausf\u00fchrt und die Indikatoren in den PerfMon mit aufnimmt, tritt die Ressourcen Kontrolle in Kraft &#8230;<\/p>\n<pre escaped=\"true\" lang=\"tsql\">set nocount on\r\ndeclare @i int\r\ndeclare @s varchar(100)\r\nset @i = 100000000\r\nwhile @i &gt; 0\r\nbegin\r\nselect @s = @@version;\r\nset @i = @i - 1;\r\nend<\/pre>\n<p>und bringt folgendes Ergebnis im PerfMon:<br \/>\n<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-179 alignnone\" title=\"PerfMon_RG-1\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-1.png\" alt=\"\" width=\"332\" height=\"384\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-1.png 332w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-1-259x300.png 259w\" sizes=\"(max-width: 332px) 100vw, 332px\" \/><\/a><\/p>\n<p>Damit das Beispiel auch Sinn macht, werden die Gruppen angepasst:<\/p>\n<pre escaped=\"true\" lang=\"tsql\">ALTER RESOURCE POOL HoheLeistung\r\nWITH(min_cpu_percent=0, max_cpu_percent=75);\r\nGO\r\nALTER RESOURCE POOL NiedrigeLeistung\r\nWITH(min_cpu_percent=0, max_cpu_percent=25);\r\nGO\r\nALTER RESOURCE GOVERNOR RECONFIGURE;\r\nGO<\/pre>\n<p>Nun erh\u00e4lt der eine Pool max. 75% CPU und der andere max. 25%. Im PerfMon sieht das dann folgenderma\u00dfen aus:<br \/>\n<a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-180\" title=\"PerfMon_RG-2\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-2.png\" alt=\"\" width=\"788\" height=\"481\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-2.png 788w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2011\/10\/PerfMon_RG-2-300x183.png 300w\" sizes=\"(max-width: 788px) 100vw, 788px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Ressourcen Kontrolle (engl. Resource Governor) ist ein Microsoft SQL Server Enterprise Feature, welches erlaubt, dass Anwendungen oder Benutzer im Verbrauch von Systemressourcen eingeschr\u00e4nkt werden. Die Einschr\u00e4nkung erfolgt jedoch nur, wenn nicht mehr ausreichend Ressourcen verf\u00fcgbar sind. D.h. wenn eine &hellip; <a href=\"https:\/\/www.flip-design.de\/?p=177\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[8,3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/177"}],"collection":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=177"}],"version-history":[{"count":10,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":186,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/177\/revisions\/186"}],"wp:attachment":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}