PostgreSQL在何处处理 sql查询之二十一
接前面:
回到mdopen上来,看看是谁调用了 mdopen,又获得了什么。
/** mdnblocks() -- Get the number of blocks stored in a relation.** Important side effect: all active segments of the relation are opened* and added to the mdfd_chain list. If this routine has not been* called, then only segments up to the last one actually touched* are present in the chain.*/ BlockNumber mdnblocks(SMgrRelation reln, ForkNumber forknum) {MdfdVec *v = mdopen(reln, forknum, EXTENSION_FAIL);BlockNumber nblocks;BlockNumber segno = 0;/** Skip through any segments that aren't the last one, to avoid redundant* seeks on them. We have previously verified that these segments are* exactly RELSEG_SIZE long, and it's useless to recheck that each time.** NOTE: this assumption could only be wrong if another backend has* truncated the relation. We rely on higher code levels to handle that* scenario by closing and re-opening the md fd, which is handled via* relcache flush. (Since the checkpointer doesn't participate in* relcache flush, it could have segment chain entries for inactive* segments; that's OK because the checkpointer never needs to compute* relation size.)*/while (v->mdfd_chain != NULL){segno++;v = v->mdfd_chain;}for (;;){nblocks = _mdnblocks(reln, forknum, v); if (nblocks > ((BlockNumber) RELSEG_SIZE)) elog(FATAL, "segment too big"); if (nblocks < ((BlockNumber) RELSEG_SIZE)) return (segno * ((BlockNumber) RELSEG_SIZE)) + nblocks;
...v = v->mdfd_chain;} }
mdopen 获得的是一条链表指针,沿着这条链表,可以计算出所读取的数据库文件的块大小。
转载于:https://www.cnblogs.com/gaojian/archive/2013/05/28/3102075.html
PostgreSQL在何处处理 sql查询之二十一相关推荐
- PostgreSQL在何处处理 sql查询之二十二
接前面. 回到程序调用关系上来: estimate_rel_size -> RelationGetNumberOfBlocks->RelationGetNumberOfBlocksINFo ...
- PostgreSQL在何处处理 sql查询之二
在exec_simple_query中,代码如下: 1 /* 2 * exec_simple_query 3 * 4 * Execute a "simple Query" prot ...
- PostgreSQL在何处处理 sql查询之五十二
开始 /** Ready to do the primary planning.*/final_rel = make_one_rel(root, joinlist); 展开: /** make_one ...
- PostgreSQL在何处处理 sql查询之十二
接前面,对 subquery_planner,进行进一步的分析: /*--------------------* subquery_planner* Invokes the planner on a ...
- PostgreSQL在何处处理 sql查询之六十二
对 RelOptInfo * make_join_rel(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2) 函数进行研究: 看看 inner ...
- PostgreSQL在何处处理 sql查询之五十一
继续分析 query_planner: /** query_planner* Generate a path (that is, a simplified plan) for a basic quer ...
- PostgreSQL在何处处理 sql查询之四十七
再次上溯: /*--------------------* subquery_planner* Invokes the planner on a subquery. We recurse to her ...
- PostgreSQL在何处处理 sql查询
如果我开一个psql窗口,来输入sql文,它在数据库的何处被解析?在何处被"真正"处理? postgres.c 的 int PostgresMain(int argc, char ...
- PostgreSQL在何处处理 sql查询之五十四
接前面,从 cheapeast_path 的角度,关注 query_planner 函数,对其进行简化: void query_planner(PlannerInfo *root, List *tli ...
最新文章
- linux 远程访问
- Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
- c语言源程序要求每行只能书写一条语句,C语言章节习题集(全)
- linux下查看无线网卡的命令,lspci命令可看无线网卡 ifconfig看不到 如何操作
- Backbone - create model的实现原理
- mysql获取离当前数据最近的数据_Mysql 获取最近数据信息
- SpringMVC自动配置
- 如何准确估计机器人的状态,增强机器人控制的精度及稳定性
- 一些JavaScript题目
- 如何过滤掉xml中的转义字符_水肥一体化应用中如何选择过滤器?
- 苹果Mac如何使用Tuxera NTFS 格式化磁盘?
- java整数int的32位输出
- Windows 相关镜像及补丁下载地址
- java面试简历项目经验,java面试题项目中的难点
- 私有化单机题库管理软件“题库管家”1.3版本正式发布,windows版与mac版下载地址
- python实现12306火车票查询
- 【云原生之k8s】k8s安全机制
- 面试难题:本机号码一键登录原理,你知道吗?
- 【我的Android进阶之旅】SQLite出错时候的错误码整理
- adb命令查看应用权限赋予情况
热门文章
- Matlab中Ksdensity()函数的用途 (2011-04-02 16:55:17)
- Eureka 服务注册与发现02——集群版
- ArrayList练习——存储随机、存储自定义、按指定格式输出、筛选集合
- Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法
- JavaScript 技术篇-js获取表格元素tr、th、td相对于父节点的索引。
- Python+selenium 自动化-chrome驱动的下载安装
- C++ leetcode 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外
- 二叉树的前序中序后序递归查找,深度,广度搜索C++实现(VS2017)
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
- matlab绘图 subplot函数使用方法