Postgres服务进程处理请求的无限循环调用序列图
@H_301_0@ @H_301_0@ 上图大红色方框中显示了postgres服务进程处理客户端访问的无限循环调用序列。我以一个简单的例子来展现处理简单查询的过程,就是走了上图中小红色方框中方法execu_simple_query。使用的例子如下:先准备试验环境:创建数据库TEST,在里面创建表TEST1和TEST2。建这两个表的语句在下面。
create table test1 (IDnumeric(10),cname varchar(30));
create table test2 (IDnumeric(10),comp varchar(30));
select cname,comp from test1,test2 where test1.id=test2.id;
@H_301_0@ 当客户端给服务器端发出查询sql后,建立连接时已经启动且进入无限循环的服务器端的postgres服务进程处理步骤如下: @H_301_0@ (1)调用MemoryContextSwitchTo切换内存上下文到"MessageContext"。 @H_301_0@ (2)调用MemoryContextResetAndDeleteChildren清理上次为相同连接服务时"MessageContext"内存上下文里遗留的对象。 @H_301_0@ (3)调用ReadCommand读取客户端的请求。 @H_301_0@ (4)根据客户端请求判断要提供何种服务,进入相应分支(参见《pg服务过程中的那些事一:启动postgres服务进程二:建立连接完成》)。根据例子里发的请求“select cname,test2 wheretest1.id=test2.id”进入简单查询分支处理方法execu_simple_query。 @H_301_0@ @H_301_0@2 @H_301_0@ 进入后的处理基本上涵盖了《数据库系统实现》这本书里的内容。处理量相当大,先根据流程图概览一下处理过程。为了减小图的大小,把PostgresMain以前的调用流程省略了。在以后的讨论中PostgresMain以前的调用流程也省略了,要回顾可以看上面的“Postgres服务进程处理请求的无限循环调用序列图”。 @H_301_0@
@H_301_0@------------ 转载请著明出处,来自博客: blog.csdn.net/beiigang beigang.iteye.com