美文网首页
postgresql实战—进程及内存

postgresql实战—进程及内存

作者: 熊猫学猿 | 来源:发表于2022-08-04 06:25 被阅读0次

当从数据库中检索数据时有两种典型的访问方法,顺序扫描和B树索引扫描,顺序扫描通过扫描每个页面中的所有行指针顺序读取所有页面中的所有元组。B树索引扫描时,索引文件包含索引元组,每个元组由索引健和指向目标堆元组的TID组成,如果找到了正在查找的键的索引元组,Postgresql使用获取的TID值读取所需的元组。

psql是一用户一进程的客户端/服务器的应用程序。数据库启动时会启动若干个进程,其中有postmaster(守护进程)、postgres(服务进程)、syslogger、checkpointer、bgwriter、walwriter等辅助进程。

postmaster进程职责:

数据库的启停

监听客户端连接

为每个客户端连接fork(分支)单独postgres服务进程

当服务进程出错时进行修复

管理数据文件

管理与数据库运行相关的辅助进程

psql的内存分为两大类:本地内存和共享内存。本地内存由每个后端服务进程分配以供自己使用,当后端服务进程被fork时,每个后端进程为查询分配一个本地内存区域

本地内存由三部分组成

wok_mem:当使用order by或distinct操作对元组进行排序时会使用这部分内存

maintenance_work_mem:维护操作,例如VACUUM、REINDEX、CREEATE INDEX等操作使用这部分内存

temp_buffers:临时表相关操作使用这部分内存

共享内存在psql服务器启动时分配,由所有后端进程共同使用

shared buffer pool:psql将表和索引中的页面从持久存储装载到这里,并直接操作它们

WAL  buffer:WAL文件持久化之前的缓冲区

CommitLog buffer:psql在Commit Log中保存事务的状态,并将这些状态保留在共享内存缓冲区中,在整个事务处理过程中使用

psql9.6版本前还不支持并行查询,sql无法利用多核CPU提升性能

9.6版本开始支持并行查询,9.6版本的并行查询所支持的范围非常有限,例如只在顺序扫描、多表关联、聚合查询中支持并行

max_work_progress(integer)

设置系统的最大后台进程数,默认为8。如果有备库,备库上此参数必须大于或等于主库上的此参数配置值,此参数调整后需重启数据库生效

max_parallel_works

设置系统支持的并行查询进程数

max_parallel_works_per_gather

设置允许启用的并行进程的进程数,0表示禁用并行查询

parallel_setup_cost:设置优化器启动并行进程的成本

parallel_tuple_cost:设置优化器通过并行进程处理一行数据的成本

psql10对并行扫描的支持将提升范围扫描SQL的性能,由于开启并行将消耗更多的CPU、内存、IO资源,设置并行进程数时得合理考虑

目前psql10暂不支持非btree索引类型的并行索引扫描

index- only扫描是指只需扫描索引,仅根据索引就能获得所需检索的数据,而不需要通过索引回表查询数据

相关文章

  • postgresql实战—进程及内存

    当从数据库中检索数据时有两种典型的访问方法,顺序扫描和B树索引扫描,顺序扫描通过扫描每个页面中的所有行指针顺序读取...

  • App内存优化

    1.内存优化介绍及工具选择 2.Android内存管理机制 3. 内存抖动解决实战 4. 内存泄露解决实战 hpr...

  • C&C++内存检查工具

    Valgrind(memcheck) valgrind通过监控进程的所有内存申请、释放及内存边界,能够有效发现内存...

  • 进程和计划任务详解(一)

    学习内容: 1、进程相关知识(用户空间、内核空间、进程创建、进程优先级、进程内存)2、Linux进程查看及管理工具...

  • LINUX查看进程的4种方法

    进程是什么 进程是在 CPU 及内存中运行的程序代码,而每个进程可以创建一个或多个进程(父子进程)。 查看进程 第...

  • iOS 面试题及答案20道61~80(四)

    iOS 面试题及答案20道61~80(三) 61:谈谈iOS内存 61.1: 内存区域划分 iOS进程内存布局从高...

  • 从事Android以来的相关总结2-Android技能

    Android下的进程与线程: 1、进程的生命周期: 1)、进程的创建及回收: 进程是被系统创建的,当内存不足的时...

  • Dart

    Dart线程模型及异常捕获 Flutter 实战 Dart的内存回收机制 Dart GC

  • 2018年swoole实战8-内存table

    继上篇 2018年swoole实战7-进程详解 本篇演示 swoole内存操作模块 swoole_table一个基...

  • JAVA性能优化,让程序更快更稳定

    本文主要通过分析云系统遭遇的java进程内存溢出的问题,介绍java进程占用系统内存高时的排查方案及建议的解决方案...

网友评论

      本文标题:postgresql实战—进程及内存

      本文链接:https://www.haomeiwen.com/subject/ttfywrtx.html