Man page - analyze(7)

Manual

ANALYZE

NAME
SYNOPSIS
DESCRIPTION 描 述
PARAMETERS 参 数
OUTPUTS 输 出
NOTES 注 意
COMPATIBILITY 兼 容 性
译 者


NAME

ANALYZE - 收 集 与 数 据 库 有 关 的 统 计

SYNOPSIS

ANALYZE [ VERBOSE ] [ table [ ( column [, ...] ) ] ]

DESCRIPTION 描 述

ANALYZE 收 集 有 关 PostgreSQL 表 的 内 容 的 统 计 , 然 后 把 结 果 保 存 在 系 统 表 pg_statistic 里 。 随 后 , 查 询 规 划 器 就 可 以 使 用 这 些 统 计 帮 助 判 断 查 询 的 最 有 效 的 规 划 。

如 果 没 有 参 数 , ANALYZE 检 查 在 当 前 数 据 库 里 的 所 有 表 。 如 果 有 参 数 , ANALYZE 只 检 查 那 个 表 。 你 还 可 以 给 出 一 列 字 段 名 字 , 这 个 时 候 只 收 集 那 些 字 段 的 统 计 信 息 。

PARAMETERS 参 数

VERBOSE

打 开 处 理 过 程 信 息 的 显 示 。

table

要 分 析 的 特 定 表 ( 可 能 用 模 式 名 修 饰 ) 的 名 字 。 缺 省 是 当 前 数 据 库 里 所 有 表 。

column

要 分 析 的 特 定 字 段 的 名 字 。 缺 省 是 所 有 字 段 。

OUTPUTS 输 出

如 果 声 明 了 VERBOSE, ANALYZE 发 出 进 度 信 息 , 表 明 当 前 正 在 处 理 的 是 哪 行 。 同 时 打 印 有 关 改 表 的 很 多 其 它 信 息 。

NOTES 注 意

周 期 性 地 运 行 ANALYZE, 或 者 在 对 表 的 大 部 分 内 容 做 了 更 改 之 后 马 上 运 行 它 是 个 好 习 惯 , 准 确 的 统 计 信 息 将 帮 助 规 划 器 选 择 最 合 适 的 查 询 规 划 , 并 因 此 而 改 善 查 询 处 理 的 速 度 。 一 种 比 较 经 常 采 用 的 策 略 是 每 天 在 低 负 荷 的 时 候 运 行 一 次 VACUUM [ vacuum (7)] 和 ANALYZE。

和 VACUUM FULL 不 同 的 是 , ANALYZE 只 需 要 在 目 标 表 上 有 一 个 读 取 锁 , 因 此 它 可 以 和 表 上 的 其 它 活 动 并 行 地 运 行 。

收 集 的 统 计 信 息 通 常 包 括 一 个 每 字 段 最 常 用 数 值 的 列 表 以 及 一 个 包 线 图 , 显 示 每 个 字 段 里 数 据 的 近 似 分 布 。 如 果 ANALYZE 认 为 它 们 都 没 有 什 么 用 , ( 比 如 , 在 一 个 唯 一 键 字 的 字 段 上 没 有 公 共 的 数 值 ) 或 者 是 该 字 段 数 据 类 型 不 支 持 相 关 的 操 作 符 , 那 么 它 们 都 可 以 忽 略 。 在 Chapter 21 ‘‘Routine Database Maintenance’’ 中 有 关 于 统 计 的 更 多 信 息 。

对 于 大 表 , ANALYZE 采 集 表 内 容 的 一 个 随 机 的 抽 样 做 统 计 , 而 不 是 检 查 每 一 行 。 这 样 就 保 证 了 即 使 是 在 很 大 的 表 上 , 我 们 也 只 需 要 很 少 的 一 些 时 间 就 可 以 完 成 分 析 。 不 过 , 要 注 意 的 是 统 计 只 是 近 似 的 结 果 , 而 且 每 次 运 行 ANALYZE都 会 导 致 EXPLAIN 显 示 的 规 划 器 的 预 期 开 销 有 一 些 小 变 化 , 即 使 表 内 容 实 际 上 没 有 改 变 也 这 样 。 在 很 小 的 概 率 的 情 况 下 , 这 个 不 确 定 的 行 为 会 导 致 查 询 优 化 器 在 不 同 ANALYZE 之 间 选 择 不 同 的 查 询 规 划 。 为 了 避 免 这 个 问 题 , 可 以 提 高 ANALYZE 收 集 的 统 计 数 量 , 像 下 面 描 述 的 那 样 。

分 析 的 广 度 可 以 通 过 用 调 整 default_statistics_target 参 变 量 , 或 者 是 以 每 字 段 为 基 础 通 过 用 ALTER TABLE ... ALTER COLUMN ... SET STATISTICS ( 参 阅 ALTER TABLE [ alter_table (7)]) 设 置 每 字 段 的 统 计 目 标 来 控 制 。 目 标 数 值 设 置 最 常 用 数 值 列 表 中 的 记 录 的 最 大 数 目 以 及 包 线 图 中 的 最 大 块 数 。 缺 省 的 目 标 数 值 是 10, 不 过 我 们 可 以 调 节 这 个 数 值 获 取 规 划 器 计 算 精 度 和 ANALYZE 运 行 所 需 要 的 时 间 以 及 pg_statistic 里 面 占 据 的 空 间 数 目 之 间 的 平 衡 。 特 别 是 , 把 统 计 目 标 设 置 为 零 就 关 闭 了 该 字 段 的 统 计 收 集 。 这 么 做 对 那 些 从 来 不 参 与 到 查 询 的 WHERE, GROUP BY, 或 者 ORDER BY 子 句 里 的 字 段 是 很 有 用 的 , 因 为 规 划 器 不 会 使 用 到 这 样 的 字 段 上 的 统 计 。

在 被 分 析 的 字 段 中 最 大 的 统 计 目 标 决 定 为 统 计 采 样 的 表 中 的 行 的 数 目 。 增 大 目 标 会 导 致 做 ANALYZE 的 时 候 成 比 例 地 增 大 对 时 间 和 空 间 的 需 求 。

COMPATIBILITY 兼 容 性

SQL 标 准 里 没 有 ANALYZE 语 句 。

译 者

Postgresql 中 文 网 站 何 伟 平 <laser@pgsqldb.org>

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。
中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh