如何清理SSISDB?
当我设置这个时,我忽略了保留期.我的数据库变得很大,所以我想减小它的大小.如果我只是更改保留期(365),会导致SSIS运行我的软件包的问题.我甚至以小增量更改它,但删除语句将创建将阻止新作业运行的锁.
任何想法如何解决这个问题?我已经考虑过只是创建一个新的SSISDB. 解决方法菲尔·布拉默(Phil Brammer)遇到了许多其他与SSIS目录保养和喂养有关的其他事情,他的职位是 Catalog Indexing Recommendations.根问题 根本的问题是,MS试图用RI设计SSIS,但是它们是懒惰的,允许级联删除发生,而不是显式处理它们.
解析度 直到MS更改事情的工作原理,支持的选项是
我知道在目前的客户端,我们只是在几小时内加载数据,所以SSISDB在工作时间安静. 如果在安静期间运行维护工作不是一个选择,那么您正在制定自己的删除语句来尝试将级联删除更少. 在我目前的客户端,我们已经在过去10个月里每晚运行约200个包裹,也是365天的历史.我们最大的桌子,一个数量级. Schema Table RowCount internal event_message_context 1,869,028 internal operation_messages 1,500,811 internal event_messages 1,803 所有这些数据的驱动程序,内部操作只有3300行,这符合菲尔关于数据增长呈指数形式的评论. 所以,识别要清除的operation_id和从叶表中删除的内核,内部操作表. USE SSISDB; SET NOCOUNT ON; IF object_id('tempdb..#DELETE_CANDIDATES') IS NOT NULL BEGIN DROP TABLE #DELETE_CANDIDATES; END; CREATE TABLE #DELETE_CANDIDATES ( operation_id bigint NOT NULL PRIMARY KEY ); DECLARE @DaysRetention int = 100; INSERT INTO #DELETE_CANDIDATES ( operation_id ) SELECT IO.operation_id FROM internal.operations AS IO WHERE IO.start_time < DATEADD(day,-@DaysRetention,CURRENT_TIMESTAMP); DELETE T FROM internal.event_message_context AS T INNER JOIN #DELETE_CANDIDATES AS DC ON DC.operation_id = T.operation_id; DELETE T FROM internal.event_messages AS T INNER JOIN #DELETE_CANDIDATES AS DC ON DC.operation_id = T.operation_id; DELETE T FROM internal.operation_messages AS T INNER JOIN #DELETE_CANDIDATES AS DC ON DC.operation_id = T.operation_id; -- etc -- Finally,remove the entry from operations DELETE T FROM internal.operations AS T INNER JOIN #DELETE_CANDIDATES AS DC ON DC.operation_id = T.operation_id; 通常需要注意 参考 > Catalog Indexing Recommendations (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |