mysql killed进程不结束_php和mysql连接方式(短 长 池)
一個php work進程只能處理一個請求,當完成一個請求了,才能處理下一次的請求
2.短連接:
執行到php關閉mysql連接的代碼時,就斷開,否則在處理本次請求結束的時候,釋放mysql連接實驗:
<?php$dbhost = '127.0.0.1';$dbdatabase = 'im';$username = 'root';$userpass = '123456';$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';';$dbh=new PDO($dsn,$username,$userpass);$stmt=$dbh->query('SELECT id FROM im_fri');$row=$stmt->fetch();sleep(10);var_dump($row);并發請求: /usr/local/ab/usr/bin/ab -c 100 -n 100 http://192.168.149.130/login/index
結果: 查看mysql連接數: show full processlist
這里我截了php work進程,和兩個時刻的mysql連接情況的圖片
一共五個php-fpm進程,mysql有五個連接,連接的id,會遞增,說明每次請求完成,mysql連接消失,新的請求,php會重新連接mysql。
3.長連接:
當我們創建的數據連接為PDO持久化連接時,該連接在使用完畢或者PHP腳本結束后并不會被關閉,而是被PHP緩存起來。當另一個使用相同憑證(主機、端口、數據庫名、用戶名、密碼等信息完全一致)的PHP腳本請求建立連接時,PHP將直接返回之前被緩存起來的連接,從而達到連接重用。持久連接緩存可以避免每次訪問數據庫都要建立一個新連接的開銷。實驗:
<?php$dbhost = '127.0.0.1';$dbdatabase = 'im';$username = 'root';$userpass = '123456';$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';';$dbh=new PDO($dsn,$username,$userpass, [PDO::ATTR_PERSISTENT => true]);$stmt=$dbh->query('SELECT id FROM im_fri');$row=$stmt->fetch();sleep(10);var_dump($row);并發請求: /usr/local/ab/usr/bin/ab -c 100 -n 100 http://192.168.149.130/login/index
結果: 查看mysql連接數: show full processlist
這里我截了php work進程,和兩個時刻的mysql連接情況的圖片
一共五個php-fpm進程,mysql有五個連接,連接的id不會變動,說明每次請求完成,mysql連接不會消失,在每個php-fpm進程中處理新的請求,php會重用以前mysql連接, 請求都結束了,每個php-fpm進程和mysql的連接還是不會斷的,一直保持著。
3. 總結
以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要
PHP進階架構師>>>視頻、面試文檔免費獲取?docs.qq.com或 者關注咱們下面的知乎專欄
PHP大神進階?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的mysql killed进程不结束_php和mysql连接方式(短 长 池)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跳舞跳舞跳舞是哪首歌啊?
- 下一篇: js 刷新页面但是不闪烁_前端开发还在手