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