PostgerSQL
文章平均质量分 97
PostgerSQL内核学习(框架理论、源码分析)
J.Kuchiki
这个作者很懒,什么都没留下…
展开
-
【PostgreSQL内核学习(三十)—— 执行器(ExecCreateTableAs)】
本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来源。本文主要参考了的开源代码和和《》一书。原创 2024-04-10 16:44:16 · 1058 阅读 · 0 评论 -
【PostgreSQL内核学习(二十九)—— 执行器(ExecProcNode)】
在文章【PostgreSQL内核学习(二十二)—— 执行器(ExecutePlan)】中详细介绍了PostgreSQL数据库中函数的原理和实现细节,强调了它在数据库查询执行机制中的核心作用。文章分析了函数的执行流程,包括初始化变量处理并行执行模式循环执行查询计划节点直到满足退出条件等步骤。此外,还介绍了函数的作用,即执行给定计划节点并返回元组。本文将深入了解的原理和实现细节函数是函数流程中的关键部分,负责实际执行查询计划树中的各个节点并返回结果元组。通过循环调用。原创 2024-04-03 15:34:33 · 1184 阅读 · 0 评论 -
【PostgreSQL内核学习(二十八) —— 执行器 (表达式计算) 】
在PostgreSQL系统的执行器模块中,“表达式计算” 是一个核心功能,它负责处理和评估SQL查询中的各种表达式,包括算术运算逻辑判断函数调用等。这一过程涉及解析查询中的表达式树,然后按照操作符和函数的定义,逐节点计算表达式的值。执行器会利用类型系统来处理不同数据类型之间的操作,并可能涉及类型转换以确保操作的正确性。此外,表达式计算还可能包括对表达式中涉及的列数据进行访问和检索,以及应用优化策略如索引查找或缓存结果以提高计算效率。通过这一系列复杂的计算过程,PostgreSQL。原创 2024-02-27 16:48:17 · 926 阅读 · 0 评论 -
【PostgreSQL内核学习(二十七) —— (编码转换)】
PostgreSQL处理客户端和服务器端字符集匹配问题的机制是复杂且灵活的,能够确保数据在不同编码之间传输时保持其原始的意义和结构,从而避免了乱码问题。这一机制主要涉及字符集的识别转换和验证过程,以确保从客户端发送到服务器的数据能够被正确解释和存储,即使客户端和服务器使用的是不同的字符编码(例如,客户端使用 GBK,而服务器使用 UTF-8编码设置和识别•客户端可以在与服务器建立连接时指定其使用的字符编码。这允许客户端告诉服务器它将以何种编码发送数据。例如,一个使用GBK 编码的客户端。原创 2024-02-23 16:16:34 · 1470 阅读 · 0 评论 -
【PostgreSQL内核学习(二十六) —— (共享数据缓冲区)】
PostgreSQL的共享数据缓冲区()是数据库系统中用于存储从磁盘读取的数据页的内存区域,以便快速重用这些数据,从而减少对磁盘的访问次数和提高查询性能。当数据库需要访问某个数据页时,它首先检查该页是否已在共享数据缓冲区中;如果是直接从内存中读取数据,否则从磁盘加载数据页到缓冲区再进行访问。共享数据缓冲区的大小是可配置的,通过调整参数来实现,这个参数定义了缓冲区分配的内存量。理想的缓冲区大小取决于系统的总内存数据库的工作负载以及其他内存需求。原创 2024-02-04 10:57:06 · 982 阅读 · 0 评论 -
【PostgreSQL内核学习(二十五) —— (DBMS存储空间管理)】
在数据库管理系统(DBMS)中,空间管理是指如何在物理存储介质上组织、管理和优化数据的存储。这是DBMS性能和效率的关键因素之一。块(或页面)区间(区域或范围)段表空间和数据库。块(或页面)块(在Oracle中称为块,在SQL Server和PostgreSQL中称为页面是数据库管理系统存储数据的基本单位。一个块通常是从磁盘上以固定大小读取和写入的数据块,这个大小可以是等,根据数据库的配置而定。每个块包含了一系列的记录,这些记录是数据库中存储的实际数据。区间(Extents)区间是一系列连续的块。原创 2024-02-02 14:54:36 · 803 阅读 · 0 评论 -
【PostgreSQL内核学习(二十四) —— (ALTER MATERIALIZED VIEW)】
是一个SQL命令,用于修改一个已经存在的物化视图的定义或行为。物化视图是一种特殊的数据库对象,它存储了查询结果的实际数据,与普通视图(仅保存查询逻辑)不同。这使得物化视图在处理复杂查询和提高数据检索效率方面非常有用,特别是在涉及大量数据和复杂联结的情况下。使用命令,您可以进行各种修改,比如重命名物化视图更改其底层查询逻辑更新或刷新其中的数据更改存储参数或者修改与物化视图相关的安全和访问规则。这个命令提供了灵活性来维护和优化物化视图,确保它们保持最新并有效地服务于数据库应用程序的需求。在。原创 2024-01-17 11:34:18 · 1195 阅读 · 0 评论 -
【PostgreSQL内核学习(二十三)—— 执行器(ExecEndPlan)】
在这三篇文章中,首先是【OpenGauss源码学习 —— 执行器(execMain)】,它详细探讨了OpenGauss数据库管理系统中执行器模块的主要功能和实现机制。这部分内容涉及到如何在 OpenGauss 环境下处理和执行SQL语句,包括查询计划的生成和优化,以及如何有效地管理数据流和处理结果。接着,【PostgreSQL内核学习(二十一)—— 执行器(InitPlan)】专注于PostgreSQL数据库的执行器模块,特别是初始化计划(InitPlan)的部分。这篇文章讨论了在。原创 2024-01-16 10:36:02 · 1181 阅读 · 0 评论 -
【PostgreSQL内核学习(二十二)—— 执行器(ExecutePlan)】
在文章【OpenGauss源码学习 —— 执行器(execMain)】中,我们深入探究了执行器在数据库中的核心功能和逻辑。这篇文章详细介绍了执行器的主要组成部分,如查询执行的初始化与结束主执行循环、以及行处理逻辑等。通过这篇文章,读者可以了解到执行器是如何在数据库系统中处理用户的查询请求,包括如何遍历执行树执行计划节点,以及如何对数据进行操作和传递。另一方面,文章【PostgreSQL内核学习(二十一)—— 执行器(InitPlan)】则专注于介绍了InitPlan函数在PostgreSQL。原创 2024-01-15 16:44:22 · 1256 阅读 · 0 评论 -
【PostgreSQL内核学习(二十一)—— 执行器(InitPlan)】
在【OpenGauss源码学习 —— 执行器(execMain)】一文中,我们学习了执行器中执行查询的核心函数和逻辑。在本文中,我们将深入研究InitPlan的内容。InitPlan是数据库查询执行过程中的关键组成部分,它用于在查询计划的执行过程中初始化子查询或表达式的结果,以确保正确的查询执行顺序和结果。通过本文的学习,我们将深入了解InitPlan的原理和实现细节,从而更好地理解数据库查询的执行机制。在查询执行阶段之前调用,作为整个执行过程的入口点。它负责触发 InitPlan。原创 2024-01-15 15:38:14 · 1161 阅读 · 0 评论 -
【PostgreSQL内核学习(二十)—— 数据库中的遗传算法】
遗传算法GA)是一种启发式搜索算法,用于解决优化和搜索问题,它借鉴了自然界中的进化理论。在数据库领域,遗传算法可以用于各种任务,如查询优化数据挖掘模式识别等。种群(Population)在遗传算法中,一个种群由多个个体组成,每个个体代表数据库中的一个潜在解决方案。染色体(Chromosome)每个个体由染色体表示,它是解决方案的编码。在数据库应用中,染色体可能代表查询计划、数据库索引的配置或数据分布的模式。适应度函数(Fitness Function)这是一个评价函数,用于确定染色体的优劣。原创 2023-12-27 17:23:21 · 1265 阅读 · 0 评论 -
【PostgreSQL内核学习(十九)—— 存储管理(元组操作)】
对元组的操作包括插入删除和更新三种基本操作,这三种操作都是把元组当作一个整体进行处理。除些之外,在OG中) 这个文件中还实现了元组内部结构的相关操作,包括元组的构造修改分解复制释放等作。一个完整的元组信息将对应一个结构和一个TupleDesc结构,在中还包含一个结构。TupleDesc是关系结构的一部分,也称为元组描述符,它记录了与该元组相关的全部属性模式信息。通过元组描述符可以读取磁盘中存储的无格式数据,并根据元组描述符构造出元组的各个属性值,元组描述符。原创 2023-12-21 14:16:54 · 1333 阅读 · 0 评论 -
【PostgreSQL内核学习(十八)—— 存储管理(存储管理的体系结构)】
数据库管理系统(DBMS)的本质是向存储设备上写入数据或者读出数据,因此存储的管理是一项非常基础且重要的技术。在PostgreSQL中,存储管理器是专门负责管理存储设备的模块,其提供了一组统一管理外存和内存的功能模块。因此从本质上看,存储管理器提供了PostgreSQL与物理存取设备的接口。因为外存对应着各种磁盘设备,而内存则对应着各种随机存储器。存储管理器是整个PostgreSQL系统的底层模块,各种需要访问底层硬件的操作都需要调用其提供的接口。这是数据库系统的核心部分,负责缓存数据页。原创 2023-12-19 17:57:15 · 972 阅读 · 0 评论 -
【PostgreSQL内核学习(十八)—— (数据库表参数)】
default_reloptions 函数是一个选项解析器,用于处理与数据库关系(表或视图)相关的选项。它接受一个包含关系选项的参数,然后解析和验证这些选项,将它们存储在一个特定的数据结构中(StdRdOptions)。这个函数的主要目的是允许用户或数据库管理员通过选项来自定义和配置关系的各种属性和行为,例如填充因子、自动化清理策略、安全性设置等。它是数据库系统中对关系配置的重要组成部分,以实现更好的性能和行为控制。原创 2023-10-07 15:51:16 · 413 阅读 · 0 评论 -
【PostgreSQL内核学习(十七)—— (AutoAnalyze)】
是一种自动统计信息收集和优化功能,用于数据库管理系统中。其主要目的是在数据库中定期收集表的统计信息,以便查询优化器能够生成更有效的执行计划。以下是有关自动统计信息收集会自动定期检查数据库中的表,并确定哪些表需要更新统计信息。这些统计信息包括行数唯一值数量最小值最大值等,这些信息对于查询优化非常重要。查询优化收集的统计信息可帮助查询优化器更好地估算查询成本,从而选择更优的执行计划。这可以提高查询性能减少查询的执行时间。避免过度分析会智能地选择哪些表需要进行统计信息收集,以避免不必要的分析。原创 2023-10-07 09:38:02 · 673 阅读 · 0 评论 -
【PostgreSQL内核学习(十六)—— (pg_statistic 表)】
pg_statistic 表的主要作用是为查询优化器提供关于表列数据分布的信息,以便它可以生成更好的执行计划。具体来说,pg_statistic 表中的每一行都对应于一个表列的统计信息。这些统计信息对于 PostgreSQL 查询优化器来说非常重要,因为它可以帮助优化器决定如何访问表数据以获得最佳性能。原创 2023-09-25 15:06:18 · 928 阅读 · 2 评论 -
【PostgreSQL内核学习(十五)—— (ExecutorRun)】
ExecutorRun 函数和 Portal 之间的关系是在执行 SQL 查询时的协作关系。Portal 是 PostgreSQL 中用于处理查询的抽象层,它可以看作是一个查询计划的容器,包含了查询计划和相关的执行状态信息。ExecutorRun 函数的主要作用是执行一个给定的 Portal,它接受 Portal 作为参数,并负责执行其中包含的查询计划。原创 2023-09-22 17:22:03 · 546 阅读 · 0 评论 -
【PostgreSQL内核学习(十四)—— (PortalRunMulti 和 PortalRunUtility)】
在【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】中我们了解到,Portal。随后,我们在在【PostgreSQL内核学习(十一)—— (CreatePortal)】一文中介绍了函数的执行过程。又在【PostgreSQL内核学习(十二)—— (PortalStart)】一文中学习了的执行过程。其次在【PostgreSQL内核学习(十三)—— (PortalRun)】一文中学习了PortalRun的执行过程。其中,在PortalRun中我们提到,函数用于执行查询并将其结果加载到。原创 2023-09-20 18:02:39 · 423 阅读 · 0 评论 -
【PostgreSQL内核学习(十三)—— (PortalRun)】
在【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】中我们了解到,Portal。随后,我们在在【PostgreSQL内核学习(十一)—— (CreatePortal)】一文中介绍了函数的执行过程。又在【PostgreSQL内核学习(十二)—— (PortalStart)】一文中学习了的执行过程。本文着重来继续学习PortalRun函数。原创 2023-09-19 17:06:38 · 629 阅读 · 1 评论 -
【PostgreSQL内核学习(十二)—— (PortalStart)】
在【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】中我们了解到,Portal。而在【PostgreSQL内核学习(十一)—— (CreatePortal)】一文中,我们介绍了函数的执行过程。其中,函数用于为一个Portal(查询计划的执行状态)定义查询,包括查询的源文本、命令标签、语句列表和缓存计划等属性。函数比较简单,这里不再做赘述。本文着重来继续学习函数。原创 2023-09-18 09:39:30 · 531 阅读 · 0 评论 -
【PostgreSQL内核学习(十一)—— (CreatePortal)】
在PostgreSQL数据库中,Portal是一种数据库内部的概念,用于支持客户端和服务器之间的高级查询和结果集处理。Portal允许客户端在多个步骤中执行查询,并且可以在多次执行之间保持状态。以下是Portal的主要功能和作用:多步查询处理Portal允许客户端执行查询的多个步骤,每个步骤都可以在一个事务中或多个事务中进行。这对于需要分阶段获取结果的查询非常有用,例如大型查询或分批次处理数据。结果集缓存Portal可以缓存查询的结果集。这意味着客户端可以多次检索相同的结果,而无需重新执行查询。原创 2023-09-14 17:29:47 · 602 阅读 · 0 评论 -
【PostgreSQL内核学习(十)—— 查询执行(可优化语句执行)】
可优化语句的共同特点是它们被查询编译器处理后都会生成查询计划树,这一类语句由执行器(Executor)处理。和,其输入是包含查询计划树的数据结构QueryDesc,输出则是相关执行信息或结果数据。如果希望执行某个计划树,仅需构造包含此计划树的QueryDesc,并依次调用三个过程即能完成相应的处理过程。从图6-6可以看到,执行器的三个接口函数都是在Portal的相关函数中调用的,分别负责执行器的初始化执行和清理工作Portal。原创 2023-07-23 22:08:52 · 721 阅读 · 0 评论 -
【PostgreSQL内核学习(九)—— 查询执行(数据定义语句执行)】
数据定义语言(DDL,Data Definition Language)是一类用于定义数据模式、函数等的功能性语句。不同于元组增删查改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数。数据定义语句的处理过程比较简单,其执行流程最终会进入到处理器,然后执行语句对应的不同处理过程。由于数据定义语句的种类很多,因此整个处理过程中的数据结构和方式种类繁冗、复杂,但流程相对简单、固定。由于需要处理所有类型的数据定义语句,因此其输人数据结构的类型也是各种各样,每种类型的数据结构表示不同的操作类型。原创 2023-07-23 17:37:29 · 856 阅读 · 0 评论 -
【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】
查询编译器将用户提交的SQL查询语句转变成执行计划之后,由查询执行器继续执行查询的处理过程。在查询执行阶段,将根据执行计划进行数据提取、处理、存储等一系列活动,以完成整个查询执行过程。查询执行过程更像一个结构良好的裸机,执行计划为输人,执行相应的功能。因此,本章重点介绍查询执行器的框架结构执行方式,结合实例为读者说明数据库执行计划的相关步骤,帮助读者进一步理解PostgreSQL的查询执行过程。查询执行器的框架结构如图6-1所示。同查询编译器一样,查询执行器也是被函数调用,只是调用的顺序上。原创 2023-07-22 18:26:31 · 1049 阅读 · 0 评论 -
【PostgreSQL内核学习(七)—— 查询规划(生成路径)】
对于SQL中的计划命令的处理,无非就是获取一个(或者一系列)元组,然后将这个元组返回给用户或者以其为基础进行插入、更新、删除操作。因此对于一个执行计划来说,最重要的部分就是告诉查询执行模块如何取到要操作的元组。原创 2023-07-21 11:20:10 · 804 阅读 · 0 评论 -
【PostgreSQL内核学习(六)—— 工具使用学习】
本文的工具学习内容来自于《小宇带你学pg内核分析》!!原创 2023-07-20 19:52:18 · 449 阅读 · 0 评论 -
【PostgreSQL内核学习(五)—— 查询规划(预处理)】
预处理的主要工作是提升子链接和子查询以及预处理表达式和HAVING子句等。预处理部分主要是对查询树Query中的范围表rtable和连接树jointree等进行处理。原创 2023-07-20 15:15:06 · 505 阅读 · 0 评论 -
【PostgreSQL内核学习(四)—— 查询规划】
查询规划是数据库管理系统中的关键步骤之一,它涉及将用户提交的查询语句转换为可执行的执行计划。查询规划的目标是找到最优的执行计划,以在数据库中高效地执行查询操作。该过程包括查询优化、索引选择、连接顺序、访问方法等决策,以及生成最终的查询执行计划,以便在数据库系统中执行查询并返回结果。原创 2023-07-20 10:49:57 · 777 阅读 · 0 评论 -
【PostgreSQL内核学习(三)—— 查询重写】
查询重写是指在 PostgreSQL 中通过定义重写规则,对查询树进行转换或优化的过程,以实现对查询操作的定制化处理。重写规则可以通过替换、修改查询树节点或添加附加条件,从而实现对查询语句的修改或优化。原创 2023-07-19 11:51:29 · 1092 阅读 · 0 评论 -
【PostgreSQL内核学习(二)—— 查询分析】
查询分析是查询处理的一个子过程。查询处理是一个更广泛的概念,包含了整个查询的生命周期,从接收查询到最终的结果返回。在查询处理过程中,查询分析是其中的一个重要组成部分。原创 2023-07-18 14:03:20 · 2186 阅读 · 1 评论 -
【PostgreSQL内核学习(一)—— Ubuntu源码安装PostgreSQL】
root下创建postgres用户和数据目录,并修改权限。使用kill命令杀死进程即可释放端口。解决方法:执行以下命令。致谢:分别参考了以下博客。将下面路径添加到文件中。原创 2023-07-13 18:14:01 · 1621 阅读 · 0 评论