数据库体系结构-进程和内存结构(Process and Memory Architecture)[亲测有效]

数据库体系结构-进程和内存结构(Process and Memory Architecture)[亲测有效]1数据库体系结构-进程和内存结构(Process and Memory Architecture) PostgreSQL是一个client/server架构rdbms,一个服务器上运行多个进程。 1…

数据库体系结构-进程和内存结构(Process and Memory Architecture)

1数据库体系结构-进程和内存结构(Process and Memory Architecture)

PostgreSQL是一个client/server架构rdbms,一个服务器上运行多个进程。

1、进程结构

  • Postgres Server Process(postmaster)–pg的主进程,也是父进程,后端进程和后台工作进程都是由server process fork派生出来;同时具有监听的功能
  • Background Processes–后台工作进程,实现数据库的功能及管理

logger process–日志收集进程,将日志信息输出到日志文件 checkpointer process–检查点进程,执行检查点 writer process–后台写进程,将shared buffer中的数据写入磁盘 wal writer process–后台wal日志写进程,将walbuffer中的日志流写入磁盘 autovacuum launcher process–自动清理进程,清理版本数据,向postmaster主进程申请调用autovacuum进程.(mvcc实现方式的不同) archiver process–归档进程,归档wal日志 stats collector process–统计信息收集进(pg_stat_database、pg_stat_activity) logical replication,wal sender process等其他进程

  • backed process–后端进程求,用来处理客户端连接请服务

pg postgres [local] idle–本地登陆进程 pg postgres 192.168.6.1(53171) idle–远程登陆进程 pg postgres 192.168.6.1(51846) idle intransaction–远程登陆进程,进程中事务未完成

eg
[root@pg ~]# pstree -ap |grep post |grep -v grep
|-postmaster,889 -D /opt/postgres/data
| |-postmaster,906
| |-postmaster,990
| |-postmaster,991
| |-postmaster,992
| |-postmaster,993
| |-postmaster,994
| |-postmaster,995
| |-postmaster,996
| |-postmaster,1249
| |-postmaster,1301
| `-postmaster,1428`
[root@pg ~]# ps -ef |grep postgres |grep -v grep
pg 889 1 0 09:44 ? 00:00:00 /opt/postgres//bin/postmaster -D /opt/postgres/data
pg 906 889 0 09:44 ? 00:00:00 postgres: logger process
pg 990 889 0 09:44 ? 00:00:00 postgres: checkpointer process
pg 991 889 0 09:44 ? 00:00:00 postgres: writer process
pg 992 889 0 09:44 ? 00:00:00 postgres: wal writer process
pg 993 889 0 09:44 ? 00:00:00 postgres: autovacuum launcher process
pg 994 889 0 09:44 ? 00:00:00 postgres: archiver process
pg 995 889 0 09:44 ? 00:00:00 postgres: stats collector process
pg 996 889 0 09:44 ? 00:00:00 postgres: bgworker: logical replication launcher
pg 1249 889 0 09:51 ? 00:00:00 postgres: pg postgres [local] idle
pg 1301 889 0 10:18 ? 00:00:00 postgres: pg postgres 192.168.6.1(51846) idle in transaction
pg 1428 889 0 11:03 ? 00:00:00 postgres: pg postgres 192.168.6.1(53171) idle
[root@pg ~]#
以上以看出,postmaster fork出其他的进程,其中包括必可须的后台服务进程和后端进程。
注意:
由于所有进程都是由postmster进程派生出来的,不能对进程进行kill操作,否则会造成postmaster重启,也就是数据库重启
杀死后端进程需要使用函数pg_terminate_backend(apid int)
如:
postgres=# select pg_terminate_backend(1301);
pg_terminate_backend
----------------------
t
(1 row)
postgres=#

代码100分

2、内存结构

  • Local memory area–每个后端进程自己使用,主要用于查询

work_mem–用于存放排序和hash结果 maintenance_work_mem–管理工作使用的内存,如VACUUM temp_buffers–存储临时表,创建索引

  • Shared memory area–所有进程共同使用,启动数据库后分配的内存

shared buffer pool–存放page,数据库所有操作都在此内存完成 WAL buffer–存放wal日志流 commit log(buffer)–存放事务状态

代码100分内存大小有参数控制
postgres=# select name,setting,source from pg_settings where name like "%work_mem%";
name | setting | source
----------------------+---------+---------
autovacuum_work_mem | -1 | default
maintenance_work_mem | 65536 | default
work_mem | 4096 | default
(3 rows)
postgres=# select name,setting,source from pg_settings where name like "%buffer%";
name | setting | source
----------------+---------+--------------------
shared_buffers | 16384 | configuration file
temp_buffers | 1024 | default
wal_buffers | 512 | override
(3 rows)
知道以上内存的作用,进行参数调优

3、数据库启动过程

  • start读取参数文件,启动数据库,
  • 首先启动Postgres Server Process(postmaster)
  • 然后分配共享内存
  • 分配内存后启动必须的后台工作进程
  • postmaster监听一个端口,等待客户端连接请求

4、客户端连接过程

客户端进程申请连接数据库,postmaster监听连接,通过连接认证后,fork出后台进程backend process代替客户端进程操作数据库

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8789.html

(0)
上一篇 2023-02-22 10:00
下一篇 2023-02-22

相关推荐

  • oracle ocp题库_oracle数据库19c

    oracle ocp题库_oracle数据库19cCUUG已经开始了Oracle OCP 19c的题库解析 继11g和12c之后,OCP 19c考试题库解析已于2020年7月17日在腾讯课堂免费直播,此为国内首家19c的题库解析。 、**、 CUU…

    2023-03-24
    145
  • JavaWeb 07_创建web项目连接MySQL实现注册登录功能

    JavaWeb 07_创建web项目连接MySQL实现注册登录功能一、创建一个web项目,参照JW/01_创建web项目及部署 二、在NAVICat 里建数据库 db_01,建表tb_user ,字段UName 、Pwd 三、在web下创建一个Directory,

    2023-05-09
    157
  • oracle数据库添加表字段_oracle数据库表增加一列

    oracle数据库添加表字段_oracle数据库表增加一列首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1

    2023-06-20
    151
  • 以Python为中心的条件

    以Python为中心的条件Python是一种高级编程语言,它拥有强大的功能和简单易用的语法,正因如此Python成为了许多数据科学家和软件开发人员的首选语言。在今天的信息时代,越来越多的企业开始意识到Python为公司发展带来的影响力,然而,成功追踪趋势和发展Python的应用显然并不是件容易的事情。在这篇文章中,我们将从多个方面对以Python为中心的条件进行详细阐述,并以此探讨Python的优缺点和适用场景。

    2024-04-22
    71
  • python中异常_所有异常的父类

    python中异常_所有异常的父类如果问所有的异常的父类,应该是Exception

    2023-08-25
    127
  • CSS align-items属性

    CSS align-items属性CSS中的align-items属性是一个非常重要的属性,它决定了一个容器(父元素)内所有的子元素在交叉轴上的对齐方式。了解align-items的使用方法和属性值可以帮助我们更好地布局页面并提高用户体验。

    2024-05-16
    73
  • 使用Python进行数据爬取

    使用Python进行数据爬取在当今的信息时代,数据分析和数据处理都已经成为日常生活和工作中不可或缺的一部分。而在获取数据的流程中,数据爬取无疑是其中最为重要和必要的一环。使用Python进行数据爬取在近些年也变得越来越流行和便捷,成为了许多数据分析师和数据科学家必备的技能之一。

    2024-07-08
    45
  • Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》「终于解决」

    Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》「终于解决」(Redis | 第一部分:数据结构与对象 上篇) 前言 参考资料:《Redis设计与实现 第二版》; 本篇笔记按照书里的脉络,将知识点分为四个部分。其中第一部分数据结构与对象分为上中下篇,上篇包括:

    2023-04-28
    148

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注