Jak Tworzenie funkcji zdefiniowanej przez użytkownika klasyfikatora (Transact-SQL)
W tym temacie przedstawiono sposób tworzenia i testowania funkcja zdefiniowanej przez użytkownika klasyfikatora (UDF).Obejmują czynności wykonywanych Transact-SQL instrukcji w SQL Server Management Studio Edytor kwerend.Zaleca się przeczytanie Zagadnienia dotyczące pisania funkcji klasyfikatora przed kontynuowaniem.
Przykładzie pokazano w poniższej procedurze przedstawiono możliwości tworzenia zdefiniowanej przez użytkownika funkcja klasyfikatora dość złożona.
W naszym przykładzie:
Pula zasób (pProductionProcessing) i grupa obciążenia (gProductionProcessing) są tworzone dla produkcji, przetwarzania podczas określonego czas zakres.
Pula zasób (pOffHoursProcessing) i grupa obciążenia (gOffHoursProcessing) są tworzone dla obsługi połączeń, które nie spełniają wymagań dla produkcji przetwarzania.
Tabela (TblClassificationTimeTable) jest tworzony w master przytrzymaj rozpoczęcia i zakończenia godzin, które można ocenić jako czas logowania.To musi zostać utworzony w wzorca ponieważ Resource Governor używa powiązanie schematu dla funkcji klasyfikatora.
Ostrzeżenie
Najlepiej, nie należy przechowywać dużych, często aktualizowanych tabel w master.
Jak zauważono w Zagadnienia dotyczące pisania funkcji klasyfikatora, funkcja Klasyfikator rozszerza logowania czas.Funkcja zbyt skomplikowane, może spowodować logowania do czas out lub spowolnić szybkich połączeń.
Aby utworzyć funkcja zdefiniowaną przez użytkownika klasyfikatora
Utwórz i skonfiguruj nowych pul zasób i obciążenie grupy.Każda grupa obciążenia należy przypisać do puli zasób odpowiednich.
--- 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
Aktualizacja konfiguracja w pamięci.
ALTER RESOURCE GOVERNOR RECONFIGURE GO
Tworzenie tabela i zdefiniowanie rozpoczęcia i zakończenia czass do przetwarzania w produkcji czas zakres.
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
Tworzenie funkcja klasyfikatora, który używa czas funkcja i wartości, które można ocenić jako przeciwko czass tabela odnośników.
Ostrzeżenie
SQL Server 2008 przedstawia rozwinięty zestaw datę i czas typów danych i funkcji.Aby uzyskać więcej informacji, zobacz Funkcje daty i godziny (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
Rejestrowanie funkcja klasyfikatora i aktualizowanie konfiguracja w pamięci.
ALTER RESOURCE GOVERNOR with (CLASSIFIER_FUNCTION = dbo.fnTimeClassifier) ALTER RESOURCE GOVERNOR RECONFIGURE GO
Aby sprawdzić pule zasób, grup obciążenia i funkcja zdefiniowanej przez użytkownika klasyfikatora
Uzyskania puli zasób i grupa obciążenia konfigurację za pomocą następującej kwerendy.
USE master SELECT * FROM sys.resource_governor_resource_pools SELECT * FROM sys.resource_governor_workload_groups GO
Sprawdź, czy funkcja Klasyfikator istnieje i jest włączone za pomocą następującej kwerendy.
--- 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
Uzyskać bieżące dane runtime pule zasób i obciążenie grup przy użyciu następującej kwerendy.
SELECT * FROM sys.dm_resource_governor_resource_pools SELECT * FROM sys.dm_resource_governor_workload_groups GO
Dowiedz się, sesje są w każdej grupie, za pomocą następującej kwerendy.
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
Dowiedz się, które żądania są w każdej grupie za pomocą następującej kwerendy.
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
Dowiedz się, jakie żądania są uruchomione w klasyfikatorze za pomocą następującej kwerendy.
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