天天看点

PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle

PostgreSQL , dump_stat , 统计信息 , 导出导入

<a href="https://github.com/digoal/blog/blob/master/201709/20170921_01.md">《PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)》</a>

EXPLAIN是PG数据库用于输出SQL执行计划的语法,

1、生成的执行计划中包含COST一项。

如果校准了成本因子,COST可以和SQL实际执行时间对其。因子校对的方法如下,实际上每一种硬件,我们只需要校对一遍即可。

<a href="https://github.com/digoal/blog/blob/master/201404/20140423_01.md">《优化器成本因子校对(disk,ssd,memory IO开销精算) - PostgreSQL real seq_page_cost &amp; random_page_cost in disks,ssd,memory》</a>

<a href="https://github.com/digoal/blog/blob/master/201311/20131126_03.md">《优化器成本因子校对 - PostgreSQL explain cost constants alignment to timestamp》</a>

校对因子如下:

2、评估COST还需要依赖统计信息柱状图:

src/include/catalog/pg_statistic.h

那么这些统计信息如何导入导出呢?

<a href="https://postgrespro.com/docs/postgresproee/9.6/dump-stat.html">https://postgrespro.com/docs/postgresproee/9.6/dump-stat.html</a>

dump_stat这个插件是PostgreSQL pro推出的兼容9.6版本的导出统计信息的插件。

代码如下:

<a href="https://github.com/postgrespro/postgrespro/tree/PGPRO9_6">https://github.com/postgrespro/postgrespro/tree/PGPRO9_6</a>

<a href="https://github.com/postgrespro/postgrespro/tree/PGPRO9_6/contrib/dump_stat">https://github.com/postgrespro/postgrespro/tree/PGPRO9_6/contrib/dump_stat</a>

通过dump_stat导出(导出的结构已经是SQL形式),然后通过SQL导入。

pg_statistic的每一条记录,产生一条如下SQL:

(表示public.test表的info列的统计信息,如果存在则更新,不存在则插入。)

1、修改postgresql.conf,允许修改系统表,重启数据库生效配置

2、导入统计信息

3、导入完成后,将allow_system_table_mods设置为off,重启数据库。

我们甚至可以将Oracle数据库的统计信息,平移到PG数据库,对齐需要的元素即可:

记录数、占用多少个数据块。每列的空值比例、平均列宽、唯一值比例或个数、高频值以及频率、柱状图分布、存储相关性、多值列(高频元素及比例、元素柱状图分布)。

好处:在迁移ORACLE数据时,可以关闭autovacuumm(提高导入速度),通过这种方法来导入统计信息。(只要元素对应即可,当然有些元素可能是ORACLE中不采集的,比如多值列的统计信息)。

下一篇: poj-1426(转)