假設有一個 php cli 檔案,每2分鐘運行一次執行 mysql 資料寫入操作。
如果用 corntab 或者 mq 的話,每一次執行都要
- 建立 mysql 串連
- 執行批量寫入
- php 手動結束 mysql 串連(實際上 mysql 串連並沒有結束,只是 php 釋放而已)
- php 結束運行 釋放記憶體
- 此時 mysql connection 處理 sleep 狀態
- 2分種後,再次執行 1 ~ 5
指令碼每 2 分鐘一次,24小時下來,mysql 就會產生大量的 sleep connection,就算最佳化了 mysql 的 wait_timeout thread_cache_size 這些參數也沒有用是嗎?
如果是 while(true) 的話,php 使用 pconnect 只建立了一個 mysql 串連,只要 php 進程在運行就永不釋放 mysql connection 對嗎?
這樣是不是就能節省 mysql 串連數,從而減少 mysql 伺服器的壓力?
回複內容:
假設有一個 php cli 檔案,每2分鐘運行一次執行 mysql 資料寫入操作。
如果用 corntab 或者 mq 的話,每一次執行都要
- 建立 mysql 串連
- 執行批量寫入
- php 手動結束 mysql 串連(實際上 mysql 串連並沒有結束,只是 php 釋放而已)
- php 結束運行 釋放記憶體
- 此時 mysql connection 處理 sleep 狀態
- 2分種後,再次執行 1 ~ 5
指令碼每 2 分鐘一次,24小時下來,mysql 就會產生大量的 sleep connection,就算最佳化了 mysql 的 wait_timeout thread_cache_size 這些參數也沒有用是嗎?
如果是 while(true) 的話,php 使用 pconnect 只建立了一個 mysql 串連,只要 php 進程在運行就永不釋放 mysql connection 對嗎?
這樣是不是就能節省 mysql 串連數,從而減少 mysql 伺服器的壓力?
一個 cli 2分鐘運行一次又沒並發,只需要看資料庫讀的操作有沒有如果有就做讀寫分離就解決啦。最佳化 php 的 connection pooling 這個太難了。