How to: Create and Test a Classifier User-Defined Function (Transact-SQL)
W tym temacie opisano sposób tworzenia i testowania funkcja zdefiniowanej przez użytkownika klasyfikatora (UDF).Kroki dotyczą, wykonywanie Transact-SQL instrukcje w SQL Server Management Studio Edytor kwerend. Zaleca się przeczytanie Uwagi dotyczące zapisywania, funkcja klasyfikatora przed kontynuowaniem.
W przykładzie pokazano w poniższej procedurze pokazano możliwości tworzenia dość złożona klasyfikatora funkcja zdefiniowanej przez użytkownika.
W naszym przykładzie:
Pula zasób (pProductionProcessing) i grupa obciążenia (gProductionProcessing) są tworzone dla produkcji przetwarzania w określonym czasie zakres.
Pula zasób (pOffHoursProcessing) i grupa obciążenia (gOffHoursProcessing) są tworzone do obsługi połączeń, które nie spełniają wymagań dotyczących produkcji przetwarzanie.
Tabela (TblClassificationTimeTable) jest tworzony w wzorca do przechowywania rozpoczęcia i zakończenia godzin, które może przyjmować od czas logowania.To musi zostać utworzony w głównego, ponieważ zasób Governor używa wiązanie schematu dla funkcji klasyfikatora.
Uwaga
Najlepiej nie należy przechowywać duże, często aktualizowaną tabel w głównego.
Jak wspomniano w Uwagi dotyczące pisania funkcja klasyfikatora, funkcja Klasyfikator rozszerza czas logowania. Nadmiernie złożonych funkcja może spowodować logowania limitu czas lub spowolnić szybkiego połączenia.
Aby utworzyć funkcja zdefiniowaną przez użytkownika klasyfikatora
Tworzenie i konfigurowanie nowych pul zasób i Obciążenie pracą grupy.Przypisać sobie grupa obciążenia do puli zasób odpowiednie.
--- 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 określić czas rozpoczęcia i zakończenia dla przedziału czasu przetwarzania produkcji.
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 korzysta z funkcja czasu i wartości, które może przyjmować przed czas w tabela wyszukiwania.
Uwaga
SQL Server 2008 wprowadzono rozwinięty zbiór data i czas typów danych i funkcji.Aby uzyskać więcej informacji zobaczData i godzina, Data typy i funkcje (języka 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
Zarejestruj funkcja klasyfikatora i zaktualizować 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 pracą i funkcja zdefiniowanej przez użytkownika klasyfikatora
Konfiguracja grupy puli i Obciążenie zasób można uzyskać, korzystając z 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 czy 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
Uzyskaj aktualne dane środowisko wykonawcze dla puli zasób i Obciążenie pracą grupy za pomocą następującej kwerendy.
SELECT * FROM sys.dm_resource_governor_resource_pools SELECT * FROM sys.dm_resource_governor_workload_groups GO
Dowiedz się, jakie sesje są w każdej z grup, 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