文档章节

利用临时表在php-fpm里面实现一次性的bootstrap

宏哥
 宏哥
发布于 2012/11/14 15:27
字数 205
阅读 195
收藏 1

php-fpm 子进程在创建的时候, 无法强制执行一个初始化过程, 但是没有关系.

可以为php-fpm提供一个长连接到postgresql. 默认的, 每一个子进程拥有一个PG长连接.

我希望在这个长连接建立的初始, 来执行一些初始化动作,比如编译prepared statemenet. 

做法如下:

1:获得pg_pconnect连接的时候, 查询可见临时表,比如"app_init"的存在

2: 如果不存在, 创建这个表, 并执行初始化动作

3:如果存在, 不做任何额外操作

这样可以保证, prepared statement 被编译,并且仅被编译一次. 编译是在第一次建立长连接的时候发生. 这就实现了bootstrap.


© 著作权归作者所有

宏哥

宏哥

粉丝 1147
博文 77
码字总数 16729
作品 0
长宁
程序员
私信 提问
加载中

评论(6)

mark35
mark35

引用来自“宏哥”的评论

引用来自“mark35”的评论

用长连接来实现prepare的重用对性能提升应该很大,但会不会有副作用呢

我重新做了测试, 长连接的时间下降很客观.
比如查询单个用户信息, 整个页面所有的执行时间, 从请求到收到整个信息应答, 时间可以下降到5ms以内. 具体执行时间我没有细查, 应该在1-2ms以内.

我是这么考虑:如果查询复杂耗时则连接、初始化开销所占比例就较小那么性能提升就不大;如果查询简单且频繁那么用长连接所带来的性能提升就明显
宏哥
宏哥 博主

引用来自“mark35”的评论

用长连接来实现prepare的重用对性能提升应该很大,但会不会有副作用呢

我重新做了测试, 长连接的时间下降很客观.
比如查询单个用户信息, 整个页面所有的执行时间, 从请求到收到整个信息应答, 时间可以下降到5ms以内. 具体执行时间我没有细查, 应该在1-2ms以内.
宏哥
宏哥 博主

引用来自“mark35”的评论

用长连接来实现prepare的重用对性能提升应该很大,但会不会有副作用呢

我写了一个类, 来初始化连接的时候, 一次性编译全部的prepared statment,
实际看来, 性能差异比较小, 说明数据库在做plan的时候, 是很快的, 耗时间还是在真正执行查询, 以及抓起数据上. 但是latency 会很小.
宏哥
宏哥 博主

引用来自“mark35”的评论

用长连接来实现prepare的重用对性能提升应该很大,但会不会有副作用呢

副作用就是调试麻烦.重用了就意味着你修改之后要重新reload.
一般情况,没有必要.除非要挖性能.
mark35
mark35
用长连接来实现prepare的重用对性能提升应该很大,但会不会有副作用呢
宏哥
宏哥 博主
实际上, pg_prepared_statements的视图保存了当前会话的的信息, 如果是为了prepared_statments, 连那个临时表都不需要. 但是临时表,可以作为数据初始化的用处.
通过php extension使disable_function支持通配符

本人学C语言不久,对指针内存管理等都还没入门,php扩展的编写更是胡乱在拼凑,以下是我“乱搞”的一点记录,希望大家指点和轻喷。 一天翻php.ini的时候看到了一堆“同族”的函数 ; This dir...

solu
2013/02/04
416
0
PHP FastCGI进程管理器PHP-FPM的架构

一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运...

eechen
2015/12/08
12.7K
49
ubuntu下docker环境、php环境以及laravel的安装

ubuntu下docker环境、php环境以及laravel的安装 ------因为在学习laravel,需要搭建一个php7的开发环境,经常要反复卸载重新安装各种软件,多搞几遍环境可能就被污染。所有想到了可以使用doc...

一耳听世界
2016/07/29
332
0
php pdo防sql注入原理 php连接池

pdo防sql注入原理 PdoTest.php 访问: 状态:方式一、方式二都正常 访问: 状态:方式一返回false,方式二返回user表所有数据 问题来了,为什么pdo预处理能正确处理sql注入呢? mysql预处理语...

tomener
09/29
0
0
linux的php-fpm的pool、慢执行日志、进程管理及open_basedir介绍

php-fpm的pool Nignx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。 php-fpm配置说明: 和LAMP不同的是,在LNMP架构中,php-f...

Gary_加油涛
2018/01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Activity启动模式二

上篇文章Activity启动模式一主要介绍了Activity的四种启动模式,这些启动模式都是在AndroidManifest中进行配置的。除此之外,Android系统还通过Intent类提供了一些标志位,同样可以指定Activ...

ltlovezh
8分钟前
4
0
三原色还原

1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式...

天王盖地虎626
19分钟前
3
0
kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
57分钟前
8
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部