zoukankan      html  css  js  c++  java
  • How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011

    https://support.microsoft.com/en-us/kb/2664150

     

    How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011

    SYMPTOMS
    After you use Microsoft Dynamics CRM 2011, you may notice that the size of the SQL table PrincipalObjectAccess grows and could be using a large percentage of the database size.
    CAUSE
    When records are deleted in Microsoft Dynamics CRM, the related PrincipalObjectAccess records are not removed.
    RESOLUTION
    Apply Update Rollup 6, and then execute the script that is documented here. This script must be executed only one time after you apply Update Rollup 6. Update Rollup 6 and future Update Rollups will fix this known issue.

    SQL Script To Execute
    --Replace the text "Replace With DatabaseName" with your database name
    
    --For Example
    
    --USE [AdventureWorksCycle_MSCRM]
    USE [<Replace With DatabaseName>]
    GO
    
    BEGIN TRY
    BEGIN TRAN t1 
    
    
    IF NOT EXISTS (SELECT * FROM sys.sysobjects
    
    WHERE id = object_id(N'[dbo].[ToDeletePOAEntries]')
    
    AND ObjectProperty(id, N'IsUserTable') = 1)
    
    
    create table ToDeletePoaEntries
    (
    ObjectId uniqueidentifier,
    Otc int
    )
    
    
    IF NOT EXISTS (SELECT * FROM sys.sysindexes si
    
    INNER JOIN sys.sysobjects so ON si.id = so.id
    
    WHERE so.id = OBJECT_ID(N'[dbo].[ToDeletePoaEntries]')
    
    AND OBJECTPROPERTY(so.id, N'IsUserTable') = 1
    
    AND si.name LIKE '%mainindex%')
    
    
    CREATE UNIQUE NONCLUSTERED INDEX [mainindex] ON [dbo].[ToDeletePoaEntries] 
    (
    [ObjectId] ASC,
    [Otc] ASC
    )WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    
    ----- Insert records to be deleted in ToDeletePoaEntries
    
    -- go through all user-owned entities which are not replicated and don't support duplicate detection
    declare entity_cursor cursor local FORWARD_ONLY READ_ONLY
    for select distinct e.ObjectTypeCode, e.BaseTableName, a.PhysicalName from EntityView e
    inner join AttributeView a on e.EntityId = a.EntityId and a.IsPKAttribute = 1
    where e.IsReplicated = 0 and e.IsDuplicateCheckSupported = 0 and e.OwnershipTypeMask & 1 = 1
    
    open entity_cursor
    
    declare @baseTableName sysname
    declare @otc nvarchar(20)
    declare @primaryKey sysname
    declare @totalCollected int = 0
    declare @currentCollected int
    
    declare @tempRowCount int = 0
    declare @collectstatement nvarchar(max)
    
    fetch next from entity_cursor
    into @otc, @baseTableName, @primaryKey
    
    while @@FETCH_STATUS = 0
    begin
    print 'Cleaning up POA for ' + @baseTableName
    
    set @currentCollected = 0
    
    
    
    set @collectstatement = 'insert into ToDeletePoaEntries(ObjectId, Otc) 
    select distinct poa.ObjectId, poa.ObjectTypeCode 
    from PrincipalObjectAccess poa
    left join ' + @baseTableName + ' e on poa.ObjectId = e.' + @primaryKey + 
    ' where e.' + @primaryKey + ' is null and poa.ObjectTypeCode = ' + @otc;
    
    print @collectstatement
    
    exec(@collectstatement)
    set @tempRowCount = @@ROWCOUNT
    set @currentCollected = @currentCollected + @tempRowCount
    print CAST(@currentCollected as nvarchar(20)) + ' records collected for ' + @baseTableName
    set @totalCollected = @totalCollected + @currentCollected
    
    fetch next from entity_cursor
    into @otc, @baseTableName, @primaryKey
    end
    
    close entity_cursor
    deallocate entity_cursor
    
    print CAST(@totalCollected as nvarchar(20)) + ' total records collected'
    
    -- Delete query
    
    
    -- This scripts cleans up orphaned POA records for selected entities
    
    declare @deleteBatchSize int = 50000
    declare @deleteBatchSizeNVarChar nvarchar(10) = CAST(@deleteBatchSize as nvarchar(10))
    declare @totalDeleted int = 0
    declare @currentDeleted int
    declare @deletestatement nvarchar(max)
    
    set @currentDeleted = 0
    set @tempRowCount = 0
    
    -- delete all records of the current entity type which don't have corresponding object in the base table
    set @deletestatement = 'delete top (' + @deleteBatchSizeNVarChar + ') from PrincipalObjectAccess
    from PrincipalObjectAccess poa
    join ToDeletePoaEntries e on poa.ObjectId = e.ObjectId and poa.ObjectTypeCode = e.Otc'
    
    print @deletestatement
    
    -- delete PrincipalObjectAccess records in batches
    exec(@deletestatement)
    set @tempRowCount = @@ROWCOUNT
    set @currentDeleted = @currentDeleted + @tempRowCount
    
    while @tempRowCount = @deleteBatchSize
    begin
    exec(@deletestatement)
    set @tempRowCount = @@ROWCOUNT
    set @currentDeleted = @currentDeleted + @tempRowCount
    
    print CAST(@currentDeleted as nvarchar(20)) + ' records deleted ' + cast(getUtcdate() as nvarchar(50))
    --cleanup
    
    end
    
    COMMIT TRAN t1
    
    -- Cleanup
    
    DROP Table [dbo].[ToDeletePoaEntries]
    PRINT 'EXECUTION SUCCEED'
    END TRY
    BEGIN CATCH
    ROLLBACK TRAN t1
    
    -- Cleanup
    
    DROP Table [dbo].[ToDeletePoaEntries]
    
    PRINT 'EXECUTION FAILED :' + ERROR_MESSAGE()
    END CATCH


    MORE INFORMATION
    This script only needs to be run one time after Update Rollup 6 or a future Update Rollup is installed. After the script is run to clean up the PrincipalObjectAccess table, the script does not need to be run after any future Update Rollup installations.
    Properties

    Article ID: 2664150 - Last Review: 06/27/2012 12:54:00 - Revision: 6.0

    Microsoft Dynamics CRM 2011
    • kbmbsmigrate kbsurveynew KB2664150
  • 相关阅读:
    mysqlnd cannot connect to MySQL 4.1+ using old authentication
    nginx中查看关于php的配置和php-fpm的重启等操作
    nginx中查看关于php的配置和php-fpm的重启等操作
    linux面试题1
    linux笔试
    面试题
    shell脚本实例
    shell脚本
    mysql主从复制
    Discuz!NT静态文件缓存(SQUID)
  • 原文地址:https://www.cnblogs.com/BinBinGo/p/5748406.html
Copyright © 2011-2022 走看看