亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PostgreSQL中ANALYZE命令的使用

 更新時(shí)間:2025年06月15日 15:03:19   作者:文牧之  
PostgreSQL中ANALYZE用于收集統(tǒng)計(jì)信息以?xún)?yōu)化查詢(xún),文中通過(guò)示例代碼詳細(xì)的介紹了ANALYZE使用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

ANALYZE 是 PostgreSQL 中用于收集數(shù)據(jù)庫(kù)對(duì)象統(tǒng)計(jì)信息的關(guān)鍵命令,這些統(tǒng)計(jì)信息對(duì)于查詢(xún)優(yōu)化器生成高效執(zhí)行計(jì)劃至關(guān)重要。

一 ANALYZE 命令

1.1 基本語(yǔ)法

ANALYZE [ ( option [, ...] ) ] [ table_and_columns [, ...] ]
ANALYZE [ VERBOSE ] [ table_and_columns [, ...] ]

where option can be one of:

    VERBOSE [ boolean ]
    SKIP_LOCKED [ boolean ]
    BUFFER_USAGE_LIMIT size

and table_and_columns is:

    table_name [ ( column_name [, ...] ) ]

1.2 鎖級(jí)別

  • 不會(huì)鎖表(不阻塞 DML 操作)
  • 只獲取 ShareUpdateExclusiveLock 鎖
    • 允許并發(fā)讀取和寫(xiě)入
    • 僅阻塞 ALTER TABLE、DROP TABLEVACUUM FULL 等DDL操作
  • 并發(fā)影響
    • ? 允許并發(fā) SELECT/INSERT/UPDATE/DELETE
    • ? 允許并發(fā) CREATE INDEX CONCURRENTLY
    • ? 阻塞 ALTER TABLE、DROP TABLE、VACUUM FULL

1.3 對(duì)索引的影響

當(dāng)對(duì)表執(zhí)行 ANALYZE 時(shí):

  • 會(huì)收集該表所有索引的統(tǒng)計(jì)信息
  • 不會(huì)重建或修改索引本身
  • 僅更新 pg_statistic 系統(tǒng)目錄中的統(tǒng)計(jì)信息

二 類(lèi)似操作的鎖對(duì)比

命令鎖類(lèi)型是否阻塞DML主要用途
ANALYZEShareUpdateExclusiveLock更新統(tǒng)計(jì)信息
REINDEX排他鎖重建索引
REINDEX CONCURRENTLYShareUpdateExclusiveLock無(wú)鎖重建索引
VACUUMShareUpdateExclusiveLock清理死元組
VACUUM FULL排他鎖重組表數(shù)據(jù)

三 使用場(chǎng)景

3.1 常規(guī)維護(hù)

-- 分析單個(gè)表
ANALYZE customers;

-- 分析特定列
ANALYZE customers (customer_id, name);

-- 分析整個(gè)數(shù)據(jù)庫(kù)
ANALYZE;

3.2 數(shù)據(jù)大量變更后

-- 批量導(dǎo)入數(shù)據(jù)后
COPY employees FROM '/path/to/data.csv';
ANALYZE employees;

3.3 性能調(diào)優(yōu)

-- 查詢(xún)性能下降時(shí)
ANALYZE VERBOSE orders;

四 配置參數(shù)

自動(dòng)分析

autovacuum_analyze_scale_factor = 0.1  -- 10%行變化后觸發(fā)
autovacuum_analyze_threshold = 50      -- 最少50行變化

采樣設(shè)置

default_statistics_target = 100        -- 統(tǒng)計(jì)信息詳細(xì)程度
alter table large_table set (analyze_sample_percentage = 5); -- 對(duì)大表減少采樣

五 監(jiān)控分析狀態(tài)

查看最后分析時(shí)間

SELECT schemaname, relname, last_analyze, analyze_count 
FROM pg_stat_user_tables;

輸出示例:

 schemaname |     relname      |         last_analyze          | analyze_count 
------------+------------------+-------------------------------+---------------
 yewu1      | t4               |                               |             0
 yewu1      | t1               | 2025-05-03 18:51:47.366276-07 |             1
 yewu1      | t2               |                               |             0
 public     | pgbench_history  |                               |             0
 yewu1      | test6            |                               |             0
 public     | pgbench_tellers  |                               |             0
 yewu1      | test5            |                               |             0
 public     | pgbench_branches |                               |             0
 yewu1      | test3            |                               |             0
 yewu1      | test2            |                               |             0
 yewu1      | t3               |                               |             0
 public     | pgbench_accounts |                               |             0
 yewu1      | test10           |                               |             0
 yewu1      | test4            |                               |             0
(14 rows)

檢查待分析變更量

SELECT schemaname, relname, 
       n_mod_since_analyze,
       n_live_tup,
       round(n_mod_since_analyze*100.0/nullif(n_live_tup,0),2) as mod_percent
FROM pg_stat_user_tables
ORDER BY n_mod_since_analyze DESC;

輸出示例:

 schemaname |     relname      | n_mod_since_analyze | n_live_tup | mod_percent 
------------+------------------+---------------------+------------+-------------
 yewu1      | t3               |                 190 |         10 |     1900.00
 yewu1      | test10           |                   4 |          4 |      100.00
 yewu1      | t2               |                   0 |      10000 |        0.00
 public     | pgbench_history  |                   0 |          0 |            
 yewu1      | test6            |                   0 |          0 |            
 public     | pgbench_tellers  |                   0 |          0 |            
 yewu1      | test5            |                   0 |          0 |            
 public     | pgbench_branches |                   0 |          0 |            
 yewu1      | test3            |                   0 |          0 |            
 yewu1      | test2            |                   0 |          0 |            
 public     | pgbench_accounts |                   0 |          0 |            
 yewu1      | t4               |                   0 |      10000 |        0.00
 yewu1      | test4            |                   0 |          0 |            
 yewu1      | t1               |                   0 |          0 |            
(14 rows)

六 性能考慮

資源使用

  • 會(huì)消耗CPU和I/O資源
  • 對(duì)大表可能耗時(shí)較長(zhǎng)

最佳實(shí)踐

  • 在低峰期執(zhí)行大表分析
  • 對(duì)關(guān)鍵表設(shè)置更頻繁的自動(dòng)分析
  • 超大表考慮減小采樣比例

七 與VACUUM的區(qū)別

特性ANALYZEVACUUM
主要目的收集統(tǒng)計(jì)信息清理死元組
鎖級(jí)別ShareUpdateExclusive同左(但VACUUM FULL為排他鎖)
是否回收空間是(VACUUM FULL)
更新統(tǒng)計(jì)信息可選(ANALYZE選項(xiàng))

更多詳細(xì)信息請(qǐng)查看官方文檔:https://www.postgresql.org/docs/16/sql-analyze.html

PostgreSQL 中的 ANALYZE 命令不會(huì)鎖表,是安全的維護(hù)操作,可以隨時(shí)在生產(chǎn)環(huán)境執(zhí)行。如果需要重建索引(而非更新統(tǒng)計(jì)信息),則應(yīng)使用 REINDEX 命令,并注意其鎖行為。

到此這篇關(guān)于PostgreSQL中ANALYZE命令的使用的文章就介紹到這了,更多相關(guān)PostgreSQL ANALYZE內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • postgresql 除法保留小數(shù)位的實(shí)例

    postgresql 除法保留小數(shù)位的實(shí)例

    這篇文章主要介紹了postgresql 除法保留小數(shù)位的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享

    postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享

    這篇文章主要介紹了postgreSQL數(shù)據(jù)庫(kù)默認(rèn)用戶postgres常用命令分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL之分區(qū)表(partitioning)

    PostgreSQL之分區(qū)表(partitioning)

    通過(guò)合理的設(shè)計(jì),可以將選擇一定的規(guī)則,將大表切分多個(gè)不重不漏的子表,這就是傳說(shuō)中的partitioning。比如,我們可以按時(shí)間切分,每天一張子表,比如我們可以按照某其他字段分割,總之了就是化整為零,提高查詢(xún)的效能
    2016-11-11
  • PostgreSQL中的collations用法詳解

    PostgreSQL中的collations用法詳解

    這篇文章主要介紹了PostgreSQL中的collations用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql 實(shí)現(xiàn)查詢(xún)一個(gè)表/所有表的所有列名

    Postgresql 實(shí)現(xiàn)查詢(xún)一個(gè)表/所有表的所有列名

    這篇文章主要介紹了Postgresql 實(shí)現(xiàn)查詢(xún)一個(gè)表/所有表的所有列名,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • PostgreSQL教程(十五):系統(tǒng)表詳解

    PostgreSQL教程(十五):系統(tǒng)表詳解

    這篇文章主要介紹了PostgreSQL教程(十五):系統(tǒng)表詳解,本文講解了pg_class、pg_attribute、pg_attrdef、pg_authid、pg_auth_members、pg_constraint、pg_tablespace、pg_namespace、pg_database等表的作用和字段介紹,需要的朋友可以參考下
    2015-05-05
  • 教你在PostgreSql中使用JSON字段的方法

    教你在PostgreSql中使用JSON字段的方法

    這篇文章主要介紹了干貨教你在PostgreSql中使用JSON字段,通過(guò)本文可掌握在pg數(shù)據(jù)庫(kù)中如何正確使用json字段,如何進(jìn)行數(shù)據(jù)查詢(xún),在where子查詢(xún)中如何使用,以及對(duì)json值進(jìn)行聚合查詢(xún)使用,需要的朋友可以參考下
    2022-11-11
  • postgresql 利用xlog進(jìn)行熱備操作

    postgresql 利用xlog進(jìn)行熱備操作

    這篇文章主要介紹了postgresql 利用xlog進(jìn)行熱備操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Vcenter清理/storage/archive空間的處理方式

    Vcenter清理/storage/archive空間的處理方式

    通過(guò)SSH登陸到Vcenter并檢查/storage/archive目錄發(fā)現(xiàn)占用過(guò)高,該目錄用于存儲(chǔ)歸檔的日志文件和歷史數(shù)據(jù),解決方案是保留近30天的歸檔文件,這篇文章主要給大家介紹了關(guān)于Vcenter清理/storage/archive空間的處理方式,需要的朋友可以參考下
    2024-11-11
  • PostgreSQL中實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)監(jiān)控和預(yù)警的步驟詳解

    PostgreSQL中實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)監(jiān)控和預(yù)警的步驟詳解

    在 PostgreSQL 中實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)監(jiān)控和預(yù)警是確保數(shù)據(jù)庫(kù)性能和數(shù)據(jù)完整性的關(guān)鍵任務(wù),以下將詳細(xì)討論如何實(shí)現(xiàn)此目標(biāo),并提供相應(yīng)的解決方案和具體示例,需要的朋友可以參考下
    2024-07-07

最新評(píng)論