深度剖析PostgreSQL慢SQL:原因与优化方案大揭秘

news2024/12/29 8:44:56

PostgreSQL 是一种成熟稳定的关系型数据库管理系统,它支持高级的数据类型、索引以及查询语言。但是,尽管 PostgreSQL
在性能和可靠性方面表现出色,但偶尔也会出现慢 SQL 的情况。本文将探讨 PostgreSQL 慢 SQL
的原因和优化方案,帮助你更好地优化和管理 PostgreSQL 数据库。

慢SQL 的原因

慢 SQL 的出现可能是由多种不同的因素引起的。下面列出了最常见的一些原因。

1.1. 复杂的查询语句

复杂的查询语句通常会耗费更多的时间和资源,从而导致慢 SQL 的出现。如果查询中包含多个子查询和联合查询,就可能会出现性能瓶颈。

1.2. 缺少索引

在执行 SQL 查询时,数据库需要在表中查找满足条件的数据。如果表中的数据量很大,没有索引会导致查询速度变慢。

1.3. 数据库表过大

当数据库表过大时,读取和写入数据的速度都会变慢。这可能会导致慢 SQL 的出现。

1.4. 内存使用不当

PostgreSQL 使用共享内存来提高其性能。如果内存使用不当,SQL 查询的执行速度就可能变慢。

1.5. 硬件配置不足

如果硬件配置不足,例如 CPU、内存或硬盘容量不足,就可能会导致慢 SQL 的出现。

1.6.版本太低

PostgreSQL 的版本过低,性能可能没有新版本的性能优越!

慢SQL 的解决方案

1.关闭会话

查询慢sql的执行会话,关闭进程。
查看数据库后台连接进程

SELECT count(*) FROM pg_stat_activity;

SELECT * FROM pg_stat_activity;

查看数据库后台连接进程,但是此条SQL不包含当前查询进程

SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();

SELECT * FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();

查看当前慢SQL,例如查询执行时间超过1秒的SQL

select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ; 

可以使用**pg_terminate_backend()**终止连接。您必须是超级用户才能使用此功能。这在所有操作系统上都是相同的。

SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE
    -- 不删除当前连接
    pid <> pg_backend_pid()
    -- 不删除当前连接数据库database_name的连接
    AND datname = 'database_name'
    ;

2.版本升级:

将PostgreSQL版本升级到最新版本,以实现更好的性能和功能。

查看服务器端版本

2.1 查看详细信息

SELECT version();

2.2 查看版本信息

SHOW server_version;

2.3 查看数字版本信息包括小版号

SHOW server_version_num;

升级为更高的版本。

3.优化内存和缓存

调整PostgreSQL内存设置,如shared_bufferseffective_cache_size等参数。

要让PostgreSQL达到最佳性能,还要使用像pg_tune这样的PostgreSQL优化工具,可以根据系统的内存大小,I/O和网络性能,来调整PostgreSQL参数。例如常用的shared_buffers和effective_cache_size,它们是与访问文件并维护内存缓存有关的重要参数,可以控制PostgreSQL访问磁盘文件的频繁程度。除此之外,还可以根据测试结果做出改变,例如increasing wal_buffers to improve write performance,这有助于将PostgreSQL写入操作提升到最高水平。

最后,正确的PostgreSQL内核性能调优优化必须包含两个要素:PostgreSQL参数设置以及服务器的配置。因此,对于数据库管理员或性能调优者而言,正确的性能调优优化消耗大量时间,但它也是实现PostgreSQL最佳性能的必要之道。

举例来说,想要提升PostgreSQL的性能,可以使用以下代码:

ALTER SYSTEM SET shared_buffers = '1000MB';

ALTER SYSTEM SET effective_cache_size = '2000MB';

ALTER SYSTEM SET wal_buffers = '12MB';

一般shared_buffers 值应该被设为整个机器内存的 15% ~ 25%。

effective_cache_size参数有操作系统和数据库评估多少内存可用磁盘缓存,PostgreSQL查询计划决定它是否固定在RAM中。索引扫描最有可能用于较高的值;如果该值为低将使用顺序扫描。建议将effecve_cache_size设置为机器总RAM的50%。

wal buffer是预写日志(wal)缓冲区,缓冲区的默认大小由wal_buffers设置设置—最初为16MB。如果要调优的系统有大量并发连接,那么wal_buffers的值越高,性能越好。

4.合理的索引

数据库表结构,建立合理的索引可以极大的提高查询性能。
注:
可以使用navicat ,选中数据库,右键》》维护》》重建索引

​​在这里插入图片描述

5.优化表设计

将表分成有意义的符合逻辑的、尽可能小和彼此独立的部分,以减少查询中的不必要数据量。

6.安装和使用适当的扩展

安装如pgTune和pgBadger等与PostgreSQL性能优化的工具,以及如pg_hint_plan和pg_stat_statements等扩展程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt安卓AMD64-v8a配置OpenCV4.5.2

1.OpenCV官方网下载OpenCV的安卓平台SDK并解压 在工程的配置pro文件中添加opencv包含路径INCLUDEPATH与库LIBS unix {ANDROID_OPENCV = C:\Users\dev2\Desktop\OpenCV-android-sdk\sdk\nativeINCLUDEPATH += $$ANDROID_OPENCV/jni/include/opencv2 \$$ANDROID_OPENCV/jni/in…

进行网站建设,开启数字化时代的新篇章

在当今数字化时代&#xff0c;拥有一个个人或企业网站已经成为了非常普遍的需求。网站可以帮助你展示自己或品牌的形象、提供各种服务和信息&#xff0c;甚至是进行在线销售等&#xff0c;这些都是传统媒体所无法比拟的优势。 网站建设是什么&#xff1f; 网站建设是指在互联…

LaravelPHP笔记-转json后中文变成\u数据

用 PHP 的 json_encode 来处理中文的时候&#xff0c;中文都会被编码&#xff0c;变成不可读的&#xff0c;类似”\u***” 的格式&#xff0c;如果想汉字不进行转码&#xff0c;可用如下方法&#xff1a; 在json_encode第二个参数添加JSON_UNESCAPED_UNICODE。 如下代码&…

dsl语句查询elasticsearch集群节点分布和资源使用情况

查询语句如下&#xff08;本文是直接在kibana里面执行的哦&#xff09; GET _cat/nodes?v执行结果 这样就可以很直观的看到&#xff0c;es部署在了哪些节点上&#xff0c;以及各节点资源分布使用

【Ant Design of Vue】自定义SVG图标的使用

一、需求 由于Ant Design Vue提供的 Icon 图标满足不了项目的需求&#xff08;需求图标未提供&#xff09;&#xff0c;所以我们使用了自定义的 SVG 图标 二、技术栈 前端框架&#xff1a;vue2 Vue Cli前端UI框架&#xff1a;Ant Design of Vue&#xff08;v1.7.8&#xff…

Python自动化测试,Excel数据驱动读取 xlrd实战(超详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 xlrd模块安装 pi…

JS逆向系列之猿人学爬虫第16题-window蜜罐

文章目录 目标网站参数定位与加密逻辑分析补全后的jspython调用测试往期逆向文章推荐目标网站 https://match.yuanrenxue.cn/match/16参数定位与加密逻辑分析 t就是时间戳,m是我们主要逆向的参数,跟栈进入window

mysql之mha高可用

目录 一、MHA的相关知识 1&#xff09;什么是 MHA 2&#xff09;MHA 的组成 &#xff08;1&#xff09;MHA Node&#xff08;数据节点&#xff09; &#xff08;2&#xff09;MHA Manager&#xff08;管理节点&#xff09; 3&#xff09;MHA 的特点 二、MHA的一主两从部…

Java中创建对象的方式有几种?

使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式&#xff0c;我们可以调用任意的构造函数(无参的和带参数的)。 Student s new Student();2.使用Class类的newInstance方法&#xff08;反射&#xff09; 我们也可以使用Class类的newInstance方法创建对象…

必要条件与充分条件

关于对充分条件、必要条件、充要条件的最简单扼要的理解&#xff1a; 充分条件&#xff1a;有A就一定有B&#xff0c;则A是B的充分条件&#xff1b; 必要条件&#xff1a;无A就一定无B&#xff0c;则A是B的必要条件&#xff1b; 充要条件&#xff1a;有A就一定有B&#xff0…

黑客是怎样练成的

网学黑客技术的人越来越多了&#xff0c;不少人都不知道该怎么学&#xff0c;今天就来详细的说一说黑客是如何炼成的。 首先&#xff0c;什么是黑客&#xff1f; 黑客 &#xff1a;泛指擅长IT技术的电脑高手 黑客一词&#xff0c;源自英文Hacker&#xff0c;早期其实就是一群…

6月27日亚马逊云科技中国峰会议程抢先看

大会亮点预览 ● 汇聚百余位重磅嘉宾共同探路云端 ● 技术分享与发布 赋能数字化转型创新 ● 共同探索行业转型之道 驱动创新价值 ● 聚焦前沿科技 云计算年度热点话题盘点 ● 热点主题展示 打造数字科技创新型展区 ● 开发者专属版块 学玩一体 高效进阶 ● Amazon De…

海外网红营销潜藏的风险:如何规避失败的可能性?

在数字化时代&#xff0c;海外网红营销已成为品牌推广的重要策略。然而&#xff0c;不少企业在海外网红营销中遭遇失败&#xff0c;导致推广效果不佳甚至适得其反。本文Nox聚星将和大家探讨海外网红营销失败的原因&#xff0c;并详细分析其中的关键问题。 1、文化差异 海外网红…

string类学习

本篇将深入学习string类&#xff0c;通过各个测试函数玩遍cstring类&#xff0c;学到就是赚到&#xff01;&#xff01;&#xff01; 文章目录 1.头文件和源文件1.1源文件1.2头文件 2.构造函数3.赋值重载函数4.元素访问运算符5.迭代器5.1正向迭代器5.2反向迭代器 6.添加字符串…

github本地修改后不想提交

本地做了修改后&#xff0c;不想提交&#xff0c;想恢复如初&#xff0c;如果直接git reset --hard 会提示你本地还有没暂存的文件。 所以可以先暂存&#xff0c;然后再回退

Linux ~ NFS 文件共享

Ubuntu 下载nfs服务软件包 sudo apt-get install nfs-kernel-server配置nfs vim /etc/exports表头表头/mnt/*指示要共享的目录*代表允许所有的网络段访问rw指示具有可读写的权限sync指示资料同步写入内存和硬盘no_root_squash客户端分享目录使用者的权限 启动rpcbind服务 …

Databend 开源周报 第 99 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Flink CDC Apa…

【AudioCaps数据集】windows10下载AudioCaps数据集,附百度网盘下载链接

&#x1f525; AudioCaps是从AudioSet数据集中筛选再加工得到的数据集。 AudioCaps数据集的下载使用python的第三方库 audiocaps-download&#xff0c;根据README.md的提示&#xff0c;先进行配置下载环境&#xff1a; &#x1f4e3; AudioCaps的下载环境配置分为四步&#x…

Windows 10, version 22H2 (updated Jun 2023) 中文版、英文版下载

Windows 10, version 22H2 (updated Jun 2023) 中文版、英文版下载 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Windows 10 更新历史记录 Windows 10, ver…

解决vue依赖报错SockJSServer.js出现Cannot read property ‘headers‘ of null

前言 在做新的需求需要变更vue的项目代码时突然出现报错 TypeError: Cannot read property ‘headers’ of null at Server.socket.on (***/node_modules/webpack-dev-server/lib/servers/SockJSServer.js:68:32) 不清楚为什么突然出现了这个问题&#xff0c;之前在这个vue项目…