Microsoft Office Project Server 2007 队列系统

更新时间: 2009年5月

 

上一次修改主题: 2015-03-09

本文内容:

  • 概述

  • 队列过程

  • 队列体系结构

  • 项目队列和时间表队列

  • 队列部署

  • 队列分组

  • 队列状态

  • 队列管理

  • 管理队列

本文介绍 Microsoft Office Project Server 2007 队列系统,它在此版本的 Project Server 中是一项重要的新功能。本文概述以下方面的内容:队列系统、队列过程和体系结构、队列作业的分组方法、队列作业可能处于的状态,以及如何通过 Microsoft Office Project Web Access 用户界面管理队列。

概述

队列是指排队等待的行列;当服务请求数超过最佳服务能力时,需要用到队列。在企业项目管理系统中,出现这种情况的场合有几种,例如:

  • 在周五快下班时,某小公司几乎所有 500 名员工均提交其时间表。

  • 在召开团队状态会议前的几小时内,几乎所有项目经理均发布其项目。

Office Project Server 2007 队列系统的用途是,以从容不迫和可靠的方式处理这些需求上的突然变化。Office Project Server 2007 队列系统获取所有用户输入、在 Microsoft SQL Server 中记录请求条目,然后在先来先服务的基础上以异步方式处理数据。建立队列可确保 Office Project Server 2007 EPM 解决方案不会在出现需求高峰时停止工作。

Office Project Server 2007 系统中几乎所有重要的操作均要经由 Office Project Server 2007 队列系统进行。这些操作包括:

  • 项目保存

  • 项目发布

  • 时间表保存

  • 时间表提交

  • 项目备份/恢复

  • 报表数据服务操作

  • 多维数据集生成服务操作

  • 服务器端计划(和节点一致性处理)

Project Server 队列系统具有以下优点:

  • 可靠性

    1. 数据完整性:利用明确定义的协议来保存队列中的任何作业。如果某作业仅保存了一半,则不会处理它。此外,所有作业均保存到 SQL Server 而不是文件系统中,并利用 SQL Server 的事务。

    2. 按序传递:如果 Project Professional 的用户单击“保存”,再单击“发布”,则 Project 队列系统会确保先处理“保存”作业,再处理“发布”作业。

    3. 容错:可以重试队列中的失败作业。此外,当队列 NT 服务的多个实例正在运行时,如果它们中的某个停止响应,则另一个会自动承载额外的负载(此过程称为透明故障转移)。

  • 可伸缩性

    1. 多线程处理:Office Project Server 2007 队列系统可以同时处理多项作业。例如,可以同时处理项目 1 保存、项目 2 发布和多维数据集生成作业。

    2. 可以直接添加更多的中间层服务器以更好地处理负载。每台中间层服务器均将具有 Project 队列服务,而且负载将自动平衡。

    3. 队列中的作业数量仅受限于 SQL Server 的伸缩限制。

  • 可管理性

队列过程

下图演示队列过程:

Project Server 2007 队列进程

  1. 用户从客户端应用程序发起服务器请求(例如从 Project Professional 发布项目)。用户在请求中传递作业标识号(即用来跟踪请求的唯一标识符)。

  2. Project Web 服务提取请求并将它放入队列中。

  3. 作为确认,将向用户颁发作业标识号。

  4. 用户通过颁发的作业标识号进行查询,以检查请求的状态。

  5. Office Project Server 2007 队列系统将请求的状态返回给用户。

队列体系结构

Project Server 队列系统的逻辑体系结构由以下四个模块组成。

  • 作业存储

  • 作业轮询

  • 作业处理

  • 作业状态检查和管理

在请求由 Project Server 队列服务组成时(例如添加或处理作业或者检索状态),这些模块作为一个整体工作,以执行必需的任务。本节详细介绍此过程。

队列模块

队列 NT 服务作为设置的一部分,安装在每台 Project Server 应用程序服务器计算机上。它为场中定义的每个共享服务提供程序 (SSP) 启动一个“队列工作进程”。队列工作进程为与其 SSP 关联的所有 Project Web Access (PWA) 实例提供服务,并在“SSP 管理员”标识下运行。在浏览本节的其余内容时,请记住此部署模型。有关详细信息,请参阅本文后面的队列部署。

Project Server 2007 队列 NT 服务

Project Server 队列系统由以下四个模块组成:

  1. 作业存储:队列作业存储在草稿和已发布的 Project Server 数据库中。这样一来,在正常的 Project Server 数据库备份和恢复例程中,也会备份和还原作业。

    作业存储

  2. 作业轮询:作业轮询线程按固定间隔轮询作业存储,以检查有无新作业。轮询间隔由管理员在 Project Web Access 的“队列管理”页中配置。

    作业轮询

    1. 队列工作进程为它所服务的每个 PWA 实例启动作业轮询线程。作业轮询线程在“队列工作进程”进程内运行,并在“队列工作进程”标识下运行。

    2. 作业轮询线程具有两个主属性:

      属性 说明

      类型

      给定的作业轮询线程可以是“项目作业轮询线程”(查找与项目相关的作业)或“时间表作业轮询线程”(查找与时间表相关的作业)。

      Project Web Access 实例

      每个作业轮询线程都查找起源于 Project Web Access 的特定实例的作业。

  3. 作业处理:作业轮询线程会为它找到的每项作业生成一个作业处理线程。管理员可以配置作业处理线程的最大数量。请注意,作业处理线程驻留在“队列 NT 服务”进程内,并在“队列 NT 服务”标识下运行。

    Project Server 2007 - 队列作业处理

  4. 作业状态检查和管理:这是最终用户看到的 Project Server 队列的模块。

    作业状态检查和管理

    1. Project Web Access 的“管理队列”页:管理员使用此页查看队列中任何作业的状态。他们还可以取消或重试失败的作业。此功能是 PWA 的一部分,用户无需下载特殊的工具。

    2. Project Web Access 的“队列设置”页:管理员可以查看或更改队列的设置,例如轮询间隔和作业处理线程的最大数量。此功能是 PWA 的一部分,用户无需下载特殊的工具。

    3. Project Web Access 的“我的排队作业”页:任何用户都可以使用此界面检查作业的状态。此功能是 PWA 的一部分,用户无需下载特殊的工具。

    4. 队列状态 PSI:软件开发人员可以使用这些 API 获取任何队列作业的状态。可以使用几个很有效的筛选器来缩窄搜索范围。

全体模块如何协同工作

当系统接到任务以执行请求(例如添加作业、处理作业和检索作业状态)时,Project Server 队列系统的模块必须互相配合,并作为一个整体工作。

添加作业

可以通过许多种方式将作业添加到队列中。例如,项目经理可以通过 Project Professional 保存项目,团队成员可以提交时间表,或者第三方应用程序可以发布项目。在执行这些操作中的每一项时,都会调用 Project Server 接口 (PSI) 中的元素,从而将适当的作业添加到队列中。

添加作业 -- 体系结构

作业处理

作业处理出现在不同的阶段中,并涉及到不同模块之间的交互:

  1. 启动队列工作进程:在队列 NT 服务启动时,它为场中定义的每个共享服务提供程序启动一个队列工作进程。队列 NT 服务应一直运行,以便 Project 队列系统正常工作。

  2. 启动作业轮询线程:在队列工作进程启动时,它会启动作业轮询线程,这些线程特定于 Project Web Access 的实例。

  3. 获取新作业:轮询线程在项目数据库中查找新作业。

  4. 创建作业处理线程:如果有新作业,则会创建作业处理线程。

  5. 写入状态:在作业处理线程完成时,会将作业的状态(成功或失败)写回到数据库中。

    Project Server 2007 作业处理队列

检索状态

可以通过不同的方式检查作业状态。管理员可以使用 Project Web Access 的“队列管理”页,团队成员可以使用“我的排队作业”页,或者软件开发人员可以使用队列 PSI 方法通过编程来获取状态。有关 PSI 方法的详细信息,请参阅在线的 MSDN Library 中的 Project 2007 SDK 文档(该链接可能指向英文页面) (https://msdn.microsoft.com/zh-cn/library/bb187390.aspx)。

Project Server 2007 作业状态检查

项目队列和时间表队列

Office Project Server 2007 队列系统由两个独立的队列组成:

  1. 项目队列   主要用于与项目相关的消息,例如保存、发布、报告和多维数据集生成(虽然也可以将其他类型的消息发送到此队列)。它的表格和存储过程都存储在 Office Project Server 2007 草稿数据库中。

  2. 时间表队列   主要用于与时间表相关的消息,例如时间表保存和时间表提交(虽然也可以将其他类型的消息发送到此队列)。它的表格和存储过程都存储在 Office Project Server 2007 已发布的数据库中。

对于这两个队列,除了它们的作业驻留在不同的数据库中之外,它们是按照相同的方式设计的。具有两种队列类型的优点包括:

  • 性能:通过将队列作业数据作为核心数据存储在同一个数据库中,可以在作业处理期间使队列免于执行高开销的跨数据库调用。举个例子:在发生时间表提交作业时,用户输入的数据(例如工时数)作为提交的队列作业的一部分封装,并被放入到 SQL Server 作业存储中。此外,已存在有关时间表的信息(工期、姓名等),而且可在“已发布”的数据库中获得此信息。要处理时间表提交作业,需要这两组数据。如果这两组数据驻留在同一个数据库中,就能改善性能。这就是为何将时间表队列作业存储在“已发布”的数据库中,以及将项目队列作业存储在“草稿”数据库中的原因(所有时间表核心数据均驻留在前一个数据库中,而大部分项目核心数据均驻留在后一个数据库中)。

  • 微调:可以单独为项目队列和时间表队列指定队列中的每个设置。这为管理员提供了配置上的灵活性。例如,如果某客户主要将 Office Project Server 2007 用于时间表,而且项目数量非常少,则可以将项目队列的轮询间隔设置为一分钟,以及可以将时间表队列的轮询间隔设置为10 秒。

    提示

    轮询间隔指定队列服务检查这两个队列之一有无新作业的频率。可以在 Project Web Access 的“队列设置”页中指定此设置。

如何使用项目队列和时间表队列

下图显示 Project Server 队列系统中的模块如何使用项目队列和时间表队列。

Project Server 2007 队列体系结构

  1. 启动作业轮询线程:对于队列所服务的每个 Project Web Access 实例(队列可以服务于多个 Project Web Access 实例),会启动一对轮询线程 — 一个线程服务于项目队列,另一个线程服务于时间表队列。这两个线程均驻留在“队列工作进程”进程空间内,并在“队列工作进程”标识(这是共享服务提供程序管理员标识)下运行。

  2. 作业存储:如上所述,与项目相关的作业(项目保存、发布、报告、多维数据集生成等)存储在“草稿”数据库中。与时间表相关的作业(时间表保存、时间表提交等)存储在“已发布”的数据库中。

  3. 作业处理:此模块并无变化。在“作业轮询线程”发现新作业时,会创建新的作业处理线程。请注意,作业处理线程仍驻留在“队列工作进程”进程空间内,并在“队列工作进程”标识(这是共享服务提供程序管理员标识)下运行。

    状态检查模块并无变化 — 它们只是检查作业的状态,并不关心作业属于哪个队列。队列管理始终在每个队列的基础上进行 — 在 Project Web Access 的“队列管理”页中,管理员必须选择要更改其设置的队列(项目或时间表)。

队列部署

要了解如何部署 Project Server 队列系统,必须在大体上了解如何部署 Office Project Server 2007。本节简要概述部署过程。有关详细信息,请参阅将 Project Server 2007 部署到服务器场环境

即使阅读了前面几节,读者心中仍可能存在一系列基本问题:

  1. 如何首先创建队列 NT 服务?

  2. 队列 NT 服务如何开始 — 例如,它如何查找 Project Server 草稿数据库和已发布的数据库的位置?

  3. 在设置多个 Project Web Access 实例时(这会创建更多的 Project 数据库)会发生什么情况?

  4. 在设置多个 SSP 时(这会创建更多的队列 NT 服务)会发生什么情况?

本节解答这些问题。

在 Project Server 2007 的安装期间如何部署队列 NT 服务

本节通过简要概述 Office Project Server 2007 的部署来说明如何在上下文中部署队列。

  1. 准备计算机:确定部署的物理体系结构。对于本例,我们确定两台计算机运行 Web 应用程序(为网页提供服务)、一台计算机执行中间层操作(项目保存、项目发布等)以及一台计算机安装数据库。

    准备计算机

  2. 创建 Project Server 场:当您尝试在任何计算机上安装 Project Server 时,系统会立即提示您创建一个场或加入现有的场。您可以将 Project Server 场大致想像为在概念上对安装的表现 — 场基础结构关注在正确的位置部署正确的对象。创建场也会创建场 SharePoint 管理中心网站,您从中可以通过一个中央位置控制所有场操作。场包含场配置数据库,它存储有关场中所有服务器的配置信息。

    创建场

  3. 安装二进制文件和加入场:下一步是在所有计算机上安装 Office Project Server 2007,并加入 Project Server 场。作为此过程的一部分,开始为在其上执行安装的计算机指定角色 —“前端 Web”或“应用程序服务器”(中间层计算机)。

    安装二进制文件并加入场

  4. 在场中设置共享服务提供程序 (SSP):在场中设置 SSP 时,Project Server 共享服务所需的服务/组件安装在角色为“应用程序服务器”的每台计算机上。此外,还会创建队列 NT 服务、事件 NT 服务和 PSI Web 应用程序。下图中的白色标注显示场的逻辑配置。在本例中,在场中创建一个 SSP。

    设置共享服务提供程序

    要注意的事情:

    1. 场基础结构关注的是在每台中间层计算机上安装必需的组件。如果有多台中间层服务器,则这些服务器会自动分担负载。

    2. 这些 NT 服务中的每一项均在共享服务提供程序的应用程序池标识下运行。无法通过 Windows Server 2003 的“控制面板”中的“服务”选项手动管理它。SharePoint 定时服务会定期将 NT 服务凭据与场配置数据库上的场管理员帐户进行同步。

    NT 服务此时将不执行任何操作,因为它们没有要服务的 Project Web Access 网站。

  5. 设置 Project Web Access:这是通过导航到 SSP 管理网站并创建 Project Web Access 的实例来完成的。完成了这一步后,您就已创建了 Project Web Access 的实例所需的服务/组件。设置过程还会通知队列服务和事件服务,告诉它们现在有可服务的 Project Web Access 网站。下图中的白色标注显示场的逻辑配置。在本例中,在场中创建一个新的 Project Web Access 实例(例如 PWA1),并将其链接到在上一步中创建的 SSP。

    设置 Project Web Access

    要注意的事情:

    1. 在作为前端 Web 服务器的每台计算机上,创建 Windows SharePoint Services 网站集和关联的应用程序池。

    2. 创建四个 Project Server 数据库。

    3. 在配置数据库中创建条目,以登记 PWA 网站、SSP 和数据库之间的关系。

  6. 设置另一个 Project Web Access 实例:在客户中很常见的方案是,在场中创建多个 PWA 实例以提供服务(例如为 http://project20007/sales 和 http://project2007/marketing 提供服务)。发生这种情况时,会创建新的 Project Server 数据库集合,以及创建更多的 PWA Windows Sharepoint Services 网站集和应用程序池。下图中的白色标注显示场的逻辑配置。在本例中,在场中创建一个新的 PWA 实例(例如 PWA2),并将其链接到 SSP。请注意,会为 PWA2 实例创建一个新的 Project Server 数据库集合。现在,队列服务和事件 NT 服务开始为所有连接到 SSP 的 PWA 网站提供服务。在本例中,它们开始为 PWA1 和 PWA2 提供服务。

    设置另一个 Project Web Access 实例

多台 Project Server 应用程序服务器上的队列 NT 服务

在场中的所有 Project Server 应用程序服务器(也称为“中间层服务器”)上创建队列 NT 服务。例如,如果有两台 Project Server 应用程序服务器,则当您在 Project Server 场中设置新的 SSP 时,会立即在这两台计算机上创建新的队列 NT 服务。务必要注意的是,队列 NT 服务为连接到其父 SSP 的 PWA 的所有实例提供服务。

队列服务属性

如前所述,当在 Project Server 场中设置 SSP 时,会创建队列 NT 服务。当您查看队列 NT 服务中间层计算机的属性时,务必要了解如何确定它们中的一些属性。

队列服务属性

  • 队列服务名称:服务的名称是 ProjectQueueService。与场中的 SSP 数量无关的是,Project Server 应用程序服务器上始终只有一项队列 NT 服务。

  • 队列启动类型:启动类型为自动,因为队列 NT 服务应一直运行。

  • 队列 NT 服务登录帐户:定时服务帐户设置为队列 NT 服务登录帐户(这是您在创建场时已用过的帐户)。

队列 NT 服务如何引导和启动 Project Web Access 的服务实例:队列作为定时服务帐户运行,并且具有场配置数据库的访问权。在启动时,队列 NT 服务查询配置数据库,并获取在场中设置的所有 SSP 的列表。之后,对于每个 SSP,它启动一个队列工作进程。每个队列工作进程均查找与 SSP 关联的 PWA 实例的列表,然后为每个 PWA 实例启动一对轮询线程。

我们何时需要重新启动队列 NT 服务?:理想情况下根本不需要。队列 NT 服务会不断侦听场配置中的变化;如果有变化,它会自动适应变化(无需重新启动 NT 服务)。

您将在 Windows 任务管理器中看到的进程:如果打开 Windows 任务管理器,您将看到一系列同名(即“Microsoft.Office.Project.Server.Queuing.exe”)的进程。其中一个进程运行在定时服务帐户下,它代表队列 NT 服务本身。另外,还将有与场中的 SSP 一样多的 Microsoft.Office.Project.Server.Queuing.exe 进程,每个进程运行在对应的 SSP 管理员帐户下。这些进程代表队列工作进程。因此,“Microsoft.Office.Project.Server.Queuing.exe”进程的总数量等于 SSP 的数量加一(对应定时服务帐户的进程)。

不同拓扑中的队列部署

本节说明如何在不同的拓扑中部署队列(在这些拓扑中,可以有多个 PWA 实例和多个共享服务提供程序)。

带有多个 PWA 的队列启动/服务

在队列启动时,它首先与场配置数据库联系,并寻找它应服务的所有 Project Web Access 实例。队列使用共享服务提供程序 GUID 标识自己,此 ID 是队列 NT 服务的启动参数(有关详细信息,请参阅“队列部署”一节)。

Project Server 2007 双 web 队列

  1. 队列 NT 服务与场配置数据库联系,并请求获得有关场中定义的所有 SSP 的信息。

  2. 对于每个 SSP,队列 NT 服务会启动一个“队列工作进程”,它在对应的 SSP 管理员帐户下运行。

  3. 对于每个 SSP,队列 NT 服务获取关联的 PWA 网站的列表。

  4. 对于每个 PWA 网站,队列 NT 服务获取 PWA 数据库的连接信息。

  5. 队列 NT 服务启动作业轮询线程对 — 每个 PWA 实例一个。

  6. 轮询线程轮询有无新的作业。

单 SSP 多 PWA 的环境中的队列部署

下图描绘了包含单个 SSP 且为该 SSP 设置了两个 Project Web Access 实例的环境中的队列体系结构。

Project Server 2007 队列系统单一 SSP

  1. 队列 NT 服务与场配置数据库联系,并请求获得有关场中定义的所有 SSP 的信息。

  2. 对于每个 SSP,队列 NT 服务会启动一个“队列工作进程”,它在对应的 SSP 管理员帐户下运行。

  3. 对于每个 SSP,队列 NT 服务获取关联的 PWA 网站的列表。

  4. 对于每个 PWA 网站,队列 NT 服务获取 PWA 数据库的连接信息。

  5. 队列 NT 服务启动作业轮询线程对 — 每个 PWA 实例一个。

  6. 轮询线程轮询有无新的作业。

  7. 在发现新的作业时,作业轮询线程会生成新的作业处理线程。

双 SSP 的环境中的队列部署

下图描绘了包含两个 SSP 且为每个 SSP 设置了一个 Project Web Access 实例的环境中的队列体系结构。

Project Server 消息队列

  1. 队列 NT 服务与场配置数据库联系,并请求获得有关场中定义的所有 SSP 的信息。

  2. 对于每个 SSP,队列 NT 服务会启动一个“队列工作进程”,它在对应的 SSP 管理员帐户下运行。

  3. 对于每个 SSP,队列 NT 服务获取关联的 PWA 网站的列表。

  4. 对于每个 PWA 网站,队列 NT 服务获取 PWA 数据库的连接信息。

  5. 队列 NT 服务启动作业轮询线程对 — 每个 PWA 实例一个。

  6. 轮询线程轮询有无新的作业。

  7. 在发现新的作业时,作业轮询线程会生成新的作业处理线程。

队列分组

排队的数据有三个不同的分组级别:

  1. **作业   **作业是由 Project Server 执行的工作(例如项目保存、项目发布、时间表提交)的可跟踪数据包。某些作业并非由用户特意启动(例如电子邮件通知、报告数据的同步)。作业是使用作业标识号对队列进行跟踪的级别。

  2. **互联作业组   **互联作业组是由 Project Server 的内部规则强制实施的作业分类。除某些例外情况外,互联作业组中的作业基本上按顺序一起接受处理。在下例中,通过 Project Professional 编辑并保存项目 1,然后签入它。之后,项目 1 由另一个用户签出并发布。发布项目 1 将触发报告,而且将向队列添加一项报告作业。Project Server 组合一个互联组,它由四项与项目 1 相关的作业组成。之后,它将尝试依次处理这些作业,因为 Project Server 的内部规则指示作业之间存在依赖关系。存在的依赖关系是指,在保存项目 1 之前,不能发生项目 1 发布作业和报告数据库更新作业。此外,如果互联组中的任何作业失败,则将阻止互联组中排在该作业后面的其他作业执行。例如,如果“保存项目 1”作业(作业标识号为 12)失败,则将阻止“签入项目 1”作业(作业标识号为 13)执行。如果执行“签入项目 1”作业,将会导致问题。其他人随后可能会签出项目 1(此项目可能会由于保存失败而处于不一致的状态),然后尝试修改它。

  3. **子作业   **每项作业可以进一步分解为称为子作业的更小部分。如果作业非常大(例如保存一个 10 MB 的项目),它将被分解为多项子作业。子作业不会向 PSI 或 Project Web Access 用户公开。

    不同级别的队列分组

提交的作业之间的父/子关系

务必要认识到,对于要求执行进一步处理的提交的作业,可能存在父/子关系。例如,如果用户发布项目 1,则将生成针对项目 1 的报告请求,以及关于项目 1 的通知请求。请注意,将始终生成“通知项目 1”,但由于仅当“发布项目 1”成功时才会生成“报告项目 1”,因此,如果发布作业失败,将不会生成“报告项目 1”作业。

作业之间的父子关系

同样,子作业可能会失败,但不会影响到父作业。例如,如果“通知项目 1”失败,则不会影响到“发布项目 1”,因为它已经发生了。务必要注意的是,虽然用户可能知道项目 1 的发布已通过队列进行了处理,但他/她可能不知道子作业可能已失败。如果您想验证从父作业生成了哪些已加入到队列中的子作业及其状态,则可以通过 Project Web Access 中的“我的排队作业”页来这样做。管理员可以使用“队列管理”UI 并查看队列中的所有作业。

提示

本文的“队列管理”一节介绍了 Project Web Access 中的“我的排队作业”页和“队列管理”页。

队列状态

向队列提交某项作业后,它可能会转变为不同的状态。下表逐个说明这些状态:

状态 说明

正在排入队列

将作业放入队列中。颁发作业标识号。

正在等待处理

作业在队列中并等待处理。

正在处理

正在处理作业。

成功

已成功处理作业。这是最终状态,作业不能更进一步。

已阻止

作业已被阻止,原因是在同一个互联组中位于它前面的另一项作业失败了。将重试或取消。

失败但不阻止互联

作业已失败,但并不阻止其组中的任何其他作业。这是最终状态,作业不能更进一步。

失败并阻止互联

作业已失败,并且可能阻止一项或多项相关的作业。

已跳过以便优化

已跳过作业,因为已在组中该作业的后面发现了重复的作业。例如,项目经理在处理项目时可能尝试依次执行以下作业:

  1. 保存项目 1

  2. 发布项目 1

  3. 更改项目 1 中的任务

  4. 发布项目 1

  5. 更改项目 1 的开始日期

  6. 发布项目 1

将处理针对项目 1 的所有三次增量保存。但是,不需要处理所有三次发布尝试。如果处理最后一项发布作业,它将产生如同处理了所有三项发布作业的结果。基于优化目的,跳过了前两次发布尝试。

已取消

已取消作业。可以取消除两个终止状态(成功、失败但不阻止互联)外的任何状态的作业。

队列状态的变化

在作业加入到队列中并接受处理时,务必要了解可能发生的队列状态变化。下面的流程图描绘了通过每个状态的可能路径。

Project Server 2007 队列系统 - 编辑状态

状态 下一个可能的状态

正在排入队列

  • 正在等待处理

  • 已取消

正在等待处理

  • 正在处理

  • 已取消

  • 已阻止

  • 已跳过以便优化

正在处理

  • 成功

  • 失败但不阻止互联

  • 失败并阻止互联

  • 已取消

成功

  • 结束

已阻止

  • 正在处理

  • 已取消

失败但不阻止互联

  • 结束

失败并阻止互联

  • 已取消

  • 正在处理

已跳过以便优化

  • 已阻止(起因于失败的作业)

  • 已取消

  • 成功

  • 失败但不阻止互联

  • 失败并阻止互联

  • 正在处理

已取消

  • 结束

队列管理

Office Project Server 2007 中的大部分任务关键型操作均通过队列进行。因此,了解并管理队列对于确保所安装的 Microsoft Office Enterprise Project Management (EPM) Solution 顺利工作非常重要。例如,以下是可能指点您更好地管理队列的相关主题:

  • 我的项目需要很长的时间才能发布。

  • 队列管理页需要很长的时间才能加载,而作业数量假设是 100,000。

  • 我的经理问我,如何确认购买新的中间层 Office Project Server 2007 服务器(应用程序服务器)事实上改善了性能。

可以通过以下方式执行队列管理:

  • Project Web Access 的“队列管理”页

  • “我的排队作业”页

  • 性能计数器

  • 队列清理

Project Web Access 的“队列管理”页

可以通过 Office Project Web Access 中的“队列管理”页进行队列管理。此页类似于任何常见打印机的“显示所有作业”中央屏幕,您从中可以查看队列中的所有打印作业,并在必要时解决问题。可以通过 Project Web Access 中的“服务器设置”页访问 Project Web Access 的“队列管理”页。

在“管理队列”页中,您可以:

  • 查看队列中所有作业的状态。

  • 取消或重试失败的作业。

    提示

    有关队列状态的更详细信息,请参阅队列状态一节。

    提示

    要查看有关队列管理的用户界面信息,请参阅本文的管理队列一节。

“我的排队作业”页

“我的排队作业”页提供自我管理的用户界面(类似于任何一台 PC 上的“打印后台处理程序”),您从中可以查看已加入到队列中的、您自己的特定作业的状态。Project Web Access 用户可以在 Project Web Access 的主页中通过“快速启动”中的“个人设置”链接访问“我的排队作业”页。

如果用户想查看有关已加入到队列中的所有作业的信息,他们可以转到 Project Web Access 中的“我的排队作业”页来这样做。“我的排队作业”页显示有关用户加入到队列中的作业的以下信息:

  • 进入队列的时间

  • 队列完成时间

  • 作业名称

  • 作业类型

  • 作业状态

  • 完成百分比

  • 队列位置

  • 队列类型

  • 错误

此外,“我的排队作业”页允许用户根据以下条件筛选所有排队的作业:

  • 进行中的作业和失败的作业

  • 所有作业

  • 上一周的所有作业

  • 上一周的成功作业

性能计数器

有许多特定于队列的性能计数器,管理员可以使用它们对当前的 Office Project Server 2007 系统性能执行基准检验。在确定当前的配置是否满足目标,或是否需要证明有必要添加额外的资源(例如另一台服务器)时,这些性能计数器可能很有用。

在可以使用的计数器中,有一些与作业特别相关,例如:

  • 队列中的任何作业的平均等待时间

  • 发布作业的平均处理时间

  • 失败作业的百分比

  • 平均等待时间

其他计数器一般与队列相关,例如:

  • 平均队列深度

  • SQL 重试的百分比

  • 每小时的 SQL 调用次数

  • 发布作业的平均处理时间

队列清理

在使用 Project Server 系统时,作业将不断进入队列和接受处理。队列系统会保留每项已完成作业的状态和其他元数据,因此,可以在以后确定其状态。这些作业可能会越来越多,并可能会开始影响系统性能,特别是作业状态的查询。为了处理此问题,队列系统内置了清理机制,以定期删除队列中的作业。删除作业的主要影响是,无法通过 PSI 或“队列管理”页确定删除的作业的状态。

在 Project Web Access 的“队列设置”页上,可以使用几个配置参数来控制此清理机制:

  • 清理间隔 – 确定应隔多长时间进行一次清理。默认值为 24 小时。

  • 成功作业的清理期限 – 确定应隔多长时间清理成功作业一次。默认值为 24 小时。

  • 未成功作业的清理期限 – 确定应隔多长时间清理状态为已完成但未成功的作业一次(例如,失败但不阻止互联的作业)。默认值为 168 小时。

提示

有关这些参数的更多详细信息,请参阅本文后面的“队列设置”一节。

管理队列

可以通过 Project Web Access 的“服务器设置”页来进行队列管理。在“服务器设置”页的“队列”部分中,有两个用于管理队列的选项。

  1. 管理队列   可以使用此页查看队列中的作业。可以使用配置选项筛选作业,只查看您感兴趣的作业。也可以通过此页重试或取消一项或多项作业。

  2. 队列设置   可以设置配置选项,以控制从项目队列和时间表队列中提取作业并处理作业的方式。无需重新启动队列 NT 服务即可应用这些设置。

管理队列

本节介绍队列筛选选项,用户可以在 Project Web Access 的“服务器设置”页的“队列”部分中选择“管理队列”来访问这些选项。所选队列选项的结果也将显示在此页上。

筛选器类型

此筛选器确定在“作业网格”部分中显示作业的次序。可用的选项包括:

  • 按状态

  • 按作业

  • 按项目

  • 按标识号

作业历史记录

此参数使您能够选择在“作业网格”中显示的作业的日期范围。使用“开始日期”和“终止日期”字段选择开始和终止日期。

可以使用“最大作业数”字段限制为给定的日期范围显示的作业数。如果选择的日期范围包含大量需要显示在“作业网格”中的作业,则“管理队列”页的加载时间可能很长。“最大作业数”字段可让您限制显示的作业数。默认设置为 500。

作业类型

此部分使您能够选择您想显示在“作业网格”中的作业类型,例如“项目发布”、“时间表提交”或“资源计划签入”。默认情况下,所有作业类型均将在“选择的作业”列表中列出。

作业完成状态

此部分使您能够选择您想显示在“作业网格”中的作业完成状态。默认情况下,除“成功”外,所有其他作业完成状态均在“选择的作业状态”列表中列出。这意味着已成功完成的作业将不会显示在“作业网格”中。

选择列

此部分使您能够选择将显示在“作业网格”部分中的列。

高级选项

此部分使您能够指定适用于取消操作的特殊操作。这些选项使您能够:

  • 取消进入队列的作业

  • 取消互联的后续作业

作业网格

此部分使您能够查看在“管理队列”页中列出的符合条件的作业。此部分中的选项使您能够选择一项或一组作业,以及在适用时向它们应用以下选项:

  • 重试作业

  • 取消作业

    提示

    必须手动刷新“查看/选择”作业列表才能更新页面。可以通过此部分中提供的“刷新”按钮来这样做。

队列设置

本节介绍队列配置选项,用户可以在 Project Web Access 的“服务器设置”页的“队列”部分中选择“队列设置”来访问这些选项。

在配置队列设置时,务必要注意以下几点:

  • 队列设置是按 Project Server 实例配置的。

  • 队列设置是按队列类型(项目或时间表)单独配置的。

  • 队列 NT 服务不需要重新启动就能让所做的更改生效。

  • 如果有多个队列 NT 服务为此 Project Web Access 实例提供服务(例如在负载平衡环境中),则所有队列服务均用这些设置刷新。

    提示

    在此页上选择了配置选项后,请确保使用此页上的“保存”按钮保存配置设置。

队列类型

此部分使您能够指定您希望队列设置应用到的队列类型(项目或时间表)。

最大作业处理器线程数

此部分使您能够指定可以同时运行的最大作业处理器线程数。有效的范围介于 1 到 20 之间,默认值为 4。

轮询间隔

此部分使您能够指定队列 NT 服务轮询项目数据库或时间表数据库(取决于您所选的作业类型)的时间间隔(以毫秒为单位)。有效的范围为 500 到 300000,默认值为 1000。

重试间隔

此部分可让您设置因 SQL 相关问题(例如 SQL 死锁)而失败的作业的重试时间间隔(以毫秒为单位)。有效的范围为 0(立即重试)到 300000,默认值为 1000。

重试次数限制

此部分可让您设置重试失败的轮询查询的次数限制。Project Server 队列系统定期轮询数据库,以检索需要处理的作业。如果此查询因 SQL 相关问题而失败,系统将尝试在一段时间后再次轮询数据库。

SQL 重试间隔

队列按固定间隔轮询数据库,以检索需要处理的作业。如果查询失败,此部分可让您设置在重试查询之前要经过的时间长度(以毫秒为单位)。有效的范围为 0(立即重试)到 60000,默认值为 1000。

SQL 重试次数限制

队列按固定间隔轮询数据库,以检索需要处理的作业。如果查询失败,此部分可让您设置重试查询的次数。有效的范围为 0(不重试)到 100,默认值为 5。

SQL 超时

队列进行 SQL 调用以检索和执行作业。此部分可让您设置这些调用的超时值(以秒为单位)。如果任何作业因为 SQL 超时错误而失败,则可以增加此设置的值并重试作业。有效的范围为 19 到 86400(一天),默认值为 30。

清理间隔

此部分可让您配置队列清理作业运行的频率(以小时为单位)。有效的范围为 1 到 100000,默认值为 24(一天)。

清理间隔偏移量

此部分可让您设置队列清理作业在一天中运行的时间。通过输入上午 12:00 后的分钟数(即队列清理作业运行的时刻)来设置此值。有效的范围为 0(上午 12:00)到 1439(下午 11:59),默认值为 0。

成功作业的清理期限

此部分可让您设置在队列清理作业运行时,可以清除的成功作业的期限阈值(以小时为单位)。每项作业的期限由其完成日期和时间确定。例如,如果某项作业在 2007 年 10 月 1 日下午 10:40 成功完成,而队列清理作业的运行时间为 2007 年 10 月 2 日下午 11:55,则将会清除该作业(假设“成功作业的清理期限”的值是默认值,即 24 小时)。

有效的范围为 1 到 100000,默认值为 24(一天)。

提示

通常,成功作业的数量比未成功作业高许多。因此,“成功作业的清理期限”的值通常设置为比“未成功作业的清理期限”的值小。

未成功作业的清理期限

此部分可让您设置在队列清理作业运行时,可以清除的处于已完成但未成功状态(例如“失败但不阻止互联”)的作业的期限阈值(以小时为单位)。每项作业的期限由其完成日期和时间确定。例如,如果某项作业在 2007 年 10 月 1 日下午 10:40 被取消,而队列清理作业的运行时间为 2007 年 10 月 2 日下午 11:55,则将会清除该作业(假设“未成功作业的清理期限”的值是默认值,即 24 小时)。

有效的范围为 1 到 100000,默认值为 168(七天)。

记帐间隔

队列系统运行一系列的“记帐”任务。例如,唤醒处于“休眠”状态的作业、更新检测信号时间戳,或者检查是否需要运行队列清理作业。此设置控制这些任务运行的时间间隔(以毫秒为单位)。

有效的范围为 500 到 300000,默认值为 10000(十秒)。

队列超时

在包含多台应用程序服务器的场中,如果队列 NT 服务在其中一台服务器上失败,会自动向队列 NT 服务处于活动状态的其余应用程序服务器分配作业。如果队列 NT 服务在长于“队列超时”值(以分钟计)的时间内未更新其检测信号,则会认为该服务已超时。检测信号由队列在它接触的所有 Project Web Access 数据库中更新(例如,每次轮询已发布的数据库和草稿数据库有无作业时)。

有效的范围为 2 到 20,默认值为 3。

提示

“队列超时”值在任何时候都不能小于“记帐间隔”的四倍。如果违反此规则,则“队列超时”值将自动改为记帐值的四倍。

快速轮询

“快速轮询”设置默认为启用,并且允许队列尽快处理所有处于“正在等待处理”状态的作业。但是,如果此快速处理超过了服务器的处理能力,并且队列需要减慢速度,则可以禁用此设置。

如果禁用“快速轮询”,则队列会检查是否有任何空闲的线程可以处理作业。如果有,则将处于“正在等待处理”状态的作业加载到这些线程中。之后,队列将等待轮询间隔的到来,然后重复整个过程。

如果启用“快速轮询”并且有未完成的作业,则队列将不会等待轮询间隔的到来。在处理作业时,将立即开始处理所有未完成的作业。