首页 > 数据库 >调优PostgreSQL 14和更早版本的统计信息收集器

调优PostgreSQL 14和更早版本的统计信息收集器

时间:2023-05-11 17:23:53浏览次数:43  
标签:stats 14 temp 收集器 ramfs directory PostgreSQL postgres

PostgreSQL 15的一项重大改进:PostgreSQL 15:统计收集器不见了?

虽然对这个即将到来的改进高兴,但我们可以在以前的版本中看到一些关于“效率低下”的评论。

这让我意识到,尽管调整stats collector的特性是官方文档和建议的一部分,而且过去有许多关于它的博客帖子,但我很少看到有人在实践中尝试调整它。所以我觉得值得再提醒一下。

PostgreSQL 14及更早版本的选项

简单地说,将生成stats文件的目录(stats_temp_directory)移动到RAMFS或TEMPFS(基于RAM的文件系统)中的某个位置,可以节省IO开销,同时使stats collector更加高效和准确。

PostgreSQL文档也正式建议这样做以减少影响。

为了更好的性能,stats_temp_directory可以指向基于RAM的文件系统,减少了物理I/O需求。当服务器完全关闭时,统计数据的永久副本存储在pg_stat子目录,以便可以在服务器重新启动后保留统计信息。

参考:PostgreSQL文档

需要多大的空间?

stats文件的当前位置可以通过检查stats_temp_directory来查看

在Red Hat克隆上,默认位置将在数据目录中。

postgres=# show stats_temp_directory ;
 stats_temp_directory 
----------------------
 pg_stat_tmp

而在Debian/Ubuntu上,它会在/var/run/postgresql,例如:

postgres=# show stats_temp_directory ;
          stats_temp_directory           
-----------------------------------------
 /var/run/postgresql/14-main.pg_stat_tmp

确定了位置,stat文件一般大小不会高于几百MB。大小取决于数据库和数据库中对象(表和索引)的数量。更重要的是,收集了哪些统计数据,这些统计数据由以下参数控制 track_activities , track_activity_query_size , track_commit_timestamp , track_counts , track_functions  and track_io_timing  as mentioned in PostgreSQL Documentation.

Ramfs or tempfs?

有两种主要的基于RAM的文件系统:ramfs和tempfs。

ramfs可以使用/etc/fstab类似条目

ramfs /var/lib/pgsql_stats_ram ramfs size=1G,uid=postgres,gid=postgres 0 0

 

然而,有几个缺点。即使我们指定了uid and gid,,如上所示ramfs将被挂载为root:(。我们需要一个脚本或方法来改变PostgreSQL将运行的“postgres”账户的所有权或授予其权限。

ramfs的另一个问题是我们无法使用df命令。但是也有一个优点:ramfs可以动态调整大小,并且可以根据需要动态增长。这消除了估计所需大小的问题。但是,如果需要的话,ramfs不能使用swap,所以存在系统挂起的轻微风险,特别是在那些内存约束高的系统上。

考虑到风险和缺点,ramfs不太受欢迎,tempfs是最常用的

这是一个 tempfs 的 /etc/fstab 示例:

tmpfs /var/lib/pgsql_stats_tmp tmpfs size=1G,uid=postgres,gid=postgres 0 0

 

一旦挂载了这个文件系统,这与ramfs不同,它将显示为一个常规文件系统:

$ df -h| grep -E "(tmpfs|ramfs)"
Filesystem Size Used Avail Use% Mounted on...
tmpfs 1.0G 0 1.0G 0% /var/lib/pgsql_stats_tmp

现在的问题是指示PostgreSQL使用这个位置作为stats_temp_directory。请记住,这是一个动态参数,不需要PostgreSQL来反弹。

ALTER SYSTEM SET stats_temp_directory = '/var/lib/pgsql_stats_tmp';

我们只需要向PostgreSQL发送信号(SIGHUP)来重新加载新的配置。

select pg_reload_conf();

参考:

https://www.percona.com/blog/dont-forget-to-tune-stats-collector-for-postgresql-14-and-older/

https://www.postgresql.org/docs/14/monitoring-stats.html#MONITORING-STATS-SETUP

https://www.percona.com/blog/postgresql-15-stats-collector-gone-whats-new/

标签:stats,14,temp,收集器,ramfs,directory,PostgreSQL,postgres
From: https://www.cnblogs.com/andy6/p/17391679.html

相关文章

  • postgresql 更改目类后.conf的位置和shared_preload_libraries写多个的写法
    postgresql更改目类后.conf的位置和shared_preload_libraries写多个的写法postgresql更改了pgdata后。conf会到新的pgdata里面才能看到 需预加载加载多个的话按下面这样写shared_preload_libraries='pg_strom,pipelinedb'  shared_preload_librariesshared_preloa......
  • PostgreSQL如何查询IO消耗最高的SQL及优化,pg_stat_statements插件安装及使用
    PostgreSQL如何查询IO消耗最高的SQL及优化,pg_stat_statements一、安装pg_stat_statements插件二、加载pg_stat_statements模块三、配置pg_stat_statements采样参数四、创建pg_stat_statementsextension五、分析SQL查询哪些sql语句执行效率慢:重置统计信息普通用户需执......
  • Postgresql集群搭建与PostGIS安装
    目录Postgresql集群搭建手册一、软件安装预先准备工作二、Postgresql安装(附带PostgreGIS安装)2.1potgresql安装2.2postgres常见错误说明三、PostgreGIS安装postGIS四.Postgresql数据库备份与恢复五.postgresSQL集群重启Postgresql集群搭建手册一、软件安装预先准备工作Linu......
  • java8 数组使用流和收集器格式化拼接数组中字符串并以“,”间隔,且首尾分别用 “[” 和
    方法:Stringresult=artist.stream().map(Art::getName).collect(Collectors.joining(",","[","]"));(注:joining(CharSequencedelimiter,CharSequenceprefix,CharSequencesuffix)方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分......
  • Postgresql insert on conflict笔记
    描述针对数据写入时有主键冲突的情况,INSERTONCONFLICT语法可以将冲突主键的INSERT行为转换为UPDATE行为,从而实现冲突主键的覆盖写入。该特性又称UPSERT覆盖写,与MySQL的REPLACEINTO类似。[WITH[RECURSIVE]with_query[,...]]INSERTINTOtable_name[ASalias][......
  • 华硕ROG STRIX B760-G GAMING WIFI小吹雪D5评测:最能超的小主板 轻松提升14%
    一、前言:华硕推出新版B760-G小吹雪主板加入DDR5内存支持和以往的每一代规格一样,DDR5内存上市初期的表现并不如人意,频率是高了,但延迟也高了,导致性能提升一般般。经过一两年的演进,DDR5内存的时序延迟得到了极大的改善,再加上频率、带宽的明显进步,尤其是价格的平民化,DDR5内存逐渐成......
  • P2014
    P2014题意从一棵树中选择m条与根节点直接/间接相连的点,使得总权值最大DP(树上背包)状态:\(dp[i][j]\)表示在以\(i\)为根的子树中,选择了\(j\)个点的权值最大值转移选择第k个点:\(dp[i][j]=dp[i][j-k]+dp[to][k]\)不选第k个点:\(dp[i][j]=dp[i][j]\)决策:\(dp[i][j]=......
  • 关于arcgis和postgresql数据库创建企业级地理数据库的配置文件
    第一:需要将arcgis的C:\ProgramFiles(x86)\GeoScene\Desktop\Desktop10.8\DatabaseSupport\PostgreSQL\12\Windows64这个路径下的文件拷贝到postgresql数据库的安装目录的lib文件夹中;第二:需要将五个文件libeay32.dll、libiconv-2.dll、libintl-8.dll、libpq.dll和ssleay32.d......
  • C#设计模式14——模板方法的写法
    模板方法(TemplateMethod)是一种设计模式,它定义了一个操作中的算法的骨架,将某些步骤推迟到子类中实现,从而使得子类可以在不改变算法骨架的情况下重新定义算法的某些步骤。作用:使用模板方法可以使得代码的重复度降低,同时也能够避免由于算法中某个特定步骤的改变导致整体算法需要改......
  • PostgreSQL-HA 高可用集群在 Rainbond 上的部署方案
    PostgreSQL是一种流行的开源关系型数据库管理系统。它提供了标准的SQL语言接口用于操作数据库。repmgr是一个用于PostgreSQL数据库复制管理的开源工具。它提供了自动化的复制管理,包括:故障检测和自动故障切换:repmgr可以检测到主服务器故障并自动切换到备用服务器。自动故......