进阶数据库系列(二十三):PostgreSQL 性能优化

PostgreSQL优化简介 PostgreSQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度,主要优化的方向可考虑如下几点:1)服务器硬件方面2)文件系统方面,例如通过优化文件系统,提高磁盘IO的读写速度;通过优化操作系统调度策略,提高PostgreSQL的在高负荷情况下负载能力等。3)数据库层面,例如数据库参数、表结构、索引、查询语句等优化方面。 阅读详情

前面介绍了 PostgreSQL基于 Patroni 高可用架构部署及故障切换、 基于 repmgr 高可用架构实践、基于 pgpool 实现读写分离实践、数据库备份与恢复、主从数据目录同步工具 pg_rewind、数据库作业调度工具等相关的知识点,今天我将详细的为大家介绍 PostgreSQL 性能优化相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

性能优化

优化简介
  • PostgreSQL优化一方面是找出系统的瓶颈,提高PostgreSQL数据库整体的性能;

  • 另一方面,需要合理的结构设计和参数调整,以提高用户操作响应的速度;

  • 同时还要尽可能的节省系统资源,以便系统可以提供更大负荷的服务。

PostgreSQL 数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。例如:

  • 通过优化文件系统,提高磁盘IO的读写速度;

  • 通过优化操作系统调度策略,提高 PostgreSQL 的在高负荷情况下负载能力;

  • 优化表结构、索引、查询语句等使查询响应更快。

首先了解系统情况后便可做相关合理的调整,以达到性能优化的目的。

/*CPU查看CPU型号*/
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

/*查看物理CPU个数*/
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l  

/*查看逻辑CPU个数*/
cat /proc/cpuinfo | grep "processor" | wc -l  

/*查看CPU内核数*/
cat /proc/cpuinfo | grep "cpu cores" | uniq  

/*查看单个物理CPU封装的逻辑CPU数量*/
cat /proc/cpuinfo | grep "siblings" | uniq  

/*计算是否开启超线程
##逻辑CPU > 物理CPU x CPU核数 #开启超线程
##逻辑CPU = 物理CPU x CPU核数 #没有开启超线程或不支持超线程*/

/*查看是否超线程,如果cpu cores数量和siblings数量一致,则没有启用超线程,否则超线程被启用。*/
cat /proc/cpuinfo | grep -e "cpu cores"  -e "siblings" | sort | uniq

/*内存
TOP
/*命令经常用来监控linux的系统状况,比如cpu、内存的使用等。*/
/*查看某个用户内存使用情况,如:postgres*/
top -u postgres
/*
内容解释:
  PID:#进程的ID
  USER:#进程所有者
  PR:#进程的优先级别,越小越优先被执行
  NInice:#值
  VIRT:#进程占用的虚拟内存
  RES:#进程占用的物理内存
  SHR:#进程使用的共享内存
  S:#进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
  %CPU:#进程占用CPU的使用率
  %MEM:#进程使用的物理内存和总内存的百分比
  TIME+:#该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
  COMMAND:#进程启动命令名称

常用的命令:
  P:#按%CPU使用率排行
  T:#按MITE+排行
  M:#按%MEM排行

/*查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:*/
pmap -d 14596
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep postgres |  sort -nrk5
/*其中rsz为实际内存,上例实现按内存排序,由大到小*/

/*看内存占用*/
free -m

/*看硬盘占用率*/
df -h

/*查看IO情况*/
iostat -x 1 10
/*如果 iostat 没有,要 yum install sysstat安装这个包,第一眼看下图红色圈圈的那个如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait,然后再看其他的参数,

内容解释:
rrqm/s:#每秒进行merge的读操作数目。即delta(rmerge)/s 
wrqm/s:#每秒进行merge的写操作数目。即delta(wmerge)/s 
r/s:#每秒完成的读I/O设备次数。即delta(rio)/s 
w/s:#每秒完成的写I/0设备次数。即delta(wio)/s 
rsec/s:#每秒读扇区数。即delta(rsect)/s 
wsec/s:#每秒写扇区数。即delta(wsect)/s 
rKB/s:#每秒读K字节数。是rsec/s的一半,因为每扇区大小为512字节 
wKB/s:#每秒写K字节数。是wsec/s的一半 
avgrq-sz:#平均每次设备I/O操作的数据大小(扇区)。即delta(rsect+wsect)/delta(rio+wio) 
avgqu-sz:#平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒) 
await:#平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio) 
svctm:#平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio) 
%util:#一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的

/*找到对应进程*/
ll /proc/进程号/exe

更多关于 PostgreSQL 系列的学习文章,请参阅:PostgreSQL 数据库,本系列持续更新中。

优化查询

分析查询语句EXPLAIN

使用 EXPLAIN 语句来分析一个查询语句,执行如下语句:

EXPLAIN ANALYZE SELECT * FROM fruits;
索引对查询速度的影响

下面是查询语句中不使用索引和使用索引的对比。首先,分析未使用索引时的查询情况,EXPLAIN 语句执行如下:

EXPLAIN  SELECT * FROM fruits WHERE f_name='apple';
【PostgreSQL】性能飞跃:PostgreSQL性能调优与优化策略 通用搜索树(GiST)索引是一种灵活的索引类型,支持多种数据类型和查询类型,包括全文搜索、空间数据查询等。它适用于地理信息系统(GIS)应用、全文搜索等场景,虽然查询效率可能不如特化索引(如 GIN 索引对于全文检索),但其广泛的适用性使其成为处理复杂查询的理想选择。GiST索引通过支持多种查询操作符类,允许用户定义特定的查询条件,从而提高查询效率。适用于那些经常执行精确匹配且不需要排序的场景,但要注意,如果索引列有大量重复值,Hash 索引的效率会降低。解读查询计划,识别慢查询的瓶颈,如全表扫描。 阅读详情

相关推荐

如何使用PostgreSQL数据库进行数据仓库建设

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。使用PostgreSQL进行数据仓库建设的目的在于利用其强大的功能和灵活性,构建高效、可靠的数据存储和分析平台。本文章的范围涵盖了从数据仓库的规划、设计、实现到维护的整个过程,重点介绍如何使用PostgreSQL来完成这些任务。

2502_91592937的博客 964

数据仓库与ETL实战:基于PostgreSQL的构建与优化

使用PostgreSQL构建数据仓库并实施ETL流程时,需要在设计阶段深入思考数据建模、ETL优化以及查询性能等问题。通过合理的分区策略、索引设计和ETL流程优化,可以确保数据仓库在高效存储数据的同时,提供强大的查询与分析能力。在构建企业级数据仓库时,PostgreSQL凭借其高性能、扩展性和开源特性,已成为越来越多企业的首选方案。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1069

PostgreSQL中Schema、Database和User之间的关系分析

PostgreSQL的核心概念间存在清晰的层级关系:数据库(Database)是最高容器,内含多个模式(Schema),每个模式又包含各种数据库对象。用户(User)通过权限控制访问这些资源,需要依次获得数据库连接、模式使用和对象操作权限。搜索路径(search_path)决定了对象查找顺序。这种结构实现了数据逻辑隔离、组织管理和精细的权限控制,管理员可通过分层授权机制灵活管理数据访问。典型工作流程包括创建数据库、模式、用户,并逐级授予相应权限。

liumangtuzi888的博客 760

PostgreSQL中Schema、Database、User和Tablespace之间的关系分析

PostgreSQL中Database是最高级别的数据容器,Schema是数据库内部的逻辑命名空间,User/Role用于权限管理,Tablespace控制物理存储位置。一个Database包含多个Schema,User通过权限访问不同Database和Schema,Tablespace可跨层级指定存储位置。最佳实践推荐单数据库多模式设计,利用表空间优化存储性能。这些概念的层级关系对数据库设计、安全管理和性能优化至关重要。

liumangtuzi888的博客 1207

PostgreSQL 删除数据库

PostgreSQL提供了三种删除数据库的方法:1.使用SQL语句DROP DATABASE,需在命令窗口执行;2.使用命令行工具dropdb,支持多种参数选项;3.通过pgAdmin图形界面工具操作。删除操作只能由超级管理员或数据库所有者执行,且数据不可恢复。执行时需指定数据库名称,可使用IF EXISTS避免报错,并支持设置连接参数如主机、端口、用户名等。删除前应谨慎确认,因为该操作会永久删除数据库及其所有数据。

nmxiaocui的博客 1029

PostgreSQL:十五. 性能优化

十五. 性能优化 优化简介: PostgreSQL优化一方面是找出系统的瓶颈,提高PostgreSQL数据库整体的性能; 另一方面,需要合理的结构设计和参数调整,以提高用户操作响应的速度; 同时还要尽可能的节省系统资源,以便系统可以提供更大负荷的服务。 PostgreSQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。例如: 通过优化文件系统,提高磁盘IO的读写速度; 通过优化操作系统调度策略,提高PostgreSQL的在高负荷情况下负载能力; 优化表结构、索引、查询

数据知道的博客 4万+

如何使用PostgreSQL数据库进行数据仓库的ETL操作

本文旨在为数据工程师、数据库管理员和分析师提供使用PostgreSQL进行数据仓库ETL操作的全面指南。ETL流程的基本原理PostgreSQL在ETL中的独特优势实际ETL实现的技术细节性能优化和最佳实践常见问题的解决方案首先介绍ETL和PostgreSQL的基本概念然后深入探讨核心技术和实现方法接着提供实际案例和代码示例最后讨论优化技巧和未来趋势ETL:提取(Extract)、转换(Transform)、加载(Load)的缩写,描述数据从源系统移动到目标数据仓库的过程。

2502_91592937的博客 873

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 161

FPGA数字下变频实战:用Vivado DDS IP核实现IQ采样与频率校正(附MATLAB仿真对比)

本文提供了一份基于Vivado DDS IP核实现FPGA数字下变频(DDC)的完整工程指南。详细阐述了IQ采样的原理、DDC链路构建、DDS频率校正的工程实现,并重点介绍了如何利用MATLAB搭建黄金参考模型进行全链路仿真与对比验证,分享了关键的调试技巧与性能优化建议。

t1u2v的博客 811

Fluent 2.5D动网格重构实战:涡旋压缩机复杂运动模拟指南

本文详细解析了Fluent 2.5D动网格重构技术在涡旋压缩机复杂运动模拟中的应用。通过对比传统方法,2.5D重构显著提升了计算效率和稳定性,特别适用于柱体类几何的网格处理。文章提供了从基础配置到参数优化的实战指南,包括关键设置步骤、常见问题排查及性能优化策略,帮助工程师有效解决动网格重构中的负体积和网格畸变问题。

weixin_28455801的博客 550

Frenet坐标系下动态街道场景的最优轨迹生成

本文详细解读了Lattice Planner

BigDavid123的博客 2393

raw_count、tpm、fpkm、rpkm如何选择

转录组测序中常见的数据类型有:raw_count、tpm、fpkm、rpkm。本文进行简单辨析: 一、概念 1 raw_count RNA-seq数据中,raw_count一般是指mapped到基因外显子区域的reads数目。比如说htseq,STAR,或者RSEM等NGS分析流程计算产生的counts值。其中RSEM(RNA-Seq by Expectation-Maximization),考虑到一条read 可能会匹配多个exon位置,故而其产生的为expected_count。 2 TPM

weixin_59289660的博客 1万+

2024.6.10丨基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释指南

本文详细介绍了基于DIAMOND与VFDB数据库的致病菌毒力因子高效注释方法,涵盖工具安装、参数优化、数据库选择及实战案例解析。通过DIAMOND的快速比对和VFDB的全面毒力因子数据,显著提升微生物基因组研究效率,适用于临床检测、食品安全监测等多个场景。

weixin_33712987的博客 376

Vue - 详细完美解决 ElementUI MessageBox “多次“ 弹框问题,让其无论执行多少次都只弹出来一次(常见于请求拦截器多次触发弹框,导致弹出来很多个)详细示例代码,保证完美解决!

vue如何防止ElementUIMessageBox多次弹框,vueelement弹框弹出来很多次怎么办,elementvueMessageBox解决执行多次后出现多次弹框的问题,elementUI如何阻止MessageBox多次弹出来,vue+element解决多个请求同时报错,弹出多个消息框message,饿了么组件库MessageBox弹框频繁弹出解决方法,vue调用MessageBox出现多次弹框,vueelementMessageBox怎么只弹出一次,vue之axios请求

🏆 前端领域优质创作者 8196

Vek385评估板(二):板子联网 & memtester安装(LPDDR5X测试)

继上一篇文章:Vek385评估板(一):EDF成功烧录启动及一些问题。 本章完成最主要的两个功能:开发板联网+内存 memtester。因为我是做测试行业的,所以这两个是最想试的。内存测试,除了FPGA测,也可以系统级测,本次在versal上实现这个功能,主要是可以应急。在没有安卓、X86的情况下,可以使用本方案测试。 下一篇会继续做一些其他功能。

千歌叹尽执夏的博客 223

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 进阶数据库系列(二十):PostgreSQL 数据库备份与恢复
下一篇: PostgreSQL 教程
pgdba
博客等级 码龄4年 30粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值