开始学习 PostgreSQL 调优

我第一次实习时需要对PosgreSQL进行调优,所以我会列举一些可能有用的方法。

我们选择了预计在2024年之前仍有广泛使用的PostgreSQL 12作为支持结束的对象。

(仅供参考)

 

桌子信息

-- テーブル一覧を表示
\dt
-- テーブルの詳細情報を表示
\d /* table_name */

特别是/* table_name */非常重要。它可以显示表的列清单,还可以检查正规化的状态。

由於索引一覽也會顯示出來,所以如果想要建立索引,首先應考慮是否能夠利用現有的索引來解決問題。例如,可以考慮進行列的排序變更等操作。
注意避免過度創建索引對性能造成影響。

实施计划

(仅供参考)

 

我想专注于执行计划中可能花费时间较长的部分,这对于进行SQL的基本调优非常重要。

获得方式

-- insert,update,deleteの場合は前後のbegin;rollback;を忘れずに実行する
-- BEGIN;
EXPLAIN ANALYZE /* SQL文 */;
-- ROLLBACK;

看法

首先,查看层次结构。
从上层到下层,对每一行进行循环并执行操作。
将每一行的处理内容与实际的SQL进行对照。

    • time: 処理時間

 

    rows: 選択されている件数

如果时间很大,可能会出现瓶颈。
如果行数很多,重复次数会增加。

可以像每次都要谷歌一样去了解各种处理的含义。
了解联接处理的嵌套循环、散列和合并的特性可能会更容易上手。

分析,清洁

(仅供参考)

 

ANALYZE是为了得到关于实际数据存储情况的统计信息,以便获得适当的执行计划。
VACUUM是用于物理上删除不再需要的行,例如在delete和update操作之后。

如果通常执行无法满足要求,可以选择各种强大的执行选项(词汇力),例如使用VACUUM的FULL选项,它会完全复制表格,得到一个全新整齐排列的表格。(但需要排他锁,并且需要较长时间执行。)

执行步骤

-- VACUUM,ANALYZEはそれぞれ単品実行できる
VACUUM ANALYZE /* table_name */ /* column_name */;

系统目录

(仅供参考)

 

从公式文件中

系统目录是一个存储关系型数据库管理系统的表、列等模式元数据和内部信息的地方。

我将列举以下可能用于调整的项目。

统计数据

(仅供参考)

 

执行分析后的结果将被保存。

pg_statistics是底层表,pg_stats是供普通用户使用的视图。
一般来说,使用pg_stats应该没有问题。

根据统计信息的名字,通常是指获取相对于表格的统计数据的形象描述。例如,记录列值的分布情况的直方图等。

由于优化器的自动操作,我认为没有太多机会去仔细查看。
当想要进行全力调优时,如果不了解数据的分布,就无法选择适当的索引和执行计划。

pg_locks- PostgreSQL锁

(仅供参考)

 

可以查看当前的锁状态。
了解表级、行级等锁的类型似乎会更好。
过大的锁可能是事故的原因。
死锁似乎需要重新审视处理的顺序。

统计信息收集器

(仅供参考)

 

在 pg_stat_database 中,您可以查看数据库上的事务执行次数、缓存命中块数等与表格统计信息不同的统计信息。

定期检查可以确认一周的倾向,例如星期几和时间段。这对于整个数据库的调优是必要的。目前还不确定是否可以用于SQL调优。

以下是OSS-DB Gold考试范围的内容。看一下可能会有好处。

pg_stat_activity、pg_stat_database
pg_stat_all_tables等,就是查询级别的统计信息
pg_statio_all_tables等,就是块级别的统计信息

pg_stat_archiver (归档统计)
pg_stat_bgwriter (后台写入统计)
待机事件 (pg_stat_activity.wait_event)
pg_stat_progress_vacuum (空闲进度统计)

提示句 jù)

(仅供参考)

 

当优化程序不听话的时候,点燃它时要祈祷的那个东西。请注意它不是官方的,而是外部模块。

插入、更新的开销

(仅供参考)

 

当数据迁移等操作频繁执行insert和update时,应减少开销。具体而言,开销指的是

    • インデックスにもinsert(updateも内部的にdelete→insertしている、はず)

 

    制約の条件を満たしているか照合(一意制約、外部キー制約)

可以参考以下网址等等。其余内容可以在参考网址查找(委派他人处理)。

其他

SQL相关书籍的目录

如果以目录的级别回忆起来,可能会有好事发生(祈祷)。
如果有时间的话,想要重新阅读书籍。

 

投影片

我认为有很多不同的选择,但就目前而言,我在路上找到了这个。

 

广告
将在 10 秒后关闭
bannerAds