数据仓库疑难解答

更新:2007 年 11 月

本主题列出了在使用 Team Foundation Server 数据仓库时可能发生的以下常见问题。

数据停止从操作存储区流到数据仓库

报表中的数据过期并且看似未更新

如果在查看这些提示以及各个错误消息的单独帮助主题中的提示后仍然无法解决问题,请访问 Microsoft 网站上有关 Visual Studio Team System 的论坛。这些论坛提供一些线索来供您搜索关于各种疑难解答主题的信息,它们在相关人员的密切监视下,可以快速给出对问题的解答。

数据停止从操作存储区流入数据仓库

如果怀疑数据已停止从操作存储区流入数据仓库,则可以通过以下方式对问题进行故障诊断:

  1. 确认数据流实际已停止。

  2. 找出有故障的适配器。

以下过程有助于解决该问题。

确认数据已停止流动

  1. 进行以下一项或多项更改:

    • 将更改后的文件签入源代码管理中。

    • 更新工作项。

    • 发布测试结果。

  2. 单击“开始”,指向“所有程序”,再指向“Microsoft SQL Server 2005”,然后单击“SQL Server Management Studio”。

  3. 在“连接到服务器”对话框的“服务器类型”列表中,选择“数据库引擎”,然后单击“连接”。

  4. 在“Microsoft SQL Server Management Studio”中,单击“新建查询”。

  5. 运行下面的查询确认更改出现在相应的表中:

    select * from [work item] where id = [select max[id] from [work item] ]
    

    如果更改未出现,则数据已停止流动。

找出有故障的适配器

  1. 在文本编辑器中,打开 \Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Warehouse\Web.Config。

  2. 在代码行 <add name="General" value="0" /> 中,将 "0" 替换为 "3",并保存更改。

    此更改将启用调试消息。

  3. 在 Team Foundation Server 的应用层计算机上依次单击“开始”和“运行”。

  4. 在“打开”框中键入 inetmgr。

  5. 在“Internet 信息服务管理器”的左窗格中,单击“Team Foundation Server”节点。

  6. 在“操作”菜单上,单击“打开”。

  7. 使用侦听系统跟踪事件的程序,启动对应用层的跟踪。

    很多免费软件程序使用 .NET 跟踪功能提供跟踪和调试功能,也可生成自定义应用程序以提供此项功能。有关如何使用跟踪和调试功能的更多信息,请参见 Microsoft 网站上的“Trace Listeners”(跟踪侦听器)。

  8. 在“捕获”菜单上,选择所有捕获命令。使此程序保持打开状态以查看所有 DebugView 消息。

  9. 在“Internet 信息服务管理器”的左窗格中,展开“仓库”节点,然后单击“v1.0”节点。

  10. 在右窗格中,单击“warehousecontrolled.asmx”。

  11. 在“操作”菜单上单击“浏览”。

  12. 在“ControllerService”中,单击“运行”,再单击“调用”。

  13. 使用步骤 7 中的跟踪监视应用程序查看日志,以找出指示哪个适配器未正确运行的跟踪异常。

报表中的数据过期并且看似未更新

如果怀疑一个或多个报表中的数据过期并且未进行更新,或者收到下面的错误消息:“处理报表时出错。(rsProcessingAborted)”,则数据仓库的自动更新可能有问题。

操作存储区中的数据(工作项跟踪、版本控制、版本和集成服务)被拉入关系数据库 (TfsWarehouse),然后再定时被拉入 OLAP 多维数据集。报表通过查询多维数据集呈现。默认情况下,名为 Visual Studio Team Foundation Server Scheduler 的 Windows 服务每一小时调用一次仓库 Web 服务,以启动仓库处理。当此进程在后台持续运行时,多维数据集和报表应可用。

在开始进行故障诊断之前,您应是应用层和数据层上的“Administrators”安全组的成员。数据库和多维数据集位于数据层上,而报告服务站点和报表位于应用层。

可通过下面的方式对问题进行故障诊断:

  1. 在应用层上,关闭 Internet Explorer 友好错误处理,以便能查看所有消息。

  2. 确认名为 Visual Studio Team Foundation Server Scheduler 的 Windows 服务是否在运行。

    Visual Studio Team Foundation Server Task Scheduler 服务通知仓库 Web 服务聚合数据并处理多维数据集。数据从所有操作系统被拉入数据库 TfsWarehouse,数据在这里被处理到多维数据集中。

  3. 确认数据拉入仓库的处理。

  4. 手动处理仓库。

  5. 浏览报表。

以下过程有助于解决该问题。

关闭 Internet Explorer 中的友好错误处理

  1. 在应用层上,打开 Internet Explorer。

  2. 在“工具”菜单上单击“Internet 选项”。

  3. 在“Internet 选项”对话框中,单击“高级”选项卡。

  4. 清除复选框“显示友好 HTTP 错误消息”。

确认 Visual Studio Team Foundation Server Task Scheduler 服务正在运行

  1. 在数据层上,单击“开始”,指向“管理工具”,然后单击“服务”。

  2. 在“服务”窗口中,滚动到“Visual Studio Team Foundation Server Scheduler”,确认“状态”列显示“已启动”。

    如果该服务未启动,则右击“Visual Studio Team Foundation Server Scheduler”,然后单击“启动”。

  3. 通过浏览到 %ProgramFiles%\Microsoft Visual Studio 2008 Team Foundation Server\TfsServerScheduler,确定计划程序最近一次调用仓库来进行处理的时间。

    该目录中的 XML 文件记录上一次尝试仓库处理的时间。

确认数据拉入仓库的处理

  1. 单击“开始”,指向“所有程序”,再指向“Microsoft SQL Server 2005”,然后单击“SQL Server Management Studio”。

  2. 在“连接到服务器”对话框的“服务器类型”列表中,选择“数据库引擎”,然后单击“连接”。

  3. 在“Microsoft SQL Server Management Studio”中,单击“新建查询”。

  4. 通过运行下面的查询来确定成功进入数据多维数据集的数据量:

    use TfsWarehouse
    select Setting as [Last Cube Processing] from _WarehouseConfig where ID = 'LastProcessedTime'
    -- total revisions in the relational warehouse
    use TfsWarehouse
    select top 1 LastUpdatedTime as [LastVCWHWrite] from dbo.[Code Churn] with (nolock) order by LastUpdatedTime desc
    select top 1 LastUpdatedTime as [LastWITWHWrite] from dbo.[Work Item History] with (nolock) order by LastUpdatedTime desc
    use TfsWarehouse
    select count(*) as [WH Revisions] from [dbo].[Work Item History] with (nolock)
    where [Record Count] <> -1
    use TfsWorkitemTracking 
    select count(*) as [WIT Revisions] from [dbo].[WorkitemsLatestAndWere] with (nolock)
    use TfsWarehouse
    select max ([Changeset ID]) as [WH Changeset] from [dbo].Changeset with (nolock) 
    where DimensionMemberActive = 1
    use TfsVersionControl
    select max(ChangeSetId)  as [VC Changeset] from tbl_Changeset with (nolock)
    -- identities
    use TfsWarehouse
    select Property_Value as [Warehouse Identity Id] from _PropertyBag 
    where Property_Key = 'CSS Identity Sequence Id'
    use TfsIntegration
    select max(sequence_Id) as [Integration Identity Id] from tbl_security_identity_cache
    -- structure
    use TfsWarehouse
    select Property_Value as [Warehouse Structure Id] from _PropertyBag 
    where Property_Key = 'CSS Structure Sequence Id'
    use TfsIntegration
    select max(sequence_Id) as [Integration Structure Id] from tbl_nodes with (nolock)
    

    如果没有数据存在,或者数据严重迟滞,则计划程序不通知进行处理,或者仓库聚合数据中有问题。

手动处理仓库

  1. 登录到应用层。

  2. 打开 https://localhost:8080/Warehouse/v1.0/warehousecontroller.asmx。

  3. 单击“GetWarehouseStatus”,然后单击“调用”。

    等待服务空闲;它应返回 ProcessingAdapters(架构修改)、ProcessingOlap(架构修改)、ProcessingAdapters(拉取数据)、ProcessingOlap(处理多维数据集),然后变成空闲状态。

  4. 打开 https://localhost:8080/Warehouse/v1.0/warehousecontroller.asmx。

  5. 单击“运行”,然后单击“调用”。

    这将启动仓库处理。服务返回 True 或 False 以表示它是否已启动处理(异步)。

  6. 可重复步骤 3 以监视处理。

  7. 若要进行验证,可重复步骤 2 以验证数据是否转移,然后如果有问题,请参见下一节中的“收集错误数据”过程,以了解处理的时间范围。

打开报表

  1. 在团队资源管理器中,展开“报表”节点,然后浏览各个团队报表。

    每个报表都有上次处理仓库的时间,以下面的形式表示:

    “报告生成时间: yyyy/mm/dd hh:mm:ss by domain\user; 上次仓库更新时间: yyyy/mm/dd hh:mm:ss”

    数据应该是当前最新的,生成时间不会超过一小时。

  2. 如果数据是超过一小时之前的,则禁用报表缓存:

    1. 在 Internet Explorer 中,打开 http://<server>/Reports/。

    2. 在“报告管理器”中,单击团队项目名称,然后单击报表。

    3. 单击“属性”选项卡,然后单击“执行”。

    4. 选择“不缓存此报表的临时副本”,然后单击“应用”。

    5. 单击“视图”选项卡,然后查看报表。

收集错误数据

  1. 查看应用程序事件日志,以确定源“仓库”中是否有任何错误,错误以红色的 X 显示。该事件日志中的错误和错误堆栈可有助于找出问题。

  2. 如果所有步骤都导致错误,则收集跟踪以帮助支持专家或产品团队成员诊断问题。

  3. 使用 DBMON 之类的工具捕获调试输出。

  4. 在文本编辑器中,打开 \Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Warehouse\Web.Config。

  5. 在代码行 <add name="General" value="0" /> 中,将 "0" 替换为 "4",并保存更改。

请参见

任务

Team Foundation 报告疑难解答

其他资源

使用 Team Foundation Server 命令行工具

Team Foundation Server 数据仓库