Symptômes
Le nombre d’enregistrements de table de clichés instantanés qui sont générés dans une augmentation de champ Entreprise Indicateur rapidement dans Microsoft Project Server 2010. Ce problème entraîne des problèmes de performances.
Résolution
Pour résoudre ce problème, appliquez le correctif logiciel suivant :
Description de 2597138 du package de correctifs logiciels pour Project Server 2010 (Pjsrvwfe-x-none.msp) : 28 février 2012
Plus d'informations
Ce correctif gère le nombre d’enregistrements de table de clichés instantanés afin que le nombre d’enregistrements n’augmente pas trop. Chaque fois que vous ouvrez ou enregistrez un plan de projet dans Project Professional après avoir appliqué le correctif sur le serveur Project server, enregistrements de la table de clichés instantanés qui sont pertinents pour le projet sont nettoyées. Si vous souhaitez nettoyer les enregistrements de la table de clichés instantanés en bloc, vous pouvez utiliser le script suivant. Avant d’exécuter le script, assurez-vous que vous lisez les points suivants :
-
Effectuer une sauvegarde de la base de données de Project server avant d’exécuter le script.
-
Pour éviter les problèmes de contenu inattendue de la base de données, arrêtez le Service de file d’attente sur les serveurs d’application de projet lorsqu’il n’y a eu aucune activité sur les serveurs pendant plusieurs heures.
-
Valider le script dans un environnement de développement à l’aide de la sauvegarde de la base de données de Project server.
-
Heure à laquelle le temps nécessaire pour exécuter le script dans l’environnement de développement. Le temps nécessaire pour exécuter le script de suppression dépend le serveur SQL et le nombre d’enregistrements qui doivent être supprimées. Assurez-vous que le script est achevé dans les temps prévu.
Pour nettoyer les enregistrements de la table de clichés instantanés en vrac, procédez comme suit :
-
Exécutez le script suivant sur le brouillon et publié des bases de données et récupérer l’espace libre dans les bases de données :
--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
-
Exécutez le script suivant sur la base de données publiée après avoir exécuté le script de l’étape 1 sur le brouillon et publié des bases de données :
--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
État
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».