自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Focus on PostgreSQL

PostgreSQL技术爱好者

  • 博客(17)
  • 资源 (4)
  • 收藏
  • 关注

原创 PostgreSQL extra_float_digits——控制浮点数精度

PostgreSQL中extra_float_digits参数可以用来控制浮点数输出的精度,可能我们在平时使用中并不太会留意,那我们下来看下面这个例子。建一张表,两个字段类型分别是float和numeric,然后插入数据bill@bill=>create table t1(c1 float,c2 numeric);CREATE TABLEbill@bill=>insert into t1 values(0.55555555555555555,0.55555555555555555);I

2021-04-29 20:01:52 4547 1

原创 PostgreSQL Huge Page使用最佳实践

对于重度依赖于内存的应用数据库而言,hugepage是经常会被使用的。例如在Oracle中我们一般建议当SGA大于8GB时使用hugepage,而在postgresql中我们也建议当内存较大的时候开启hugepage。为什么呢?这是因为Linux需要维护虚拟内存地址与物理内存的映射关系,为了提升转换性能,最好这部分能够cache在cpu的cache里面。页越大,映射表就越小。使用huge page可以减少页表大小。接下来我们来看看pg中hugepage的设置方法。设置方法:1、首先我们需要看看数据库

2021-04-25 18:55:49 2725 1

原创 pg_stat_kcache ——跟踪cpu、文件系统真实读写行为

PostgreSQL中一般建议将shared_buffer值设置成物理内存的1/4,而是要给OS的cache/buffer以足够的空间,从而达到最佳的系统性能。因此我们通过使用buffer io, shared buffer的统计信息很容易判断错误。为什么呢?假如我们的shared_buffer设置的过小,那么在统计信息中我们发现SQL的shared_buffer命中率很低,很可能该SQL的read都发生在操作系统的cache buffer中,而并没有进行disk io,因为这些行为是file syste

2021-04-25 15:04:02 2223

原创 PostgreSQL批量删除函数脚本

在PostgreSQL中,我们想要删除函数的时候必须得加上函数的参数。例如下面的函数:bill=# DROP FUNCTION f_add(c1 integer, c2 integer);DROP FUNCTIONbill=# create function f_add(c1 int,c2 int) returns intas $$declarev_total int;beginv_total = c1 + c2;return v_total;end;$$ language plp

2021-04-21 18:45:02 3781

翻译 高写入负载下的Postgres性能调优

0、说明随着数据库的数据量与之俱增,作为数据库管理员和系统管理员总是会遇到各种各样的麻烦。通常,一些项目从小型的测试系统开始,然后被推广到大规模生产用途。由于这些系统收到的流量负载超出了其原始的概念验证范围,因此在Postgres日志中可能会观察到以下问题:LOG: checkpoints are occurring too frequently (9 seconds apart)HINT: Consider increasing the configuration parameter "max

2021-04-19 18:24:01 1945

原创 PostgreSQL查询shared buffer使用情况和清理方式

查询shared buffer使用情况:SELECT c.relname, pg_size_pretty(count(*) * 8192) as buffered, round(100.0 * count(*) / (SELECT setting FROM pg_settings WHERE name='shared_buffers')::integer, 1) AS buffer_percent, round(100.0 * count(*) * 8192 / p

2021-04-16 13:58:18 4061

原创 PostgreSQL index-only scans详解及常见误区

在oracle中,类似select id from t1 where id<10这样一个查询,当select语句的所有目标列都在索引中时,为了减少IO,就不需要再回表获取数据了。这便是index only scan,从pg9.2开始引入了这种索引扫描方法,顾名思义即只扫描索引列。接下来我们通过一个例子来看下什么是index only scan:创建测试表:bill=# create table tbl(id int,name text,data text);CREATE TABLE插入数

2021-04-14 13:45:17 3031 1

原创 PostgreSQL clog详解

PostgreSQL由于其多版本特性,因此需要提交日志clog来记录事务的状态,从而判断其可见性。clog分配于共享内存中,并作用于事务处理过程的全过程。在pg中定义了4种事务状态,分别是:IN_PROGRESS、COMMITED、ABORTED和SUB_COMMITED。例如事务正在运行中,那么它的状态就是IN_PROGRESS。SUB_COMMITED位子事务的状态,这里我们暂且不讨论。pg中就是通过clog来存储事务的xid和事务的状态。正因为如此,我们会发现在pg中如果想要取消一个执行了很长时间

2021-04-13 20:05:51 4393 2

翻译 PostgreSQL checksum与Data Corruption

存储介质故障指的是读取或写入数据的存储介质出现的物理上的故障。这是DBA不得不重点关注的问题之一。一个典型的介质故障就是磁盘的磁盘头损坏,这会导致磁盘中存储的所有文件丢失。与数据库关联的文件例如数据文件、wal日志文件和控制文件都会因为磁盘崩溃而损坏。这篇文章我们将重点介绍在PostgreSQL中遇到磁盘故障后,我们该如何在故障后找回数据(并不是还原备份)。1、PostgreSQL checksum概述第1章:什么是checksum?第2章:PostgreSQL checksum:实际实现第3

2021-04-13 18:35:54 2484

原创 PostgreSQL将数据加载到buffer cache中

我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在pg中将指定的数据加载到缓存中呢,这有点类似于Oracle的in-memory。当然要注意并不是把数据加载到内存中就一定是好的,因为相较于磁盘,内存总是有限的,所以一帮我们只是在特殊场合下将需要的数据加载到内存中来加快访问的速度。我们可以使用pg_prewarm插件来将指定的表加载到OS Buffer或者pg shared buffer中。安装:bill=# create extension pg_prewarm ;CREATE E

2021-04-13 15:10:35 2366

原创 postgres_dba——构建自己的运维脚本库

我们在平时的运维中会用到各种脚本来处理问题,但是每次使用的时候都需要去找一下自己的脚本然后复制粘贴过来执行。你可能会想如果能跳过这些繁琐的步骤,直接在数据库中找到这些脚本一键执行就好了。推荐一个小工具:postgres_dba,可以在psql命令行中随时调用脚本,也可以将我们常用的脚本自己加进去,根据需求定制。安装使用:直接下载完解压就可以:https://github.com/NikolayS/postgres_dbaunzip postgres_dba-master.zipmv postgre

2021-04-08 14:55:03 3740 3

原创 PostgreSQL不同库间数据copy脚本

PostgreSQL的copy命令进行数据导入导出的效率是很高的,我们可以通过下面这个脚本来实现两个库之前数据的快速copy。shell脚本:!/bin/bashpsql \ -X \ -U user_name \ -h host_name1 \ -d database_name \ -c "\\copy tbl_Students to stdout" \| \psql \ -X \ -U user_name \ -h host_na

2021-04-07 20:17:56 2149 1

原创 PostgreSQL查看长时间未被autovacuum的表

由于PostgreSQL的多版本机制,使得经常被使用的表需要进行vacuum来回收哪些dead tuples,尽管pg有autovacuum进程去在后台vaccum相关的表,但是我们仍需要去监控哪些表长时间未被autovaccum过。SELECT schemaname ,relname ,n_live_tup ,n_dead_tup ,last_autovacuumFROM pg_stat_all_tablesORDER BY n_dead_tup /

2021-04-06 15:09:25 1849

原创 PostgreSQL强制删除正在被使用的库

在PostgreSQL中,如果一个库正在被使用,我们是无法直接去删除的,会收到如下报错:bill@bill=>drop database db03;ERROR: database "db03" is being accessed by other usersDETAIL: There is 1 other session using the database.因此,我们需要禁止会话再连接到库中,同时中断掉当前所有连接的会话才可以。下面是具体的操作方法:1、设置数据库为禁止连接UPD

2021-04-06 13:55:23 6842 1

原创 PostgreSQL index monitor——监控哪些表需要创建索引

在数据库的使用过程中,可能某些表随着数据量的增大而因为没有索引仍旧使用的全表扫描,我们可以使用下列脚本来监控哪些大表上需要创建索引。1、监控哪些表需要创建索引SELECT relname AS TableName ,seq_scan-idx_scan AS TotalSeqScan ,CASE WHEN seq_scan-idx_scan > 0 THEN 'Missing Index Found' ELSE 'Missing Index Not Found' END AS

2021-04-06 13:37:07 1595

原创 PostgreSQL快速统计表行数

一般我们统计一张表总共多少数据,大部分人都会去使用count(*)去计算。但如果表数据量特别大,无疑这要执行很久,并且对IO的影响也很明显。而往往我们并不需要十分精确的去计算某张大表的行数,那么我们可以通过数据库的元数据表去快速估算,但前提是该表的统计信息要尽可能的精确。估算某张表的行数:SELECT reltuples::bigint AS EstimatedCountFROM pg_classWHERE oid = 'public.TableName'::regclass;列出库中所

2021-04-01 19:53:29 5385 2

原创 PostgreSQL index monitor——监控未使用和重复索引

数据库中的索引虽然可以大大提升查询的性能,但是大量冗余的索引和没使用的索引不仅会导致DML性能降低,而且会造成空间的浪费。Oracle中可以通过索引跟踪的方法来监控哪些索引是没被使用的,同样在pg中我们可以使用下面两个脚本来对索引进行监控。1、监控没被使用的索引```sqlSELECT PSUI.indexrelid::regclass AS IndexName ,PSUI.relid::regclass AS TableNameFROM pg_stat_user_indexes AS PSU

2021-04-01 19:32:20 3581 1

PostgreSQL内核扩展入门.pdf

PostgreSQL内核扩展入门

2021-03-08

PostgreSQL awr

PostgreSQL中实现获取Oracle awr报告的类似功能

2020-10-23

PostgreSQL11.2-CN-v1.0.pdf

PostgreSQL11.2中文文档

2020-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除