Возникнуть проблемы производительности в Project Server 2010 при быстро увеличивается число записей таблицы тень

Применимо к: Project Server 2010

Симптомы


Число записей таблицы тени, создаваемые увеличению поле корпоративного флага быстро в Microsoft Project Server 2010. Эта проблема приводит к проблемам с производительностью.

Решение


Чтобы устранить эту проблему, применяются следующие исправления:
2597138 Описание пакета исправлений Project Server 2010 (Pjsrvwfe-x-none.msp): 28 февраля 2012 г.


Дополнительные сведения


Это исправление управляет тень записей таблицы таким образом, чтобы не слишком сильно увеличить количество записей. Каждый раз при открытии или сохранить план проекта в Project Professional после применения исправления на сервере Project server записей таблицы тени, которые связаны проекта очищаются. Если вы хотите очистить записи таблицы тени в пакетном режиме, можно использовать следующий сценарий. Перед запуском сценария, убедитесь, что прочитать следующие моменты:
 
  • Создайте резервную копию базы данных Project server перед запуском сценария.
  • Чтобы избежать проблем Непредвиденная базы данных содержимого, остановите службу очереди на серверах приложений Project при отсутствии активности на серверах несколько часов.
  • Проверка сценариев в среде разработки с помощью текущей резервной копии базы данных Project server.
  • Время, время выполнения сценария в среде разработки. Время, необходимое для завершения удаления сценария зависит от SQL server и количество записей, которые необходимо удалить. Убедитесь, что сценарий завершения в рамках запланированного времени.
Для очистки записей таблицы тени в пакетном режиме, выполните следующие действия.
  1. Запустите следующий сценарий на баз данных черновиков и опубликованных и освободить место в базе данных:
    --Clean up       MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW 
    IF object_id('tempdb..#TempTaskCFShadow') IS NOT NULL
    BEGIN
    drop table #TempTaskCFShadow
    END

    CREATE table #TempTaskCFShadow (pid uniqueidentifier, tid uniqueidentifier, revCount int, mdpid uniqueidentifier)

    INSERT #TempTaskCFShadow (pid, tid, revCount, mdpid)
    SELECT PROJ_UID, TASK_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
    FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW
    GROUP BY PROJ_UID , TASK_UID, MD_PROP_UID

    DELETE
    FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW
    FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempTaskCFShadow AS newtable
    where originalTable.MD_PROP_UID = newtable.mdpid AND
    originalTable.PROJ_UID = newtable.pid AND
    originalTable.TASK_UID = newtable.tid AND
    originalTable.DELETED_REV_COUNTER <> newtable.revCount

    DROP TABLE #TempTaskCFShadow

    --Clean up MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
    IF object_id('tempdb..#TempAssnCFShadow') IS NOT NULL
    BEGIN
    drop table #TempAssnCFShadow
    END

    CREATE table #TempAssnCFShadow (pid uniqueidentifier, asid uniqueidentifier, revCount int, mdpid uniqueidentifier)

    INSERT #TempAssnCFShadow (pid, asid, revCount, mdpid)
    SELECT PROJ_UID, assn_uid, MAX(DELETED_REV_COUNTER), MD_PROP_UID
    FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
    GROUP BY PROJ_UID , ASSN_UID, MD_PROP_UID

    DELETE
    FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW
    FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempAssnCFShadow AS newtable
    where originalTable.MD_PROP_UID = newtable.mdpid AND
    originalTable.PROJ_UID = newtable.pid AND
    originalTable.ASSN_UID= newtable.asid AND
    originalTable.DELETED_REV_COUNTER <> newtable.revCount

    DROP TABLE #TempAssnCFShadow


    --Clean up MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
    IF object_id('tempdb..#TempProjResCFShadow') IS NOT NULL
    BEGIN
    drop table #TempProjResCFShadow
    END

    CREATE table #TempProjResCFShadow (pid uniqueidentifier, resid uniqueidentifier, revCount int, mdpid uniqueidentifier)

    INSERT #TempProjResCFShadow (pid, resid, revCount, mdpid)
    SELECT PROJ_UID, RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
    FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
    GROUP BY PROJ_UID , RES_UID, MD_PROP_UID

    DELETE
    FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW
    FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjResCFShadow AS newtable
    where originalTable.MD_PROP_UID = newtable.mdpid AND
    originalTable.PROJ_UID = newtable.pid AND
    originalTable.RES_UID = newtable.resid AND
    originalTable.DELETED_REV_COUNTER <> newtable.revCount

    DROP TABLE #TempProjResCFShadow


    --Clean up MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
    IF object_id('tempdb..#TempProjCFShadow') IS NOT NULL
    BEGIN
    drop table #TempProjCFShadow
    END

    CREATE table #TempProjCFShadow (pid uniqueidentifier, revCount int, mdpid uniqueidentifier)

    INSERT #TempProjCFShadow (pid, revCount, mdpid)
    SELECT PROJ_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
    FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
    GROUP BY PROJ_UID , MD_PROP_UID

    DELETE
    FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW
    FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjCFShadow AS newtable
    where originalTable.MD_PROP_UID = newtable.mdpid AND
    originalTable.PROJ_UID = newtable.pid AND
    originalTable.DELETED_REV_COUNTER <> newtable.revCount

    DROP TABLE #TempProjCFShadow
  2. Запустите следующий сценарий для базы данных публикации после выполнения сценария из шага 1 баз данных черновиков и опубликованных:
    --Clean up MSP_RES_CUSTOM_FIELD_VALUES_SHADOW

    IF object_id('tempdb..#TempResCFShadow') IS NOT NULL
    BEGIN
    drop table #TempResCFShadow
    END

    CREATE table #TempResCFShadow (resid uniqueidentifier, revCount int, mdpid uniqueidentifier)

    INSERT #TempResCFShadow (resid, revCount, mdpid)
    SELECT RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID
    FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW
    GROUP BY RES_UID, MD_PROP_UID

    DELETE
    FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW
    FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempResCFShadow AS newtable
    where originalTable.MD_PROP_UID = newtable.mdpid AND
    originalTable.RES_UID = newtable.resid AND
    originalTable.DELETED_REV_COUNTER <> newtable.revCount

    DROP TABLE #TempResCFShadow


Статус


Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".