PostgreSQL在何处处理 sql查询之二十一
生活随笔
收集整理的這篇文章主要介紹了
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查询之二十一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WindowsPhone后台新特性
- 下一篇: js 中输入验证