"Unable to send update on component PolicyTargetEvalNotify_iud" is repeatedly logged in Smsdbmon.log after you update to Configuration Manager version 1810

Applies to: System Center Configuration Manager (current branch - version 1810)

Symptoms


After you update to System Center Configuration Manager current branch version 1810, one or more of the following warning messages are repeatedly logged in Smsdbmon.log:

  • WARNING: Unable to send update on component PolicyTargetEvalNotify_iud
  • WARNING: Unable to send update on component PolicyTargetEvalNotify_ColMember_iu
  • WARNING: Unable to send update on component PolicyAssignmentChg_Notify_iu
  • WARNING: Unable to send update on component PolicyTargetEvalNotify_iud_upd

Because of the backlog in the TableChangeNotifications table generated by these triggers, you may experience issues such as slow content distribution.

Cause


During the setup of Configuration Manager version 1810, the following triggers are removed:

  • SMSDBMON_Collections_L_PolicyTargetEvalNotify_iud_ins
  • SMSDBMON_Collection_MemberChg_Notif_PolicyTargetEvalNotify_ColMember_iu_ins
  • SMSDBMON_PolicyAssignmentChg_Notify_PolicyAssignmentChg_Notify_iu_ins
  • SMSDBMON_Collections_L_PolicyTargetEvalNotify_iud_upd

In some cases, the SMS_EXCUTIVE (SMSExec.exe) starts during the setup. When this occurs, the SMS DB Monitor (SMSDBMon.exe) re-creates the triggers using the values from the cached registry key located at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Triggers\<SiteCode>.

To verify that this is the issue, compare the time that the update starts in CMUpdate.log and the time that SMSExec starts in the System event log to determine whether SMSExec starts after the setup runs.

You can also identify when the SMSDBMON component starts and stops by running the following query:

select * from StatusMessages where Component = 'SMS_DATABASE_NOTIFICATION_MONITOR' and MessageID in (500, 501, 502, 503, 504) order by Time DESC

Resolution


To fix this issue, update to Configuration Manager version 1902.

To work around this issue in Configuration Manager version 1810:

  1. Run the registry editor and locate the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Triggers\<SiteCode of the affected site> registry key, and then determine whether the following registry values exist:
    • PolicyTargetEvalNotify_iud
    • PolicyTargetEvalNotify_ColMember_iu
    • PolicyAssignmentChg_Notify_iu
  2. If the values exist, delete them.
  3. To drop the triggers from the database, run the following SQL statements on the site database that experiences this issue:

    IF OBJECT_ID('tempdb..#temp') IS NOT NULL
        DROP TABLE #temp
    select name
    INTO #temp
    from sys.objects where type = 'TR' and name in
    ('SMSDBMON_Collections_L_PolicyTargetEvalNotify_iud_ins', 'SMSDBMON_Collection_MemberChg_Notif_PolicyTargetEvalNotify_ColMember_iu_ins', 'SMSDBMON_PolicyAssignmentChg_Notify_PolicyAssignmentChg_Notify_iu_ins','SMSDBMON_Collections_L_PolicyTargetEvalNotify_iud_upd')
    IF Exists (select 1 from #temp)
    BEGIN
    declare @name NVARCHAR(255)
    declare @sql NVARCHAR(255)
    DECLARE DELETE_OLD_TRIGGERS CURSOR FOR
        SELECT A.Name FROM #temp AS A
    OPEN DELETE_OLD_TRIGGERS;
    FETCH NEXT FROM DELETE_OLD_TRIGGERS INTO @name;
    WHILE @@FETCH_STATUS = 0
       BEGIN
            SET @sql = 'DROP TRIGGER ' + @name;
            EXECUTE(@SQL);
         FETCH NEXT FROM DELETE_OLD_TRIGGERS INTO @name;
       END;
    CLOSE DELETE_OLD_TRIGGERS;
    DEALLOCATE DELETE_OLD_TRIGGERS;
    END

  4. To clean the TableChangeNotifications table, run the following SQL statements :

    WHILE 1=1
      BEGIN
        DELETE TOP(1000) FROM TableChangeNotifications
        WHERE ((Component = 'PolicyTargetEvalNotify_iud' AND TableName = 'Collections_L') OR
               (Component = 'PolicyTargetEvalNotify_ColMember_iu' AND TableName = 'Collection_MemberChg_Notif') OR
               (Component = 'PolicyAssignmentChg_Notify_iu' AND TableName = 'PolicyAssignmentChg_Notify') OR
               (Component = 'PolicyTargetEvalNotify_iud_upd'  AND TableName = 'Collections_L'))
     
        IF @@ROWCOUNT <= 0
          BREAK;
    END