PHP cli while(true) sleep(60) mysql - V2EX
whatisnew
V2EX    PHP

PHP cli while(true) sleep(60) mysql

  •  
  •   whatisnew May 12, 2015 4116 views
    This topic created in 4019 days ago, the information mentioned may be changed or developed.

    假设有一个 php cli 文件,每2分钟运行一次与 mysql 数据写入操作。

    如果是 corntab 或者 mq 的话,每一次执行都要和 mysql

    1. 建立连接
    2. 执行批量写入
    3. php 手动结束 mysql 连接
    4. php 结束运行 释放内存
    5. mysql connection 处理 sleep 状态
    6. 再次 1 ~ 5

    脚本每 2 分钟一次,24小时下来,mysql 就会产生大量的 sleep connection,就算优化了 mysql 的 wait_timeout thread_cache_size 这些参数也没有用。

    如果是 while(true) 的话,php 使用 pconnect 只有建立一个 mysql 连接,只要进程在 php 就永不释放 mysql connection 对吗?

    这样是不是就能节省 mysql 连接数?

    13 replies    2015-05-13 03:23:15 +08:00
    takatost
        1
    takatost  
       May 12, 2015
    接下来你就要考虑怎么释放PHP进程的内存问题了
    feiyuanqiu
        2
    feiyuanqiu  
       May 12, 2015
    我怎么感觉你想多了
    实际上不只是你这个脚本在运行时会干这些事,所的你的网站的涉及到数据库的页面,在用户访问的时候都会重复做这些事情,比如一个页面的 pageview 是每秒 2 次,一天下来就要重复 86400 * 2 次主楼里面的 1-6 的操作
    似乎也没有浪费太多资源吧
    whatisnew
        3
    whatisnew  
    OP
       May 12, 2015
    @feiyuanqiu 主要是为了减轻 mysql 服务器的压力。
    tabris17
        4
    tabris17  
       May 12, 2015
    mysql有自己的连接池啊
    whatisnew
        5
    whatisnew  
    OP
       May 12, 2015
    @tabris17 除了 java jdbc 连接池,你给我找一个 php 对 mysql 的连接池试试看。。。
    mahone3297
        6
    mahone3297  
       May 12, 2015
    1l说了,你减轻了这点不在乎的mysql资源,你换来的是无尽的内存烦恼。。。
    php好像不会释放内存给os
    Actrace
        7
    Actrace  
       May 12, 2015
    pconnect 和 PDO 建立的长连接都有大量sleep的问题,实际上你只需要用普通的方式建立连接,然后执行完毕后断开然后unset变量即可,效率和你所设想的长连接方式是一样的。

    ps:这个问题似乎直到 5.6.7 都没被发现和解决。
    yangqi
        8
    yangqi  
       May 12, 2015
    你php如何结束连接的?按道理正常结束Mysql连接应该不会有sleep connection了
    tabris17
        9
    tabris17  
       May 12, 2015
    @whatisnew mysql有内置的线程缓存,相当于连接池的功能。如果你把建立TCP连接的IO开销都算进去,那就有点杞人忧天了
    whatisnew
        10
    whatisnew  
    OP
       May 12, 2015
    @tabris17 线程缓存 thread_cache_size 跟连接池是不同的概念好嘛
    tabris17
        11
    tabris17  
       May 12, 2015
    @whatisnew 确实不是等同,但是线程缓存已经节省了新建连接的99%的开销,在客户端使用短连接,完全可以替代连接池的作用
    jamlee
        12
    jamlee  
       May 12, 2015
    可以考虑下读写分离 减缓服务器压力
    About     Help     Advertise     Blog     API     FAQ     Solana     1408 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 23:59 PVG 07:59 LAX 16:59 JFK 19:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86