php mysql_connect pmysql_connect區別

來源:互聯網
上載者:User

標籤:des   http   io   ar   os   使用   sp   for   on   

<?php
        mysql_pconnect(‘192.168.75.128‘, ‘root‘, ‘root‘);
        mysql_close();
        sleep(10);
        echo ‘pconnect‘;

命令列訪問時

[[email protected] baidu91]# php mysql.php

查看mysql進程的線程的情況

show processlist

15 | root | 192.168.75.128:43457 | NULL | Sleep   |     9 |       | NULL    

超過10秒鐘,線程號沒有了,為什麼長串連沒有起作用了,因為php進程結束後,釋放所有資源

可以查看php進程

10秒後

可以發現

進程號沒有了

php的線程數量可以通過 /usr/local/php/etc/php-fpm.conf  max-chlidren修改,

瀏覽器訪問時

確實有長串連,

可以做個實驗,把php進程殺掉,在查看mysql線程情況,如

使用pconnect時, 有請求串連mysql時, php會檢查是否之前有條相同的串連(以相同的使用者名稱密碼串連到同一個mysql伺服器)已經建立, 如果有的話就直接使用這條串連

假設mysql伺服器被配置為最大支援10個並發. 而nginx被配置為使用100個子進程.

nginx由一個父進程來協調將收到的http request分發給哪個空閑中的子進程處理,  這樣很快處理了10個http請求, 假設10個都分配給了不同的子進程, 那末10條跟mysql間的持久串連就建立了, mysql的能力已經到了極限.

這時又來了一個http請求, nginx將它分給其他的任意不在這10個子進程中的進程, 那末這個進程就沒有辦法建立到mysql的串連了, 因為坑位已經滿了.

 

使用持久串連還會有其他方面的問題.

如 果在你指令碼中使用了持久串連, 又進行了鎖表操作的話,  如果到指令碼結束也沒有去解鎖的話.  那麼下次再運行這個指令碼的話, 它為了獲得lock table會在那裡無盡地等待過去的它unlock table, 過去的它已經不能回來了, 這裡成了個死迴圈. 除非重啟web或者mysql伺服器. 另一個會造成鎖定的就是事務了

 

php mysql_connect pmysql_connect區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.