NSDiagnosticSubscriptionClass (Transact-SQL)
为 Microsoft SQL Server Notification Services 应用程序生成订阅类诊断报告。该报告根据订阅类提供规则触发次数及通知传递等信息,使用这些信息可以解决订阅类处理问题。
语法
[ schema_name . ] NSDiagnosticSubscriptionClass
[ @ApplicationName = ] 'app_name' ,
[ @SubscriptionClassName = ] 'subscription_class_name'
[, [ @ReportingInterval = ] interval ]
[, [ @StartDateTime = ] 'start_date_time' ]
[, [ @EndDateTime = ] 'end_date_time' ]
参数
[ @ApplicationName = ] 'app_name'
应用程序的名称,与配置文件中定义的相同。app_name 的数据类型为 nvarchar(255),无默认值。
[ @SubscriptionClassName = ] 'subscription_class_name'
订阅类的名称,与应用程序定义文件 (ADF) 中定义的相同。subscription_class_name 的数据类型为 nvarchar(255),无默认值。
[ @ReportingInterval = ] interval
是在每个报告间隔中的生成器量程数。对于每个时间间隔,该报表均包含一行。interval 的数据类型为 int,默认值为 1,指示每个时间间隔有一个生成器量程。
量程持续时间是在应用程序定义文件 (ADF) 中定义的。
[ @StartDateTime = ] 'start_date_time'
报告的开始日期和时间,使用 UTC(通用协调时间或格林尼治标准时间)表示。start_date_time 的数据类型为 datetime。默认值为 @EndDateTime - (5 * QuantumDuration * @ReportingInterval)。使用默认值,结果集最多包含五行,每行表示一个报告间隔。
[ @EndDateTime = ] 'end_date_time'
报告的结束日期和时间,使用 UTC 表示。end_date_time 的数据类型为 datetime。默认值是您调用存储过程的时间(使用 UTC 表示)。
返回代码值
0(成功)或 1(失败)
结果集
列名 | 数据类型 | 说明 |
---|---|---|
IntervalStartDateTime |
datetime |
报告间隔的开始日期和时间,使用 UTC 表示。 |
IntervalEndDateTime |
datetime |
报告间隔的结束日期和时间,使用 UTC 表示。 |
SubscriptionsScheduledCount |
int |
在报告间隔期间处理的计划订阅数。 |
AvgScheduledSubscriptionWaitTime |
float |
对于计划在间隔期间处理的订阅,表示订阅的计划时间与生成器处理订阅的实际时间之间的平均滞后时间。 |
AvgScheduledNotificationGenerationTime |
float |
对于计划在间隔期间处理的订阅,表示生成器从计划订阅到创建原始通知数据所花费的平均时间。 |
AvgScheduledSubscriptionRuleFiringTime |
float |
对于计划在间隔期间处理的订阅,表示运行计划订阅规则所花费的平均时间。 |
ScheduledNotificationBatchCount |
int |
对于计划在间隔期间处理的订阅,表示创建的通知批数。 |
ScheduledNotificationCount |
int |
对于计划在间隔期间处理的订阅,表示创建的通知数。 |
AvgScheduledNotificationBatchWaitTillDistribution |
float |
在报告间隔期间从计划订阅生成的通知批次等待分发服务器收集分发通知批次的平均时间。 |
ScheduledNotificationDeliveryAttempts |
int |
对于计划在间隔期间处理的订阅,表示尝试传递通知的次数。 |
ScheduledNotificationSuccessfulDeliveries |
int |
对于计划在间隔期间处理的订阅,表示通知传递成功的次数。 |
ScheduledNotificationFailedAttempts |
int |
对于计划在间隔期间处理的订阅,表示未送达通知传递尝试的次数。 |
ScheduledNotificationsDeliveryNotAttempted |
int |
对于计划在间隔期间处理的订阅,表示尚未尝试传递的通知数。 |
ScheduledNotificationsNotYetDelivered |
int |
对于计划在间隔期间处理的订阅,表示由于未尝试传递或在尝试时失败而尚未传递的通知数。 |
ScheduledNotificationToMessageRatio |
float |
对于计划在间隔期间处理的订阅,表示已生成的通知数与已发送的消息数的比率。 |
AvgScheduledNotificationBatchSucceedDeliveryTime |
float |
对于摘要传递或多播传递,一条消息可以包括多个通知。此列指示摘要消息或多播消息中平均包括多少条通知。 |
备注
创建实例时,Notification Services 会在实例数据库中创建 NSDiagnosticSubscriptionClass 存储过程。在更新实例时,Notification Services 会重新编译该存储过程。
此存储过程位于实例架构中,该实例架构由实例配置文件 (ICF) 的 SchemaName 元素指定。如果没有提供架构名称,默认架构为 dbo。
当计划规则的触发时间大于 IntervalStartDateTime 且小于或等于 IntervalEndDateTime 时,计划订阅将在报告间隔期间发生。
若要确定当前 UTC 日期和时间,请在 SQL Server Management Studio 中运行 SELECT GETUTCDATE()。当前的 UTC 时间源自运行 SQL Server 的计算机操作系统中的当前本地时间和时区设置。
权限
执行权限默认授予 NSAnalysis 和 db_owner 数据库角色以及 sysadmin 固定服务器角色的成员。
示例
A. 指定报告间隔、开始时间和结束时间值
下面的示例为 Flight 应用程序和 FlightSubscriptions 订阅类生成订阅类诊断报告。该实例使用默认的数据库设置,这会将所有实例对象置于 dbo 架构中。
该报表在每个报告间隔中包括 50 个生成器量程。该报告的开始时间为 2004 年 5 月 23 日下午 5:00 点,结束时间为当天下午 6:00 点:
EXEC dbo.NSDiagnosticSubscriptionClass
@ApplicationName = N'Flight',
@SubscriptionClassName = N'FlightSubscriptions',
@ReportingInterval = 50,
@StartDateTime = '2004-05-23 17:00',
@EndDateTime = '2004-05-23 18:00';
B. 使用默认值和命名架构
下面的示例为 Flight 应用程序和 FlightSubscriptions 订阅类生成订阅类诊断报告。在此示例中,存储过程(类似于所有其他实例对象)位于 FlightInstance 架构中,正如 ICF 的 SchemaName 元素中指定的一样。
该报告使用默认值,这些值指定显示过去的五个量程的订阅类数据。
EXEC FlightInstance.NSDiagnosticSubscriptionClass
@ApplicationName = N'Flight',
@SubscriptionClassName = N'FlightSubscriptions';
请参阅
参考
Notification Services 存储过程 (Transact-SQL)
其他资源
Notification Services 性能报告
SchemaName Element (ICF)