《PostgreSQL技术内幕——原理探索》第4章、第8章笔记

news/2024/7/9 22:17:00 标签: postgresql, 数据库, mysql

第四、第八章笔记

  • 第4章 外部数据包装器
    • FDW是如何执行的
    • 总结
  • 第八章 缓冲区管理器
    • 8.1 概述
      • 8.1.1 缓冲区管理器的结构
      • 8.1.2 缓冲区标签(buffer_tag)
      • 8.1.3 后端进程如何读取数据页
      • 8.1.4 页面置换算法
      • 8.1.5 刷写脏页
    • 8.2 缓冲区管理器的结构

第4章 外部数据包装器

2003年,SQL标准中添加了一个访问远程数据的规范,称为SQL外部数据管理(SQL/MED)。PostgreSQL在9.1版本开发出了FDW,实现了一部分SQL/MED中的特性。

在SQL/MED中,远程服务器上的表被称为外部表(Foreign Table)。 PostgreSQL的外部数据包装器(FDW) 使用与本地表类似的方式,通过SQL/MED来管理外部表。

在这里插入图片描述

安装完必要的扩展并配置妥当后,就可以访问远程服务器上的外部表了。 例如假设有两个远程服务器分别名为postgresqlmysql,它们上面分别有两张表:foreign_pg_tbl和foreign_my_tbl。 在本例中,可以在本地服务器上执行SELECT查询以访问外部表,如下所示。

localdb=# -- foreign_pg_tbl 在远程postgresql服务器上
localdb-# SELECT count(*) FROM foreign_pg_tbl;
 count 
-------
 20000

localdb=# -- foreign_my_tbl 在远程mysql服务器上
localdb-# SELECT count(*) FROM foreign_my_tbl;
 count 
-------
 10000

FDW是如何执行的

在这里插入图片描述

1、分析器为输入的SQL创建一颗查询树。
2、计划器(或执行器)连接到远程服务器。
3、如果启用了use_remote_estimate选项(默认关闭),则计划器将执行EXPLAIN命令以估计每条计划路径的代价。
4、计划器按照计划树创建出纯文本SQL语句,在内部称该过程为逆解析(deparesing)。
5、执行器将纯文本SQL语句发送到远程服务器并接收结果。

总结

访问远程服务器的数据表的Sql语句与访问本地服务器数据表的Sql语句并无区别,主要区别体现在查询编译的过程中,会生成新的SQL语句传给远程服务器执行后得到数据,最后返回本地服务器进行运算。

第八章 缓冲区管理器

缓冲区管理器(Buffer Manager)管理着共享内存和持久存储之间的数据传输,对于DBMS的性能有着重要的影响。PostgreSQL的缓冲区管理器十分高效。

8.1 概述

本章介绍了PostgreSQL的缓冲区管理器。第一节概览了缓冲区管理器,后续的章节分别介绍以下内容:

  • 缓冲区管理器的结构
  • 缓冲区管理器的锁
  • 缓冲区管理器是如何工作的
  • 环形缓冲区
  • 脏页刷写

在这里插入图片描述

8.1.1 缓冲区管理器的结构

​ PostgreSQL缓冲区管理器由缓冲表,缓冲区描述符和缓冲池组成,这几个组件将在接下来的小节中介绍。 缓冲池(buffer pool)层存储着数据文件页面,诸如表页与索引页,及其相应的自由空间映射和可见性映射的页面。 缓冲池是一个数组,数据的每个槽中存储数据文件的一页。 缓冲池数组的序号索引称为buffer_id

8.1.2 缓冲区标签(buffer_tag)

PostgreSQL中的每个数据文件页面都可以分配到唯一的标签,即缓冲区标签(buffer tag)。 当缓冲区管理器收到请求时,PostgreSQL会用到目标页面的缓冲区标签。

8.1.3 后端进程如何读取数据页

在这里插入图片描述

1、当读取表或索引页时,后端进程向缓冲区管理器发送请求,请求中带有目标页面的buffer_tag。
缓冲区管理器会根据buffer_tag返回一个buffer_id,即目标页面存储在数组中的槽位的序号。如果请求的页面2、没有存储在缓冲池中,那么缓冲区管理器会将页面从持久存储中加载到其中一个缓冲池槽位中,然后再返回该槽位的buffer_id。
3、后端进程访问buffer_id对应的槽位(以读取所需的页面)。
当后端进程修改缓冲池中的页面时(例如向页面插入元组),这种尚未刷新到持久存储,但已被修改的页面被称为脏页(dirty page)。

8.1.4 页面置换算法

​ 当所有缓冲池槽位都被占用,且其中未包含所请求的页面时,缓冲区管理器必须在缓冲池中选择一个页面逐出,用于放置被请求的页面。 在计算机科学领域中,选择页面的算法通常被称为页面置换算法(page replacement algorithms),而所选择的页面被称为受害者页面(victim page)。

8.1.5 刷写脏页

​ 脏页最终应该被刷入存储,但缓冲区管理器执行这个任务需要额外帮助。 在PostgreSQL中,两个后台进程:检查点进程(checkpointer)和后台写入器(background writer)负责此任务。

8.2 缓冲区管理器的结构

在这里插入图片描述


http://www.niftyadmin.cn/n/1447121.html

相关文章

Linux下PhpMyAdmin程序目录的安全管理(转)

PhpMyAdmin是一套放在服务器端的通过浏览器界面管理的程序,因此,确保其目录安全性十分重要,否则,将导致数据被盗取甚至遭到恶意破坏。本文将详细讲述一般的防范措施。 正文: 在Linux下开发Web程序,现在很流行的开发方法…

[python] 线程简介

参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作…

移动通信的一体化解决方案(转)

在运营公司的经营中,维护、管理、建设等各方面工作是紧密联系的有机整体。然而,若干业务系统独立运作的方式将这些密切的关系分割开来,存在不少弊病,也限制了业务的发展。这种方式,在竞争激烈的移动通信领域&#xff0…

前端工程师如何快速的开发一个微信JSSDK应用

亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了。在应用号还没有正式出来之前,我们赶…

uva 11556 - Best Compression Ever(水题)

题目链接&#xff1a;uva 11556 - Best Compression Ever 题目大意&#xff1a;有n个文件&#xff0c;问说用b1位是否可以表示&#xff0c;全0不能表示。 解题思路&#xff1a;水题&#xff0c;不过话说英语实在看不懂啊&#xff0c;题意是半猜的。 #include <cstdio> #…

后门防御阅读笔记,Neural Cleanse Identifying and Mitigating Backdoor Attacks in Neural Networks

论文标题&#xff1a;Neural Cleanse Identifying and Mitigating Backdoor Attacks in Neural Networks 论文单位&#xff1a;UC Santa Barbara,University of Chicago 论文作者&#xff1a;Bolun Wang, Yuanshun Yao,Shawn Shan 收录会议&#xff1a;2019 IEEE Symposium …

使用sshfs将远程目录挂载到本地

在Linux下我们通常使用ssh命令来登录远程Linux服务器&#xff0c;如果需要登录的远程服务器不止一个&#xff0c;来回切换的过程将会变得非常麻烦。如果使用sshfs&#xff0c;将可以直接将远程目录映射到本地&#xff0c;而不需要修改远程计算机的设置。下面我们来看一下如何使…

TPC-B测试:Greenplum 6版本比5版本到底好了多少?

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 pgbench 简介: pgbench是一种在PostgreSQL上运行基准测试的简单程序。它可能在并发的数据库会话中一遍一遍地运行相同序列的 SQL 命令&#xff0c;并且计算平均事务率&#xff08;每秒的事务数&#xff09…