• mysqli扩展和持久化连接


    mysqli扩展的持久化连接在PHP5.3中被引入。支持已经存在于PDO MYSQL 和ext/mysql中。

    持久化连接背后的思想是客户端进程和数据库之间的连接可以通过一个客户端进程来保持重用, 而不是多次的创建和销毁。

    这降低了每次需要创建一个新连接的开销,未使用的连接被缓存起来并且准备随时被重用。

    不像mysql扩展,mysqli没有提供一个特殊的方法用于打开持久化连接。需要打开一个持久化连接时,你必须在 连接时在主机名前增加p:

    使用持久化连接的问题在于它们可能在客户端处于不可预知的状态。比如,一个表锁可能在客户端意外终止之前被激活。

    一个新的客户端进程重用这个持久化连接就会"按照原样"得到这个连接。这样,一个新的客户端进程 为了更好的使用持久化连接,就需要做任何可能的清理工作,

    这样就增加了对程序员的负担。

    mysqli扩展的持久化连接提供了内建的清理处理代码mysqli 所做的清理工作包括:

    回滚活动的事务
    
    关闭并且删除临时表
    
    对表解锁、
    
    重置会话变量
    
    关闭prepared语句(在PHP中经常发生)
    
    关闭处理程序
    
    释放通过GET_LOCK()获得的锁

    这确保了从连接池返回的持久化连接在客户端进程使用它之前处于干净的状态。

    mysqli扩展通过自动的调用C-API函数mysql_change_user() 来完成这个清理工作。

    自动清理的特性有优点也有缺点。

    优点是:程序员不再需要担心附加的清理代码,因为它们会自动调用。

    缺点就是: 代码可能会潜在的慢一点,因为每次从连接池返回一个连接都需要执行这些清理代码。

    这个自动清理的代码可以通过在编译php时定义MYSQLI_NO_CHANGE_USER_ON_PCONNECT 来关闭。

    Note:

    mysqli扩展在使用Mysql Native Driver或Mysql Client Library(libmysql)时都支持持久化连接。

  • 相关阅读:
    企业——给Zabbix部署onealert云告警平台
    企业——使用API在Zabbix监控中实现查看、创建、删除监控主机的功能
    企业——监控平台Zabbix的安装
    企业——Redis的高可用的搭建
    企业——Redis的主从复制的搭建
    企业——MYSQL异步复制、半同步复制、全同步复制
    企业——memcache对PHP页面的缓存加速优化
    企业——HAproxy实现负载均衡及其常见配置
    企业——LVS 负载均衡的八种调度算法
    PHP微信公众号开发之自动回复
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8855171.html
Copyright © 2020-2023  润新知