主要内容

清理 Polyspace Access 数据库

要优化 Polyspace® Access™ 数据库的性能,请定期执行数据库清理操作,例如删除旧的或弃用的工程以及执行数据库清理。在执行清理操作前,建议您先备份数据库。请参阅创建数据库备份

删除工程运行或整个工程

当您通过点击右击菜单中出现的删除工程Polyspace Access Web 界面的工程资源管理器中删除工程或者在命令行中使用 polyspace-access -delete-project 命令删除工程时,Polyspace 会将工程移动到 ProjectsWaitingForDeletion 文件夹中。工程(包括您上传到该工程的所有运行)将保留在数据库中,直到您明确删除该工程为止。请参阅从数据库中删除工程

ProjectsWaitingForDeletion 文件夹仅对具有管理员角色的 Polyspace Access 用户可见。

为了帮助管理数据库的大小,您需要定义策略来确定从数据库中删除较旧的工程运行的频率。您可以为每个工程定义删除策略,并根据以下设置指定 Polyspace 删除较旧的运行的频率:

  • 工程运行的存在时间 - 指定在工程中保留运行的最长天数 (MAX_DAYS)。如果自某个运行上传以来的天数超过 MAX_DAYS 值,则 Polyspace 会从数据库中删除该运行。

  • 工程中的运行数 - 指定要保留在工程中的最大运行数 (MAX_RUNS)。如果工程已包含 MAX_RUNS 个运行而您要上传新运行,则 Polyspace 会从数据库中删除工程中最旧的运行。

仅当您将新运行上传到工程时,Polyspace 才会应用删除策略。如果工程运行的存在时间 (olderThanMaxDays) 超过 MAX_DAYS 值,而您并未向该工程上传新运行,则 Polyspace 不会删除 olderThanMaxDays 的运行。

仅当您具有 Polyspace Access管理员负责人角色时,才能设置删除策略。

小心

无法恢复从数据库中删除的数据,除非您有这些数据的备份副本。

从用户界面管理删除策略

要从 Polyspace Access 界面设置、取消设置或管理删除策略,请在工程资源管理器中选择一个工程,然后点击工程详细信息窗格中的删除策略链接。

Deletion Policy link highlighted in the Project Explorer to open the Runs Deletion interface

运行删除窗口中,您可以执行以下操作:

  • 选择自定义以设置删除策略,或者选择以取消设置策略。

  • 通过指定 Polyspace 用作工程运行删除阈值的最大天数和最大运行数来管理删除策略。您可以指定一个或同时指定两个阈值。

    当您同时指定两个阈值时,如果工程运行满足任一阈值,Polyspace 便会删除该运行。

  • 选择单个工程运行以手动删除该工程。选择运行后,点击 delete run 以从数据库中删除所选运行。

  • 将某个运行设置为持久运行,以将其从删除策略中排除。使用该属性可以保护感兴趣的运行不被删除。例如,您可能希望将上传到工程的第一个运行保留为基线,但仍对上传到该工程的所有其他运行应用删除策略。Polyspace 不计算当您应用最大运行数删除策略时您设置为持久的运行。

    要将运行设置为持久运行,请双击持久列中与该运行对应的单元格,然后选择。您还可以在上传运行时在命令行中将该运行设置为持久运行。请参阅在命令行中管理删除策略

    从删除策略中排除某个运行时,该运行会一直保留在数据库中,直到您明确将其删除为止。在您选择该运行以手动进行删除之前,请取消设置其持久属性。

删除策略仅自动删除数据库中的工程运行。要从数据库中删除工程及其所有运行,请参阅从数据库中删除工程

在命令行中管理删除策略

要在命令行中管理删除策略,请使用下列命令。

命令 操作
polyspace-access -get-deletion-policy projectPath

使用工程路径 projectPath 查看工程当前的删除策略。

例如,要查看工程 public/example_BF 的删除策略,请使用以下命令:

polyspace-access -get-delete-policy public/example_BF -host ...
Connecting to https://example-access-server:9443
Connecting as jsmith
Current deletion policy: MAX_RUNS 10
Command Completed

polyspace-access -set-deletion-policy projectPath

-max-runs MAX_RUNS -max-days MAX_DAYS

使用工程路径 projectPath 设置或编辑工程的删除策略。您可以将删除策略配置为使用工程运行的存在时间和/或工程中的运行数作为工程运行删除阈值。当您同时指定两个阈值时,如果工程运行满足任一阈值,Polyspace 便会删除该运行。

当您设置删除策略时,Polyspace 会在每次后续上传时应用该策略。如果您不向工程上传其他运行,则 Polyspace 不会删除任何运行,即使这些运行满足删除策略标准也是如此。

例如,要设置 Polyspace 从工程 public/example_BF 中删除超过 30 天的所有运行的策略,请使用以下命令:

polyspace-access -set-delete-policy public/example_BF -max-days 30 -host ...
Connecting to https://example-access-server:9443
Connecting as jsmith
Current deletion policy: MAX_RUNS 10
New deletion policy: MAX_DAYS 30
Command Completed
该命令会覆盖现有的删除策略。例如,如果工程的删除策略仅允许每个工程保留 10 个运行 (MAX_RUNS),而您将上面的命令应用于该工程,则会覆盖 MAX_RUNS 条件,并且 Polyspace 将仅使用 MAX_DAYS 条件。

polyspace-access -unset-deletion-policy projectPath

使用工程路径 projectPath 取消设置工程当前的删除策略。

例如,要取消设置工程 public/example_BF 的删除策略,请使用以下命令:

polyspace-access -unset-delete-policy public/example_BF -host ...
Connecting to https://example-access-server:9443
Connecting as jsmith
Current deletion policy: MAX_DAYS 30
New deletion policy: NONE
Command Completed

polyspace-access -upload resultPath -exclude-from-deletion

从删除策略中排除上传。使用此选项可以保护感兴趣的工程运行不被删除。例如,您可能希望将上传到工程的第一个运行保留为基线,但仍对上传到该工程的所有其他运行应用删除策略。Polyspace 不计算当您应用最大运行数删除策略时您从删除中排除的运行。

从删除策略中排除某个运行时,该运行会一直保留在数据库中,直到您明确将其删除为止。该运行在 Polyspace Access 界面上的运行删除窗口中显示为持久。您无法在命令行中手动删除单个运行。

删除策略仅自动删除工程运行。要从数据库中删除工程及其所有运行,请参阅从数据库中删除工程

从数据库中删除工程

如果您是具有负责人管理员角色的 Polyspace Access 用户,则可以删除工程,而无需将其从数据库中永久删除。

  • 在用户界面中,右键点击工程资源管理器中的工程,然后选择删除工程

  • 在命令行中,使用 -delete-project-move-project 命令将该工程移动到 ProjectsWaitingForDeletion 文件夹中。

Polyspace 会将工程及其所有运行移动到 ProjectsWaitingForDeletion 文件夹,该文件夹仅对具有管理员角色的 Polyspace Access 用户可见。

要从数据库中永久删除工程及其所有运行,请执行以下操作:

  • 在用户界面中,右键点击 ProjectsWaitingForDeletion 文件夹中的工程,然后选择清空文件夹

  • 在命令行中,使用 polyspace-access -delete-project 命令,并在 ProjectsWaitingForDeletion 文件夹中指定工程。

    例如,以下命令将从数据库中删除工程 myProj

    polyspace-access -delete-project ProjectsWaitingForDeletion/myProj -host example-access-server:9443
    login: jsmith
    password:
    Connecting to https://example-access-server:9443
    Connecting as jsmith
    Deletion requested for project "ProjectsWaitingForDeletion/example_project"
    PROJECT_DELETED ProjectsWaitingForDeletion/example_project
    Command Completed

仅当您具有 Polyspace Access 管理员用户角色时才能执行此操作。

恢复已删除的工程

具有管理员角色的 Polyspace Access 用户可以通过将 ProjectsWaitingForDeletion 文件夹中的已删除工程移动到工程资源管理器中的另一个文件夹或使用 polyspace-access -move-project 命令,来恢复这些工程。

无法恢复从数据库中删除的工程,除非您有数据库的备份副本。

将 PSCAUTO 脚本传输到删除策略

如果您使用 PSCAUTO 脚本来管理数据库清理,并且更新到了 Polyspace Access R2023b 或更高版本,则 Polyspace 会将分配给特定工程的脚本传输到这些相同工程的删除策略。

例如,假设有以下分配给 public/Bug_Finder_Example (Bug Finder) 工程的 PSCAUTO 脚本,工程中的最大运行数设置为 10 个运行:

assign_to_project "public/Bug_Finder_Example (Bug Finder)" AFTER_STATISTICS myScript
clean_project "public/Bug_Finder_Example (Bug Finder)" MAXRUNS 10
升级 Polyspace Access 的版本后,当您在 Polyspace Access 用户界面中或使用 polyspace-access -get-deletion-policy 命令查看 public/Bug_Finder_Example (Bug Finder) 工程的删除策略时,您会发现该工程的删除策略与脚本 (MAX_RUNS=10) 中的命令相匹配。

Polyspace 不会传输不使用 assign_to_project 命令的 PSCAUTO 脚本。这些脚本通常只运行一次,而不是每次将结果上传到 Polyspace Access 时都运行。

您无法使用 PSCAUTO 脚本来管理 R2023b 或更高版本的 Polyspace Access 中的数据库清理。

清理数据库

当您运行命令以更新或删除数据库表中的某一行时,该命令并不会从数据库表中删除该行,因为其他数据库事务可能仍在使用该行的旧版本。要回收任何数据库事务都不再使用的旧行所占用的磁盘空间,请使用 PostgreSQL vacuumdb 命令。定期清理数据库可以防止数据库磁盘空间变得过大或碎片化。

在执行清理操作前,请确保没有任何用户连接到 Polyspace Access,然后停止 Polyspace Access Web 服务器和 ETL 服务。要停止服务,请从托管这些服务的服务器上的终端输入以下命令:

docker stop polyspace-access-etl-0-main polyspace-access-web-server-0-main

注意

如果运行的是 Polyspace Access 版本 R2021b 或更早版本,则 Docker 容器名称可能有所不同。要查看当前正在运行的容器的名称,请使用 docker ps --format '{{.Names}}' 命令。

要对 Polyspace Access 数据库执行定期清理,请在托管数据库的服务器上打开一个终端,然后输入以下命令:

docker exec polyspace-access-db-0-main vacuumdb -U postgres prs_data

您还可以运行 vacuumdb 命令并使用 --analyze 选项来更新 PostgreSQL 服务器统计信息。准确的服务器统计信息有助于防止数据库性能下降。在托管数据库的服务器上打开一个终端并输入以下命令:

docker exec polyspace-access-db-0-main vacuumdb -U postgres --analyze prs_data

要最大限度地减小数据库表的大小并将未使用的空间返还给操作系统,请使用 --full 选项运行 vacuumdb 来执行完整清理。在托管数据库的服务器上打开一个终端并输入以下命令:

docker exec polyspace-access-db-0-main vacuumdb -U postgres --full prs_data
此操作可能需要花费很长时间,它会编写一个新版本的数据库表,其中没有任何空白项。执行完整清理时,无法并行运行任何其他数据库进程。在完整清理期间,无法访问数据库。

制定策略来确定执行定期清理和完整清理的频率。例如,每周定期执行一次清理。

完成清理操作后,重新启动 Polyspace Access Web 服务器和 ETL 服务。使用以下命令:

docker start polyspace-access-etl-0-main polyspace-access-web-server-0-main
重新启动 Web 服务器服务后,可能需要等待片刻,才能在 Web 浏览器中打开 Polyspace Access

另请参阅

| | |

主题