Share via


撰寫分類函數的考量

資源管理員支援使用者定義的函數,而且其傳回值會用於分類工作階段,然後將這些工作階段路由傳送至適當的工作負載群組。

您應該先測試並最佳化分類使用者定義函數,然後再將它用於分類內送要求。撰寫不夠周全的函數可能會將系統呈現為因逾時而無法使用,接著可能會公開組態資訊。此時,您可以使用專用管理員連接 (DAC) 來疑難排解撰寫不夠周全的分類函數,因為 DAC 不受分類限制而且可以在資源管理員執行和分類內送工作階段時使用。如需詳細資訊,請參閱<使用專用管理員連接>。

[!附註]

如果 DAC 無法用於疑難排解,您可以在單一使用者模式中重新啟動系統。雖然單一使用者模式不受分類限制,但是您無法在資源管理員分類執行時進行診斷。

您可以在分類函數中使用現有的系統函數,而且可以將這些函數傳回的值用於分類工作階段。

函數

下列系統函數可用於分類:HOST_NAME()、APP_NAME()、SUSER_NAME()、SUSER_SNAME()、IS_SRVROLEMEMBER() 和 IS_MEMBER()。

警告注意事項注意

當您建立傳回可用於分類之屬性的函數時,就必須考慮該屬性是否安全。如果不安全,您就必須評估使用該屬性的風險。HOST_NAME() 和 APP_NAME() 函數會傳回不安全的屬性。例如,APP_NAME() 可能會傳回在應用程式連接字串中提供的任何值。

LOGINPROPERTY 函數已經使用可讓您用於分類的兩個屬性更新:DefaultDatabase 和 DefaultLanguage。此外,您可以使用 ORIGINAL_DB_NAME 函數來取得使用者連接字串中指定的資料庫名稱。

資源管理員也會實作 CONNECTIONPROPERTY 函數來提供可讓您用於分類的其他屬性。這個函數會針對提出要求之唯一連接的屬性傳回相同的值,當做 sys.dm_exec_connections 動態管理檢視中的對應資料行。