Nasıl yapılır: Sınıflandırıcısı kullanıcı tanımlı bir işlev (Transact-SQL) oluştur
Bu konuda nasıl oluşturulacağı ve test Sınıflandırıcısı kullanıcı tanımlı bir işlev (udf) gösterir.Yürütme adımı Transact-SQL ifadelerine SQL Server Management Studio sorgu Düzenleyicisi.Size okumanızı öneririz için bir yazı konuları Sınıflandırıcısı işlevi devam etmeden önce.
Aşağıdaki yordamda gösterilen örnek oldukça karmaşık Sınıflandırıcısı kullanıcı tanımlı bir işlev oluşturmak için olasılık gösterilmiştir.
Bizim örnekte:
Kaynak havuzu (pProductionProcessing) ve iş yükü grubu (gProductionProcessing) bir belirtilen saat aralık. sırasında işleme üretim için oluşturulan
Kaynak havuzu (pOffHoursProcessing) ve iş yükü grubu (gOffHoursProcessing). üretim işlemi gereksinimlerini karşılayan bağlantıları işlemek için oluşturulan
Bir tablo (TblClassificationTimeTable) oluşturulur master Başlangıç ve bitiş tutmak için saatkarşı bir oturum değerlendirilebilir s saat.Kaynak süresine Sınıflandırıcısı işlevleri için şema bağlama kullandığından bu master oluşturulması gerekir.
Not
En iyi yöntem, büyük ve sık güncelleştirilen tablolarda depolanmamalıdır master.
De belirtildiği gibi Sınıflandırıcısı işlevi yazarken dikkat edilmesi gereken noktalar, oturum açma Sınıflandırıcısı işlev genişletir saat.Aşırı derecede karmaşık bir işlev veya oturumları saat aşımına neden yavaş kapalı hızlı bağlantılar.
Sınıflandırıcısı kullanıcı tanımlı işlev oluşturmak için
Oluşturun ve yeni kaynak havuzları ve iş yükünü grupları yapılandırın.Her Ata iş yükü grubu için uygun kaynak havuzu.
--- Create a resource pool for production processing --- and set limits. USE master GO CREATE RESOURCE POOL pProductionProcessing WITH ( MAX_CPU_PERCENT = 100, MIN_CPU_PERCENT = 50 ) GO --- Create a workload group for production processing --- and configure the relative importance. CREATE WORKLOAD GROUP gProductionProcessing WITH ( IMPORTANCE = MEDIUM ) --- Assign the workload group to the production processing --- resource pool. USING pProductionProcessing GO --- Create a resource pool for off-hours processing --- and set limits. CREATE RESOURCE POOL pOffHoursProcessing WITH ( MAX_CPU_PERCENT = 50, MIN_CPU_PERCENT = 0 ) GO --- Create a workload group for off-hours processing --- and configure the relative importance. CREATE WORKLOAD GROUP gOffHoursProcessing WITH ( IMPORTANCE = LOW ) --- Assign the workload group to the off-hours processing --- resource pool. USING pOffHoursProcessing GO
Bellek içi güncelleştirmek yapılandırma.
ALTER RESOURCE GOVERNOR RECONFIGURE GO
Bir tablo oluşturun ve saat aralık işleme üretim için başlangıç ve bitiş saatlerini tanımlayın.
USE master GO CREATE TABLE tblClassificationTimeTable ( strGroupName sysname not null, tStartTime time not null, tEndTime time not null ) GO --- Add time values that the classifier will use to --- determine the workload group for a session. INSERT into tblClassificationTimeTable VALUES('gProductionProcessing', '6:35 AM', '6:15 PM') go
saat işlevleri ve arama saatler karşı değerlendirilen değerleri kullanır Sınıflandırıcısı işlev oluşturmak tablo.
Not
SQL Server 2008 Genişletilmiş bir tarih ve saat veri türleri ve işlevler küme sunar.Daha fazla bilgi için bkz: Tarih ve Saat İşlevleri (Transact-SQL).
CREATE FUNCTION fnTimeClassifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @strGroup sysname DECLARE @loginTime time SET @loginTime = CONVERT(time,GETDATE()) SELECT TOP 1 @strGroup = strGroupName FROM dbo.tblClassificationTimeTable WHERE tStartTime <= @loginTime and tEndTime >= @loginTime IF(@strGroup is not null) BEGIN RETURN @strGroup END --- Use the default workload group if there is no match --- on the lookup. RETURN N'gOffHoursProcessing' END GO
Sınıflandırıcısı işlev kaydetmelerine ve bellek içi yapılandırma.
ALTER RESOURCE GOVERNOR with (CLASSIFIER_FUNCTION = dbo.fnTimeClassifier) ALTER RESOURCE GOVERNOR RECONFIGURE GO
Kaynak havuzları ve iş yükünü grupları Sınıflandırıcısı kullanıcı tanımlı doğrulamak içinişlev
Kaynak havuzunu elde etmek ve iş yükü grubu aşağıdaki sorguyu kullanarak yapılandırma.
USE master SELECT * FROM sys.resource_governor_resource_pools SELECT * FROM sys.resource_governor_workload_groups GO
Sınıflandırıcısı işlev ve aşağıdaki sorgular kullanarak etkin olduğunu doğrulayın.
--- Get the classifier function Id and state (enabled). SELECT * FROM sys.resource_governor_configuration GO --- Get the classifer function name and the name of the schema --- that it is bound to. SELECT object_schema_name(classifier_function_id) AS [schema_name], object_name(classifier_function_id) AS [function_name] FROM sys.dm_resource_governor_configuration
Aşağıdaki sorguyu kullanarak, kaynak havuzları ve iş yükünü grupları için geçerli çalışma zamanı verileri alır.
SELECT * FROM sys.dm_resource_governor_resource_pools SELECT * FROM sys.dm_resource_governor_workload_groups GO
Ne oturumları her grup aşağıdaki sorguyu kullanarak bulmak.
SELECT s.group_id, CAST(g.name as nvarchar(20)), s.session_id, s.login_time, CAST(s.host_name as nvarchar(20)), CAST(s.program_name AS nvarchar(20)) FROM sys.dm_exec_sessions s INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = s.group_id ORDER BY g.name GO
Hangi istekler içinde her grup aşağıdaki sorguyu kullanarak bulmak.
SELECT r.group_id, g.name, r.status, r.session_id, r.request_id, r.start_time, r.command, r.sql_handle, t.text FROM sys.dm_exec_requests r INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = r.group_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t ORDER BY g.name GO
Ne istekleri Sınıflandırıcısı aşağıdaki sorguyu kullanarak çalıştırıp çalıştırmadığınızı bulmak.
SELECT s.group_id, g.name, s.session_id, s.login_time, s.host_name, s.program_name FROM sys.dm_exec_sessions s INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = s.group_id AND 'preconnect' = s.status ORDER BY g.name GO SELECT r.group_id, g.name, r.status, r.session_id, r.request_id, r.start_time, r.command, r.sql_handle, t.text FROM sys.dm_exec_requests r INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = r.group_id AND 'preconnect' = r.status CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t ORDER BY g.name GO