聊聊PostgreSQL的VFD机制
1、什么是文件描述符 在操作系统中,为了高效地管理文件,当进程打开或创建一个文件时,操作系统会为该文件分配一个文件描述符(文件句柄),通过该文件描述符来唯一标识该文件,其本质上就是用来管理文件的索引。 理论上来说,我们的操作系统内存有多少就可以打开多少的文件描述符,但实际上一般最大打开文件数会是系统内存的10%(以KB来计算),我们可以通过sysctl -a | grep fs.file-max命令查看。 同时为了防止单个进程过度使用文件描述符,也会对单个进程进行限制,可以通过ulimit -n查看,一般默认值是1024。 2、VFD概述 如上所述,操作系统中默认单个文件使用的文件描述符为1024,即单个进程最多创建或打开1024个文件。那么问题来了,我们都知道pg的表是通过一个个文件构成,默认单个文件大小是1G,那如果我的一个客户端进行执行了一条SQL,涉及到的表加在一起大小超过1024 * 1G呢?那么我们不就没法执行了吗。 为了解决这个问题,pg通过VFD(Virtual File Description)虚拟文件描述符机制来处理。本质上就是对与底层文件操作的一层封装,通过VFD...