项目中PostGreSql数据库的维护

目录

一、背景

[二、PostGreSql 数据库维护](#二、PostGreSql 数据库维护)

[2.1 清理操作VACUUM](#2.1 清理操作VACUUM)

[2.2 ANALYZE收集表的统计信息](#2.2 ANALYZE收集表的统计信息)

[2.3 重建索引REINDEX](#2.3 重建索引REINDEX)

[2.4 聚簇操作CLUSTER](#2.4 聚簇操作CLUSTER)

[2.5 实际中应用](#2.5 实际中应用)


一、背景

实际交通项目中PostGreSql数据库中的车辆相关数据每天不断更新增加,长此以往数据库的查询插入更新等效率会逐渐增加,相关数据库操作的TimeBenck也会频频爆出耗时日志。除此之外磁盘存储的坏道,数据的丢失,索引的损坏,数据库的断电崩溃等等也会引起数据库连接问题,对于一些大型商业停车场会带来较大的损失。以下记录实际中常用的一些排查维护方法。

二、PostGreSql 数据库维护

2.1 清理操作VACUUM

VACUUM 操作的主要目的是回收数据库中不再使用的空间,并优化数据库的性能,减少表的膨胀,具体原理如下:

标记和删除: 扫描数据库中的表和索引,标记所有不再使用的行和页面。

重建表和索引: 将未被标记的行和页面复制到新的存储位置,从而释未使用的空间。

更新统计信息: 重新计算数据库的统计信息,以便优化查询计划。
具体使用:

VACUUM;

-- 或者针对特定表

VACUUM table_name;

2.2 ANALYZE收集表的统计信息

ANALYZE 命令用于收集表的统计信息,这些信息对于查询优化器生成高效的查询计划非常重要。它会扫描整个表并收集数据分布的信息,如最小值、最大值、空值比例等。

数据采样: ANALYZE 命令会从表中随机抽取一定数量的数据样本。默认情况下,PostgreSQL 会从每个表的每一列中抽取大约 1% 的数据。

统计信息收集: 通过分析这些样本数据,PostgreSQL 可以计算出各种统计信息,包括:列的最小值和最大值,不同值的数量和空值的比例等

存储统计信息: 这些统计信息会被存储在系统目录中,供查询优化器使用。
作用: 通过提供最新的统计信息,ANALYZE 可以帮助查询优化器选择最佳的查询执行计划,从而提高查询性能。

**自动维护:**在大多数情况下,PostgreSQL 会自动运行 ANALYZE 命令,特别是在大量数据变更后。然而,手动运行 ANALYZE 可以确保统计信息是最新的,尤其是在数据分布发生显著变化时。

具体使用:

ANALYZE;

-- 或者针对特定表

ANALYZE table_name

2.3 重建索引REINDEX

REINDEX 命令用于重建索引,这在索引变得碎片化时特别有用,可以显著提高查询性能。通常在大量插入、更新和删除操作后使用。
主要用途:

1.优化性能: 随着数据的插入、更新和删除操作,索引可能会变得碎片化,导致查询性能下降。通过 REINDEX,可以重新构建这些索引,从而恢复其性能。

2.修复损坏的索引 :如果索引由于某些原因(如硬件故障或数据库崩溃)而损坏,可以使用 REINDEX 来修复。

3.更新统计信息:在执行 REINDEX 时,PostgreSQL 会同时更新与索引相关的统计信息,这对于查询优化器来说非常重要。

具体使用:

REINDEX TABLE table_name;

-- 或者重建所有索引

REINDEX DATABASE database_name;

2.4 聚簇操作CLUSTER

当表数据在磁盘上的顺序与索引顺序不匹配时,查询可能会变得较慢,聚簇(Clustering)是一种物理存储优化技术,通过将相关的数据行存储在相同的物理块上,从而减少磁盘I/O操作,提高查询性能,但CLUSTER 是一个耗时的操作,避免在高负载时运行。

具体原理: CLUSTER 命令会创建一个新的临时表,将原表中的数据按照指定的索引顺序插入到新表中。然后,它会用新表替换旧表。这个过程包括读取、排序和写入数据,消耗大量的 I/O 资源和时间。

具体使用:

CLUSTER table_name USING index_name

2.5 实际中应用

在实际项目中,对于现场中数据库索引失效、断电崩溃、查询较慢等等影响现场运行的问题常常可以采用以上方式临时修复,保证现场正常运行在图后续优化改进。此外这些命令通常会结合使用以保持数据库的性能和健康状态。比如可以在定期维护窗口期内运行以下命令,也可以在每次软件退出或启动前运行。

VACUUM ANALYZE;

REINDEX TABLE my_table;

CLUSTER my_table USING my_index;

相关推荐
ClickHouseDB32 分钟前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_6399069436 分钟前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺2 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw2 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社3 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙3 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3764 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川5 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组5 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制