重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 829|回复: 1
打印 上一主题 下一主题

PG 的统计信息收集器Stats Collector

[复制链接]
跳转到指定楼层
楼主
发表于 2024-8-31 17:00:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PostgreSQL 的统计信息收集器(Stats Collector)通过后台进程运行,负责收集和维护数据库在运行期间生成的各种统计信息。这些信息对于查询优化器(Query Planner)的决策、性能监控和维护任务(如自动 `VACUUM`)至关重要。了解其原理有助于更好地优化数据库性能。

### 1. **统计信息收集器的结构**
PostgreSQL 的统计信息收集系统主要由以下几个部分组成:
- **后台进程**:`pgstat` 是专门负责统计信息收集的后台进程,负责汇总和维护统计数据。
- **共享内存(Shared Memory)**:用于临时存储活动的统计数据,以便后续处理。
- **统计文件(Stats Files)**:这些文件存储在磁盘上,保存着持久化的统计信息,通常位于数据目录的 `pg_stat` 目录下。

### 2. **统计信息的收集与处理流程**

#### a. **事件的触发**
当数据库在运行过程中执行诸如查询、插入、更新、删除等操作时,这些操作会触发统计事件。这些事件包括:
- **表扫描**(顺序扫描、索引扫描等)。
- **DML 操作**(插入、更新、删除)。
- **事务操作**(启动、提交、回滚)。
- **锁信息**(死锁检测等)。

这些事件由数据库内核在操作执行时捕获,并立即记录在进程的本地内存中。

#### b. **本地内存的记录**
每个数据库进程维护一个本地的统计数据缓存,这些缓存会定期将数据推送到共享内存。推送的频率取决于事件类型和系统配置。这个过程不会立即影响共享内存中的数据,而是由收集器进程定期汇总这些本地缓存的数据。

#### c. **数据的汇总**
`pgstat` 进程定期扫描共享内存中的数据,并将这些数据整合、汇总为全局统计信息。这个过程通常在后台自动进行,且对系统性能影响较小。

#### d. **数据的持久化**
汇总后的统计信息会定期写入磁盘上的统计文件。这个持久化过程确保了即使系统重启,统计信息也不会丢失。这些文件包括表的访问次数、索引使用情况、事务信息等。

### 3. **统计信息的查询**

PostgreSQL 提供了多个系统视图供用户查询和分析这些统计数据。常见的视图包括:
- **`pg_stat_activity`**:显示当前正在执行的查询及其状态。
- **`pg_stat_user_tables`**:显示用户表的统计信息,如顺序扫描次数、索引扫描次数、插入/更新/删除操作次数等。
- **`pg_stat_user_indexes`**:显示用户索引的使用统计信息。

通过这些视图,用户可以实时了解数据库的运行状态和性能瓶颈。例如,以下查询可以显示所有表的顺序扫描和索引扫描次数:

```sql
SELECT relname, seq_scan, idx_scan
FROM pg_stat_user_tables;
```

### 4. **性能与配置**
为了优化统计信息收集器的性能,PostgreSQL 提供了一些配置参数:
- **`track_activities`**:启用或禁用查询活动的跟踪。
- **`track_counts`**:启用或禁用表和索引访问计数的跟踪。
- **`track_io_timing`**:启用或禁用 I/O 操作的计时跟踪。
- **`stats_temp_directory`**:指定统计文件的存放位置。

### 5. **实时性与延迟**
由于统计信息收集器是异步工作的,并且涉及数据的汇总和写入磁盘的操作,因此这些统计信息通常不是实时的。特别是在高负载环境中,可能会有一些延迟。用户在使用这些数据时需要考虑到这一点,尤其是在进行精确的性能分析时。

### 总结
PostgreSQL 的统计信息收集器通过高效的异步机制收集、汇总和持久化数据库运行时的统计信息。这些数据对于查询优化、性能调优和系统维护至关重要。通过了解其工作原理和相关配置,数据库管理员可以更好地监控和优化 PostgreSQL 的性能。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
 楼主| 发表于 2024-8-31 17:04:56 | 只看该作者
注意,从PG15开始,stat collector 被移除了,而是通过内核使用内存的方式实现了同样的功能。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-28 18:05 , Processed in 0.102978 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表