百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

PostgreSQL之慢SQL语句

xsobi 2024-12-01 05:37 1 浏览

作者:宋少华


一、导读


优化在硬件和非系统故障的情况下,对于提升数据库本身的性能非常重要。每一种类型的数据库都有自己不同的方式去跟踪优化数据库,这些方式中不仅仅包含了数据库系统本身参数层面的优化,而且也包括对SQL语句的优化。其中,对于SQL语句的优化是DBA经常需要接触的工作。因此需要经常关住慢SQL语句,以对其进行追踪优化。


二、数据库参数


PostgreSQL中的慢SQL追踪是通过以记录日志的方式进行分析,追踪的,因此,需要优化SQL需要启动日志收集功能。以RPM方式安装的数据库日志收集功能默认是打开的,以源码编译的方式安装的数据库日志收集功能是关闭的。


启动日志收集功能


postgres=# show logging_collector ;
logging_collector 
-------------------
off
(1 row)
postgres=# alter system set logging_collector = on;
ALTER SYSTEM


重新启动数据库


[postgres@developer ~]$ pg_ctl  restart -D $PGDATA -l /tmp/logfile
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started


再次查看参数


postgres=# show logging_collector ;
logging_collector 
-------------------
on
(1 row)


2.1 log_min_duration_statement


该参数设置为对于单个SQL最小的执行时间,执行时间大于这个值的语句都将会被记录。该参数默认会记录所有的SQL语句。如果没有指定其单位,该单位默认以ms为单位。


如设置记录的慢SQL语句为2s,则日志中只记录执行大于2s的SQL语句。


如下示例:


postgres=# select count(*),p_date from tab_random_date group by p_date;
        count  |   p_date   
      ---------+------------
           896 | 1993-01-12
           384 | 2014-12-21
          1152 | 1994-07-01
           256 | 2015-08-07
           512 | 2011-10-31
           512 | 2004-10-16
           512 | 2000-06-25
           640 | 2001-07-30
           384 | 2017-06-13
           256 | 2000-10-19
           640 | 2004-04-01
           768 | 2006-01-13
           768 | 2003-10-05
           512 | 2003-06-22
           896 | 2000-06-10
           384 | 1997-06-23
           512 | 2004-05-14
           768 | 2012-03-10
           384 | 2015-05-06
           256 | 2018-10-14
           128 | 2015-06-15
           128 | 2017-02-18
          1024 | 1993-05-05
           256 | 2018-07-20
           128 | 1998-05-08
           640 | 1996-08-02
           512 | 2014-11-19
           256 | 2019-05-05
          1536 | 1991-05-16
           128 | 2007-08-05
           640 | 1994-05-22
           256 | 2013-01-06
          1280 | 1996-05-12
           512 | 1998-09-10
           640 | 1999-02-08
           384 | 2008-01-31
           256 | 2016-08-28
           512 | 2002-10-03
          1792 | 1994-12-11
      Time: 5006.112 ms (00:05.006)


上面SQL语句执行时间为5s,那么该SQL语句将会被记录到日志中。查看日志内容


[21777] LOG:  duration: 5005.937 ms  statement: select count(*),p_date from tab_random_date group by p_date;


2.2 log_statement


该参数用来设置记录语句的类型,允许的值为none、ddl、mod和all。默认该参数值为none,如果修改为all,会导致数据库日志格式发生变化,如果没有特别配置可查询视图,可能会导致无法解析慢日志。通常,如果启用log _min _duration _statement参数,那么log _min_ duration _statement参数需要结合log_statement参数一起使用。


mod:记录所有的DDL和数据库修改的语句,如INSERT、UPDATE、DELETE、TRUNCATE、COPY FROM等。


ddl:仅仅记录DDL语句。如CREATE 、ALTER 、DROP。


如下示例:


LOG:  duration: 7204.812 ms  statement: insert into tab_random_date select * from tab_random_date;
LOG:  duration: 15749.567 ms  statement: insert into tab_random_date select * from tab_random_date;
LOG:  duration: 2044.327 ms  statement: select count(*) from tab_random_date;

相关推荐

斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍

[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...

轻量级RTSP服务模块和RTSP推流模块适用场景区别

好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...

《新·奥特曼》11月18日国内视频平台上线

《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...

剑指Apple Watch!Android Wear也将支持视频功能

想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...

QT应用编程:基于VLC开发音视频播放器(句柄方式)

一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...

OBS 源码分析 obs开发

本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...

Android和iOS端Moments更新:支持视频分享功能

Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...

您很快就可以在Android Galaxy设备之间传输视频通话

在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...

一篇文章带你FFmpeg到流媒体服务器开发

安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...

YouTube 为 Android 平台提供 1440P 视频

安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...

FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)

FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....

Android FFmpeg + OpenGL ES YUV Player

1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...

基于WebRTC的Android移动端无线视频传输

摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...

使用python爬取抖音app视频 python爬取抖音视频数据

记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...

Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈

本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...