- 博客(95)
- 收藏
- 关注
原创 2.00004 优化器执行计划生成的流程是怎么样的?
插件执着人员注意:standard_planner()对它的Query输入做了修改,所以如果你想要多次进行plan,你最好做一个QUERY数据结构的副本。此状态在plan的命令中存在的所有level的子查询之间共享。subquery_planner将被递归调用,以处理在查询表达式和rangetable中找到的子查询节点。1、生成一个PlannerGlobal的Node节点,并初始化PlannerGlobal的部分变量。返回PlannerInfo结构体(root),其中包含plan子查询时生成的所有数据。
2024-07-01 11:06:27
71
原创 2.00001 优化器的代码架构
Path 模块中有开关,指示是否启用遗传算法进行优化,如果启用,且连接的表超过 11,就调用 geqo 目录中 的遗传算法进行优化。PostgreSQL 数据库的 查询优化的代码在 src/backend/optimizer 目录下,其中有 plan、 prep、 path、 geqo、 util 共 5 个子目录, plan 是总入口目录,它调用了 prep 目录进行逻辑优化,调用 path、 geqo 目录进行物理优化, util 目 录是一些公共函数,供所有目录使用。
2024-06-25 09:20:50
54
原创 2.00002 查询树初体验
其他地方引用RangTblEntry的话志勇使用RangeTblRef就行,其中rtindex表示在query->rtable链表中的位置。由于query->rtable中链表已经保存了RangeTblEntry的详细信息,出于保证数据不冗余以及数据一致。
2024-06-20 16:35:57
68
原创 5.00001 postgresql的辅助线程 - pg_stat架构整理
不同类型变量统计的类型和定义,如PgStatShared_Database、PgStatShared_Relation。在服务器启动时将磁盘上的统计信息读入内存,只能由startup进程或在单用户模式下调用。对共享统计项的后端本地标记。只要至少有一个这样的标记存在,共享的统计条目就不会被释放。如果有挂起的统计更新到共享统计,这些将存储在->pending中。为了便于管理,统计数据处理被分割成几个文件。用于特定类型统计的元数据。后端本地统计状态的集合。统计信息项的类型枚举。统计快照条目的哈希表。
2024-06-19 09:37:48
102
原创 3.00003 postmaster守护线程的启动流程调用以及辅助流程的启动流程调用是怎样的
StartChildProcess (postmaster.c:3928)主要动作如下:(和BackendStartup函数一样,都会调用postmaster_child_launch生成postmaster子进程)。3、在process_pm_child_exit函数中有如下判断:即其会在StartUp线程中拉起其余辅助线程。先判断如下:此时进入process_pm_child_exit(),在该入口会启动其余辅助线程;子进程的type,启动函数等信息。需要注意的是,如果要调用。
2024-06-12 15:49:46
45
原创 4.00003 postgresql的内存管理 - 我是怎么获得可用内存的?
然后计算合适的blksize,申请后插入context的block链表,再调用AllocSetAllocChunkFromBlock。该动作会将Context所属的set中的block链表中添加一个新的block。这些函数的实现如下,在全局变量mcxt_methods数组中指定函数指针。即调用入参MemoryContext的methods的alloc函数。由上面的mcxt_methods数组中指定函数指针即。指定了该MemoryContext的操作函数集合。从block中获取chunk。
2024-06-07 11:38:15
143
原创 4.00002 Postgresql的内存管理-一条sql执行过程中的内存上下文是怎么样的?
调试前动作,总结一条sql执行过程的内存上下文分配。
2024-06-03 11:11:57
111
原创 4.00001Postgresql的内存管理-从哪里开始了解内存管理之架构理解
AllocSetContextCreate函数如下介绍,主要作用为创建一个MemoryContext对象,#else#endif判断是否合理:检查参数是否与任意一个可用的自由列表匹配。我们不需要要求maxBlockSize的匹配。else如果存在合适的context_freelists,只需循环使用该上下文。-否则就重新申请。
2024-05-31 16:18:23
210
原创 3.00002 postgresql如何初始化内存上下文,都初始化了哪些上下文?
从版本 7. 1 开始,系统实现了新的内存管理机制, 这样使得运行时大多数内存分配操作在各种语义的内存上下文( MemoryContext) 中进行 。 内存上 下文将放时将会释放在其中分配的所有内存,这样即使某些内存没有被任何指针指向或忘记了释 放,我们都可以通过释放内存上下文来避免这些内存泄漏 。 这一机制也使内存管理更加方便,开发 人员不必再费尽心思地处理内存军事放的工作。程序首先调用 MemoryContextInit 创建 TopMemoryContext 和 ErrorContext0。然后调
2024-05-29 15:09:10
148
原创 3.00001 postgres如何初始化系统参数?
其中保存的是struct config_int ConfigureNamesInt[]的地址。hash_search(dynahash.c:955)函数定义如下,其直接套用下层hash_search_with_hash_value函数。已经默认配置了初始值。在guc_tables.c中定义了参数类型对应的值如下:guc_tables.c:731。查看此时的conf变量,发现它的初始值中就conf->boot_val就是1!在guc_tables.h中定义了参数类型如下:guc_tables.h:21。
2024-05-28 18:03:37
72
原创 1.00002 编译postgresql导读
要完全理解PostgreSQL的话,通过调查源代码还是比较有效果的。要理解代码的话,可以按照目的自己追加必要的功能,改变一些功能的行为,大家可以最大限度的的享受开源带来的好处。这次为了让大家能够理解PostgreSQL的源代码,说明了PostgreSQL 9.1的全体结构,还有说明了代码树。然后还使用了调试器来追踪PostgreSQL的动作,接下来,看看PostgreSQL更详细的结构。
2024-05-27 15:39:05
27
原创 2.00003《Postgresql内幕探索》走读 之 查询优化
在PostgreSQL中,尽管9.6版本中实现的并行查询使用了多个后台工作进程,但一个后端进程基本上处理连接的客户端发出的所有查询。 解析器 Parser解析器从明文的SQL语句生成解析树。 分析仪/分析仪 Analyzer分析器/分析器对解析树进行语义分析,生成查询树。 重写器 Rewriter重写器使用存储在规则体系rules 计划员 Planner计划员从查询树中生成最有效执行的计划树。 执行者 Executor。
2024-03-04 18:06:40
311
转载 ipad使用code_server实现远程开发
不过,虽然我们现在可以直接访问 code-server 了,但直接在 Safari 浏览器里面使用 code-server 体验还是比较糟糕,上面地址栏和下面外接键盘出现的菜单栏都让直接在浏览器里使用 code-server 非常不顺畅,因此我们最好使用下面介绍的 VSApp 来管理、连接 code-server 使用。我们将得到这样的一个文件夹,其中 code-server 是 Linux 可执行文件,我们直接运行即可在远程服务器上开启 code-server。
2023-11-12 16:32:07
479
原创 1.00001git源码clone后进行编译(带调试)
为了能使用gdb调试,需要使用debug模式调试,我自己之前编译的时候发现即使指定-enable-debug在编译的时候发现也使用了-O2,所以这里建议直接修改configure中的-O和-O2为-g,pg的数据指定-D的 位置,所以在一个环境中,一个编译出来的数据库可以有多个运行环境,或者可以有多个编译环境,多个运行环境,所以需要自己按需配置。找到root ALL = (ALL) ALL这一行,在下一行加入username ALL = (ALL) ALL。– 用户生成公匙,登录gitee。
2023-08-25 22:25:56
850
转载 PostgreSQL 入门-安装篇
至此,已完成postgreql的安装。进入/pgsql/postgresql目录可以看到安装后的postgresql的文件。PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下。PGDATA设置为postgresql的数据目录路径:/pgsql/postgresql/data。prefix设置为postgresql的安装路径:/pgsql/postgresql。修改/pgsql/postgresql/data目录下的两个文件。
2023-02-25 10:04:56
7456
1
原创 C++类的构造函数构造时的赋值顺序
C++中类如果继承自父类,且构造时手动调用父类构造;赋值顺序如下:1、父类构造函数赋值;2、子类成员会按照声名顺序赋值。
2022-09-04 13:56:15
1140
原创 Java 基础篇-语言特性
类、对象与对象之间;JAVA是纯面向对象的语言。支持多线程并发,提供多线程之间的同步机制。框架底层都是基于反射的。定义变量首先声明其类型。动态的载入到运行环境中。自动回收给对象的内存。...
2022-07-21 08:34:14
143
原创 华为面试题: 没有回文串
【没有回文串】回文串的定义:正读和反读都一样的字符串现在已经存在一个不包含回文串的字符串,字符串的字符都是在英语字母的前N个,且字符串不包含任何长度大于等于2的回文串;请找出下一个字典序的不包含回文串的、字符都是在英语字母的前N个、且长度相同的字符串。如果不存在,请输出NO。示例1:输入:输出:示例2:输入:输出:...
2022-07-01 13:54:04
1272
1
原创 华为面试题: 招聘
某公司组织一场公开招聘活动,假设由于人数和场地的限制,每人每次面试的时长不等,并已经安排给定,用 (S1, E1)、 (S2, E2)、 (Sj,Ej)…(Si < Ei ,均为非负整数 )表示每场面试的开始和结束时间。面试采用一对一的方式,即一名面试官同时只能面试一名应试者,一名面试官完成一次面试后可以立即进行下一场面试,且每个面试官的面试人次不超过 m 。为了支撑招聘活动高效顺利进行,请你计算至少需要多少名面试官。示例1输入输出示例2输入输出示例3输入输出分析首先进行一下排序,然
2022-07-01 10:48:32
2949
2
原创 约瑟夫环 数学解法
【约瑟夫环】这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。例如,0,1,2,3,4 这 5 个数字组成一个圆圈,从数字 0 开始每次删除第 3 个数字,则删除的前 4 个数字依次是2,0,4,1,因此最后剩下的数字是 3。解决约瑟夫环问题,我们采用倒推,我们倒推出:最后剩下的这个数字,在最开始的数组中的位置。剩下最后一个数字(简称“它”)的时候,总个数为 ,它的下标。那么它在上一轮也是安全的,总个数为 ,它的下标 ;那么它在上上轮也
2022-06-28 13:21:43
1379
1
原创 华为面试题: 分糖果
小明从糖果盒中随意抓一把糖果每次小明会取出一半的糖果分给同学们当糖果不能平均分配时小明可以从糖果盒中(假设盒中糖果足够)取出一个或放回一个糖果小明至少需要多少次(取出放回和平均分配均记一次)能将手中糖果分至只剩一颗代码注意点:是统计取回和放进去的次数!!...
2022-06-27 21:34:03
711
原创 华为面试题: 高矮个子排队
现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;每一个“矮”位置的小朋友要比相邻的位置矮或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。例如,在示范小队{5,3,1,2,3}中,{5, 1, 3, 2, 3}是排序结果。{5, 2, 3, 1, 3} 虽然也满足“高”“矮”“高”“矮”顺序排列,
2022-06-27 21:26:17
1530
原创 bit=1[一比特位]统计算法 :Brian Kernighan算法
由于一个计算机是二进制存储数据,比如:对于2的幂次方有特点就是二进制中只有一个位为1;即对于只有一个1的二进制有一个特点这是一个判断2的幂次方的快速方法:;同时运算式: 可以把n的二进制的最后一个为1 的位置0;利用 Brian Kernighan 算法,可以在一定程度上进一步提升计算速度。Brian Kernighan 算法的原理是:对于给定的 n,计算从 0 到 n 的每个整数的「一比特数」的时间都不会超过 O(logn),因此总时间复杂度为 O(nlogn)。...
2022-06-06 15:30:09
581
翻译 华为面试题:交错字符串
给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …注意:a + b 意味着字符串 a 和 b 连接。示例 1:示例 2:示例 3:提示:链接:https://leetcode.cn/problems/interleavin
2022-06-06 11:38:45
309
原创 华为面试题: 砌墙
文章目录题目代码注意点与分析链接题目你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并
2022-05-31 16:01:33
394
原创 华为面试题:括号生成
文章目录题目代码链接:题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8代码递归实现排列组合class Solution { int left; int right; vector<string
2022-05-31 15:22:21
201
原创 华为面试题:最大数
文章目录题目代码注意点链接:题目给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"提示:1 <= nums.length <= 1000 <= nums[i] <= 10^9代码class Solution {
2022-05-31 15:06:48
411
原创 华为面试题:加湿器的布置
文章目录题目代码注意点index的迭代链接题目冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。说明:所有供暖器都遵循你的半径标准,加热的半径也一样。示例 1:输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热
2022-05-31 11:59:26
174
原创 辗转相除法 - 求解最小公倍数和最大公约数
文章目录辗转相除法最大公约数和最小公倍数代码辗转相除法欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。其计算原理依赖于下面的定理:定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD。gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0
2022-05-22 00:10:54
1136
原创 华为面试题:自守数
文章目录题目分析代码题目描述自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数数据范围: 1≤n≤10000输入描述:int型整数输出描述:n以内自守数的数量。示例1输入:6输出:4说明:有0,1,5,6这四个自守数 示例2输入:1输出:2说明:有0, 1这两个自守数 分析求自守数的解题思路规律:个位数为 0、1
2022-05-22 00:02:00
619
原创 华为面试题: 最大数
文章目录题目题解leetcode链接:addr题目给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"提示:1 <= nums.length <= 1000 <= nums[i] <= 109来源:力扣(LeetCod
2022-05-21 10:56:19
128
原创 华为面试题:完全数定义与欧拉公式求解完全数
文章目录题目完全数定义与计算(欧拉)代码题目完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。输入n,请输出n以内(含n)完全数的个数。数据范围: 1≤n≤5×10^5输入描述:输入一个数字n输出描述:输出不超过n的完全数的个数示例1输入:1000输出:3完全数
2022-05-20 16:54:34
465
原创 华为面试题: 杨辉三角形的变形
文章目录题目解题思路代码题目以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。数据范围: 1 ≤ n ≤10^9输入描述:输入一个int整数输出描述:输出返回的int值示例1输入:4输出:3解题思路写几行就可以发现规律://n==1或2时,没有偶数,cout&
2022-05-20 15:28:46
339
原创 lambada表达式 (匿名函数对象)和 for_each()函数
文章目录前言定义举例捕获方法[var][=][&var][&][this]注意std::for_each()前言函数式编程的一种关键编程语法。本质就是匿名函数(不给函数指针命名的函数)。定义[capture](parameters) mutable return-type{ statement}capture:捕获方法(父作用域的变量)parameters 参数列表mutable,传入的const我也可以改return-type 返回值后置statment 语句(
2022-05-15 12:33:17
444
原创 转发调用包装器bind(),以及函数ref(),cref()
文章目录std::bind()函数说明举例std::ref() & std::cref()说明举例std::bind()函数说明定义于头文件 <functional> template< class F, class... Args >/*unspecified*/ bind( F&& f, Args&&... args ); (1) (C++11 起) template< class R, class F, c
2022-05-14 23:47:50
232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人