摘要:
pg_stat_bgwriter视图提供了一组共享缓冲区写入方面性能数据。 =#select * from pg_stat_bgwriter; -[ RECORD 1 ] + checkpoints_timed | 15462 #计划检查点的发生次数,这种检查点是checkpoint_timeout 阅读全文
随笔分类 - postgres
PostgreSQL的内存结构和调优
2021-03-29 11:34 by abce, 1720 阅读, 收藏, 编辑
摘要:
PostgreSQL的内存结构 PostgreSQL的内存主要分成两类: 1.本地内存区域:每个后端进程(backend process)自己使用的 2.共享内存区域:所有进程共同使用 本地内存区域 在postgresql中,每个后端进程(backend process)分配一片本地内存用于处理查询 阅读全文
PostgreSQL的内存利用率高时如何检查
2021-03-28 10:45 by abce, 1067 阅读, 收藏, 编辑
摘要:
如果内存利用率很高,那么首先应该确认哪个进程产生了内存消耗。 使用linux的top工具 找出哪些或哪个进程消耗了大量的内存。然后再检查进程在执行什么操作! 结合postgresql和系统的日志 比如,如果内存不够,可能会发现类似日志信息: Resource temporarily unavaila 阅读全文
如何调整PostgreSQL的 Out-Of-Memory Killer设置
2021-03-27 15:29 by abce, 1818 阅读, 收藏, 编辑
摘要:
当服务器/进程内存不足时,Linux有两种方法来处理,第一种是OS(Linux)崩溃,整个系统宕机;第二种是终止使系统耗尽内存的进程(应用程序)。第二种方法的最佳选择是终止进程,防止OS崩溃。简而言之,Out-Of-Memory Killer是负责终止应用程序以避免内核崩溃的进程,因为它只杀死应用程 阅读全文
postgresql的effective_cache_size
2021-03-26 08:29 by abce, 3928 阅读, 收藏, 编辑
摘要:
优化器假设可以用于单个查询的磁盘缓存的有效大小。这个因素会被用到使用索引的成本考虑中:值越大,使用索引扫描的可能性就越大;值越小,使用顺序扫描的可能性就越大。设置该参数的时候,需要同时考虑到shared buffer和内核对磁盘缓存的使用,尽管有些数据会同时存在shared buffer和内核的磁盘 阅读全文
MySQL的binlog_row_image和PostgreSQL的full_page_writes
2021-03-11 10:36 by abce, 495 阅读, 收藏, 编辑
摘要:
MySQL的binlog_row_image MySQL基于行的复制中,该变量决定了row images是如何被写入binary log的。在基于行的复制中,每一行的change事件包含两个镜像:一个“前镜像”,其列包含的是更新之前的内容;一个“后镜像”,其列包含更新之后的内容。通常,MySQL在前 阅读全文
PostgreSQL备份和还原的简单测试
2021-02-02 13:38 by abce, 241 阅读, 收藏, 编辑
摘要:
1.备份和还原单个数据库备份 $ pg_dump -U pogstgres -d mydb > mydb.sql 还原 $psql -U postgres -d mydb < mydb 2.备份和还原所有的数据库备份 $ pg_dumpall -U postgres > alldbs.sql 还原 阅读全文
PostgreSQL事务中的时间
2021-01-22 17:00 by abce, 527 阅读, 收藏, 编辑
摘要:
在同一个事务中,时间是不变的: postgres=# begin; BEGIN postgres=# select now(),current_time,current_timestamp,localtime,localtimestamp,transaction_timestamp(); now | 阅读全文
PostgreSQL的Access control lists
2021-01-22 09:24 by abce, 197 阅读, 收藏, 编辑
摘要:
ACL表现行式: grantee=flags/grantor 其中: ·grantee:被授予权限的角色 ·flags:字符串方式表示的权限 ·grantor:授权的用户 FlagDescriptionStatementsApplies to a append, insert new data IN 阅读全文
PostgreSQL auto_explain模块
2021-01-21 11:02 by abce, 894 阅读, 收藏, 编辑
摘要:
auto_explain模块提供了一种自动记录慢语句执行计划的方法,而不必手动运行EXPLAIN。这对于在大型应用程序中跟踪未优化的查询特别有帮助。 该模块不提供sql可访问的函数。要使用它,只需将它加载到服务器。你可以将它加载到一个单独的会话中: load 'auto_explain' 如果想在全 阅读全文
PostgreSQL的Event triggers
2021-01-18 14:08 by abce, 1372 阅读, 收藏, 编辑
摘要:
PostgreSQL中,常规触发器依附于单个表并捕获dml事件。而Event triggers是数据库全局性的,可以捕获ddl事件。与常规触发器一样,Event triggers可以用任何包含事件触发器支持的过程语言编写,也可以用C编写,但不能用纯SQL编写。 当与事件关联的事件在定义它的数据库中发 阅读全文
Inner join和Outer join一起使用的注意点
2021-01-15 09:33 by abce, 684 阅读, 收藏, 编辑
摘要:
发现有些开发新同学,不管遇到什么sql,都是直接left join。一直想纠正他们的这个习惯,但是没啥用,没人听。 在多表连接的单个select语句中,混合了outer join和inner join的时候,最终的结果可能并不是他们真正想要的逻辑结果。 假设有下面的表和测试数据: CREATE TA 阅读全文
PostgreSQL中的整除截断
2021-01-12 11:25 by abce, 685 阅读, 收藏, 编辑
摘要:
开发同学说,在自己的测试环境中,相同的数据和相同的sql,在mysql和pg中查询出来的结果却不同。问是不是他装的数据库有问题了或者sum函数用错了。 以下是测试数据: postgres=# select * from emp; empno | ename | job | mgr | hiredat 阅读全文
PostgreSQL中的not in、not exists、left join/is null
2021-01-04 16:44 by abce, 4272 阅读, 收藏, 编辑
摘要:
哪种方法是找出在一张表中,而不在另一张表中的记录的最佳方法呢? SELECT l.* FROM t_left l LEFT JOIN t_right r ON r.value = l.value WHERE r.value IS NULL; SELECT l.* FROM t_left l WHER 阅读全文
difference between count(1) and count(*)
2020-12-25 11:26 by abce, 214 阅读, 收藏, 编辑
摘要:
有些问题被问的太多次了,截几张图放着。 阅读全文
为什么PostgreSQL WAL归档很慢
2020-12-22 14:59 by abce, 692 阅读, 收藏, 编辑
摘要:
在客户中,经常会遇到由于大量的WAL段占据了WAL目录(pg_wal目录),导致磁盘空间使用量突然暴增的案例。慌张的客户通常会问:“为什么PostgreSQL不删除它们呢?” 我们发现最常见的原因是: 1.WAL归档失败 2.复制槽正在持有旧的WAL 然而,近些年来,在与此类似的主题下,出现了另一种 阅读全文
理解postgreSQL中的prepared transactions和处理孤儿(orphans)事务
2020-12-09 14:11 by abce, 2965 阅读, 收藏, 编辑
摘要:
Prepared transactions是PostgreSQL的一个关键特性。理解该特性提供的功能和处理任何潜在的陷阱对于系统的维护是很关键的。所以,我们来深入研究一下具体什么是prepared transactions。 关于事务 在数据库系统中,事务是一种处理通常包含多个语句的块中的全部或零个 阅读全文
PostgreSQL中的孤儿文件(orphaned data files)
2020-11-18 08:28 by abce, 928 阅读, 收藏, 编辑
摘要:
创建一个测试表 postgres=# create table t1(a int); CREATE TABLE postgres=# select pg_relation_filepath('t1'); pg_relation_filepath base/75062/75297 (1 row) po 阅读全文
PostgreSQL的并行查询
2020-11-17 08:48 by abce, 6463 阅读, 收藏, 编辑
摘要:
PostgreSQL的并行化包含三个重要组件:进程本身(leader进程)、gather、workers。没有开启并行化的时候,进程自身处理所有的数据;一旦计划器决定某个查询或查询中部分可以使用并行的时候,就会在查询的并行化部分添加一个gather节点,将gather节点作为子查询树的根节点。 查询 阅读全文
PostgreSQL中对IN、EXISTS、ANY/ALL、JOIN的sql优化
2020-11-16 08:47 by abce, 3690 阅读, 收藏, 编辑
摘要:
测试环境: postgres=# select version(); version PostgreSQL 11.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit (1 阅读全文