core.sp_purge_data (Transact-SQL)

基于保留策略从管理数据仓库中删除数据。 此过程由 mdw_purge_data SQL Server 代理作业对与指定的实例关联的管理数据仓库每天执行。 可以使用此存储过程从管理数据仓库中执行数据的按需删除。

主题链接图标 Transact-SQL 语法约定

语法

core.sp_purge_data
    [ [ @retention_days = ] retention_days ]
    [ , [ @instance_name = ] 'instance_name' ]
    [ , [ @collection_set_uid = ] 'collection_set_uid' ]
    [ , [ @duration = ] duration ]

参数

  • [@retention_days =] retention_days
    管理数据仓库表中的数据的保留天数。 时间戳超过 retention_days 的数据将被删除。 retention_days 的数据类型为 smallint,默认值为 NULL。 如果指定,该值必须是正数。 为 NULL 时,core.snapshots 视图中的 valid_through 列中的值决定了符合删除条件的行。

  • [@instance_name = ] 'instance_name'
    收集组实例的名称。 instance_name 的数据类型为 sysname,默认值为 NULL。

    instance_name 必须是完全限定的实例名称,由计算机名称和实例名称组成,格式为 computername\instancename。 为 NULL 时,使用本地服务器上的默认实例。

  • [@collection_set_uid = ] 'collection_set_uid'
    收集组的 GUID。 collection_set_uid 的数据类型为 uniqueidentifier,默认值为 NULL。 为 NULL 时,将删除所有收集组中的限定行。 若要获得此值,请查询 syscollector_collection_sets 目录视图。

  • [@duration = ] duration
    清除操作应当运行的最长分钟数。 duration 的数据类型为 smallint,默认值为 NULL。 如果指定,则该值必须是零或正整数。 为 NULL 时,操作将一直运行,直到删除所有符合条件的行或手动停止操作。

返回代码值

0(成功)或 1(失败)

注释

此过程将基于保留期选择 core.snapshots 视图中符合删除条件的行。 符合删除限定的所有行将从 core.snapshots_internal 表中删除。 删除位于前面的行将在所有管理数据仓库表中触发级联删除操作。 通过使用 ON DELETE CASCADE 子句可以完成此操作,该子句是为用于存储收集的数据的所有表定义的。

每个快照及其关联的数据都将在显式事务中删除,然后提交。 因此,如果手动停止清除操作,或超过为 @duration 指定的值,则只保留未提交的数据。 此数据可以在下一次运行作业时删除。

此过程必须在管理数据仓库数据库的上下文中执行。

权限

要求具有 mdw_admin(具有 EXECUTE 权限)固定数据库角色的成员身份。

示例

A.无参数运行 sp_purge_data

下面的示例在不指定任何参数的情况下执行 core.sp_purge_data。 因此,默认值 NULL 及关联行为将用于所有参数。

USE <management_data_warehouse>;
EXECUTE core.sp_purge_data;
GO

B.指定保留期和持续时间值

下面的示例从管理数据仓库中删除超过 7 天的数据。 此外,指定了 @duration 参数,使操作运行时间不超过 5 分钟。

USE <management_data_warehouse>;
EXECUTE core.sp_purge_data @retention_days = 7, @duration = 5;
GO

C.指定实例名称和收集组

下面的示例从指定的 SQL Server 实例上的给定收集组的管理数据仓库中删除数据。 由于未指定 @retention\_days,因此将使用 core.snapshots 视图中的 valid_through 列中的值来确定收集组中符合删除条件的行。

USE <management_data_warehouse>;
GO
-- Get the collection set unique identifier for the Disk Usage system collection set.
DECLARE @disk_usage_collection_set_uid uniqueidentifier = (SELECT collection_set_uid 
    FROM msdb.dbo.syscollector_collection_sets WHERE name = N'Disk Usage'); 

EXECUTE core.sp_purge_data @instance_name = @@SERVERNAME, @collection_set_uid = @disk_usage_collection_set_uid;
GO

请参阅

参考

系统存储过程 (Transact-SQL)

数据收集器存储过程 (Transact-SQL)