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 à ».