陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235/19906632509(微信同号)

客服微信

【PostgreSQL PGCE-091题目解析26】PG中对于大表,ANALYZE会读取表的所有内容进行统计信息收集。

作者:刘峰
原创
发布时间:2023-12-22 17:45
浏览量:331

考试科目PGCE-E-091

考试题量:44 道单项选择题、29 道多项选择题(每题 2 分)

通过分数:60%

考试时间:60min

本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。




PG中对于大表,ANALYZE会读取表的所有内容进行统计信息收集。

A、正确

B、错误


参考答案:B




解析

根据官方文档中的解释

对于大型表,ANALYZE 对表内容进行随机采样,而不是检查每一行。这甚至可以在很短的时间内分析非常大的表。但请注意,统计信息只是近似值,每次运行 ANALYZE 时都会略有变化,即使实际表内容没有变化。这可能会导致 EXPLAIN 显示的规划者估计成本发生微小变化。在极少数情况下,这种不确定性将导致规划器对查询计划的选择在 ANALYZE 运行后发生变化。为了避免这种情况,请增加 ANALYZE 收集的统计数据量,如下所述。


验证


1、模拟一张大表

testdb=# select count(1) from t1;
  count  
---------
 4613724
(1 row)


2、插入t1表,数据量不超过T1表的10%

目的是不触发自动收集统计信息

testdb=# insert into t1 select * from t1 limit 419420;
INSERT 0 419420
testdb=# select count(1) from t1;
  count  
---------
 4613724
(1 row)


3、查看t1的统计信息

testdb=# select relname,reltuples,relpages from pg_class where relname='t1';
 relname |  reltuples   | relpages 
---------+--------------+----------
 t1      | 4.194304e+06 |    18559

确认统计信息并未更新


4、分析表t1

testdb=# analyze VERBOSE t1;
INFO:  analyzing "public.t1"
INFO:  "t1": scanned 20415 of 20415 pages, containing 4613724 live rows and 0 dead rows; 30000 rows in sample, 4613724 estimated total rows
ANALYZE

这里显示是采样统计信息收集


5、查看表t1的统计信息

testdb=# select relname,reltuples,relpages from pg_class where relname='t1';
 relname |  reltuples   | relpages 
---------+--------------+----------
 t1      | 4.613724e+06 |    20415


结论

从上面实验确认,分析大表是采样,并不是全表。



PostgreSQL PGCE考试为理论考试,需通过两门考试才能拿到“PostgreSQL PGCE证书”。



以下是PostgreSQL官网的考试费,可以添加云贝教育的课程顾问老师微信19941464235或者19906632509,咨询有优惠


PostgreSQL证书如下 合格考生公布:考后不超过 5 个工作日  “开源软件联盟 PostgreSQL 分会”公众号发布  证书寄送:考后统一寄送至培训机构)



云贝教育有专业的PostgreSQL PGCE认证培训课程,想快速通过考试的同学可以扫码联系老师咨询(点击文字转跳至PostgreSQL PGCE纲)