前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PG几个有趣的插件和工具介绍

PG几个有趣的插件和工具介绍

作者头像
AiDBA宝典
发布2023-09-19 08:41:27
6130
发布2023-09-19 08:41:27
举报
文章被收录于专栏:小麦苗的DB宝专栏

PGTune工具

https://pgtune.leopard.in.ua

PGTune可以根据给定硬件配置的最大性能计算PostgreSQL配置。对于初学者来说可以快速地来配置数据库参数。但它不是PostgreSQL优化设置的灵丹妙药。许多设置不仅取决于硬件配置,还取决于数据库的大小、客户端的数量和查询的复杂性。只有考虑到所有这些参数,才能对数据库进行最佳配置。

img

点击“生成”按钮后将计算结果。

img

虚拟索引hypopg

https://hypopg.readthedocs.io/en/rel1_stable/usage.html

该扩展有助于了解特定索引是否可以提高问题查询的性能。虚拟索引并不是真实存在的索引,因此不耗费CPU、磁盘或其他资源,可以有效验证索引是否有效。

创建表并插入测试数据。

代码语言:javascript
复制
CREATE TABLE hypo (id integer, val text) ;
INSERT INTO hypo SELECT i, 'line ' || i FROM generate_series(1, 100000) i ;
VACUUM ANALYZE hypo ;

查看当前表没有任何索引的执行计划,并使用了普通顺序扫描。

代码语言:javascript
复制
EXPLAIN SELECT val FROM hypo WHERE id = 1;
                       QUERY PLAN
--------------------------------------------------------
 Seq Scan on hypo  (cost=0.00..1791.00 rows=1 width=14)
   Filter: (id = 1)
(2 rows)

用hypopg_create_index()函数创建一个虚拟索引。

代码语言:javascript
复制
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ;
 indexrelid |      indexname
------------+----------------------
      18284 | <18284>btree_hypo_id
(1 row)

再次EXPLAIN查看是否会用到这个btree索引。

代码语言:javascript
复制
EXPLAIN SELECT val FROM hypo WHERE id = 1;
                                    QUERY PLAN
----------------------------------------------------------------------------------
 Index Scan using <18284>btree_hypo_id on hypo  (cost=0.04..8.06 rows=1 width=10)
   Index Cond: (id = 1)
(2 rows)

检查虚拟索引并未实际使用到,对现环境没有影响。

代码语言:javascript
复制
EXPLAIN ANALYZE SELECT val FROM hypo WHERE id = 1;
                                            QUERY PLAN
---------------------------------------------------------------------------------------------------
 Seq Scan on hypo  (cost=0.00..1791.00 rows=1 width=10) (actual time=0.046..46.390 rows=1 loops=1)
   Filter: (id = 1)
   Rows Removed by Filter: 99999
 Planning time: 0.160 ms
 Execution time: 46.460 ms
(5 rows)

orafce

https://github.com/orafce/orafce

orafce英文全称Oracle’s compatibility functions and packages。可以在PostgreSQL上使用Oracle的特殊函数和包,并且兼容Oracle的部分语法、数据类型、函数、字典表等。

通过orafce可以和Oracle兼容的功能。

数据类型

Item

Overview

VARCHAR2

变长字符数据类型

NVARCHAR2

变长国家字符数据类型

DATE

存储日期和时间的数据类型

SQL 查询

Item

Overview

DUAL table

系统提供的虚拟表

SQL 函数

  • 数学运算函数

Item

Overview

BITAND

执行位与操作

COSH

计算一个数字的双曲余弦

SINH

计算一个数字的双曲正弦

TANH

计算一个数字的双曲正切

  • 字符串函数

Item

Overview

INSTR

返回子字符串在字符串中的位置

LENGTH

以字符数为单位返回字符串的长度

LENGTHB

以字节数为单位返回字符串的长度

LPAD

用字符序列左填充字符串到指定长度

LTRIM

从字符串的开头删除指定的字符

NLSSORT

返回一个字节字符串,用于根据区域设置对语言排序序列中的字符串进行排序

REGEXP_COUNT

在字符串中搜索正则表达式,并返回匹配次数

REGEXP_INSTR

返回字符串中模式匹配所在的起始或结束位置

REGEXP_LIKE

判断字符串是否符合正则表达式的规则

REGEXP_SUBSTR

返回与函数调用中指定的模式匹配的字符串

REGEXP_REPLACE

替换匹配POSIX正则表达式的子字符串

RPAD

用字符序列将字符串右填充到指定长度

RTRIM

从字符串的末尾删除指定字符

SUBSTR

使用指定位置和长度的字符提取字符串的一部分

SUBSTRB

使用字节来指定位置和长度提取字符串的一部分

  • 日期/时间函数

Item

Overview

ADD_MONTHS

为日期添加月份

DBTIMEZONE

返回数据库时区的值

LAST_DAY

返回指定日期所在月份的最后一天

MONTHS_BETWEEN

返回两个日期之间的月数

NEXT_DAY

用于计算给定日期的下一天

ROUND

对日期进行四舍五入处理

SESSIONTIMEZONE

返回会话的时区

SYSDATE

返回系统日期

TRUNC

截断日期

  • 数据类型格式化函数

Item

Overview

TO_CHAR

将值转换为字符串

TO_DATE

按照指定的格式将字符串转换为日期

TO_MULTI_BYTE

将单字节字符串转换为多字节字符串

TO_NUMBER

按照指定的格式将值转换为数字

TO_SINGLE_BYTE

将多字节字符串转换为单字节字符串

  • 条件表达式

Item

Overview

DECODE

比较值,如果它们匹配,则返回相应的值

GREATEST

返回一个或多个表达式列表中的最大值

LEAST

返回一个或多个表达式列表中的最小值

LNNVL

计算值是否为false或未知

NANVL

当值不是数字(NaN)时返回替代值

NVL

当值为NULL时返回替代值

NVL2

根据值是否为NULL返回替代值

  • 聚合函数

Item

Overview

LISTAGG

将指定列的值按照指定的分隔符组合成一个字符串

MEDIAN

计算一组值的中位数

  • 返回内部信息的函数

Item

Overview

DUMP

返回值的内部信息

SQL 操作

Item

Overview

Datetime operator

DATE类型的日期时间操作符

程序包

Item

Overview

DBMS_ALERT

向多个会话发送警报

DBMS_ASSERT

验证输入值的属性

DBMS_OUTPUT

向客户端发送消息

DBMS_PIPE

创建用于会话间通信的管道

DBMS_RANDOM

生成随机数

DBMS_UTILITY

提供各种实用程序

UTL_FILE

用于操作系统的文本文件操作

pg_top

https://github.com/markwkm/pg_top

pg_top是PostgreSQL的“top”。与top类似可以监视PostgreSQL进程。还可以查看进程当前正在运行的SQL语句。另外还可以:

查看进程当前正在运行的SQL语句。

查看当前运行的SELECT语句的查询计划。

进程持有的视图锁。

查看每个进程的I/O统计信息。

查看下行节点的复制统计信息。

pg_top full command line

可以监控到主机的负载、CPU、内存、SWAP、PG的进程数(总数、活跃数,空闲数等),同样还能显示具体的进程信息(PID、DB用户名、资源占用情况等)。

pg_top Current Query

“Q”键并输入PID可以查看当前执行的SQL。

pg_top Query Plan

“E”键(EXPLAIN)或A键(EXPLAIN ANALYZE),然后再输入具体的PID,可以查看进程当前运行SQL的执行计划。

pg_top Locks Acquired

‘L’键并输入PID可以查看当前数据库LOCK信息。

plprofiler

https://github.com/bigsql/plprofiler

查找PL/pgSQL函数和存储过程中的性能问题可能很困难,尤其是在代码嵌套的情况下。通过系统视图或扩展视图(如pg_stat_activity或pg_stat_statements)来辅助分析函数和存过中的性能问题也是有所局限。

plprofiler扩展可用于快速识别最耗时的函数,然后向下钻取查找其中的单个语句,并生成html报表。报表以火焰图形式展示函数调用堆栈、耗时占比,还可以查看函数中每个SQL的位置、执行次数、最长执行时间、总时间等。

创建扩展后,使用plprofiler调用函数,从后端收集本地数据来创建HTML报告。

代码语言:javascript
复制
plprofiler run --command "SELECT tpcb(1, 2, 3, -42)" --output tpcb-test1.html

使用plprofiler生成的报表示例。

img

在页面顶部突出的是两个函数tpcb_fetch_balance()和它的调用者tpcb_upd_accounts()。可以看到它实际上占了PL/pgSQL函数内部总执行时间的99%以上。

img

为了进一步研究这个函数,报告中单击(show)链接显示详细信息,我们可以看到函数的源代码和每一行所花费的执行时间。

参考

https://pgfans.cn/a/2253

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-13 19:38,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PGTune工具
  • 虚拟索引hypopg
  • orafce
  • pg_top
  • plprofiler
  • 参考
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档