Laravel,PHP 如何使用資料庫連線池提高效能

louislivi發表於2018-12-07

資料庫連線池

資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。

需要

  • PHP 7.0+
  • SWOOLE 2.1+
  • SMProxy
  • Laravel
  • MySQL

1.安裝swoole

pecl install swoole

2.安裝SMProxy

(推薦)直接下載最新發行版的 PHAR 檔案,解壓即用:

https://github.com/louislivi/smproxy/releases/latest
file
下載前兩個壓縮包中的一個

或者使用 Git 切換任意版本:

git clone https://github.com/louislivi/smproxy.git
composer install --no-dev # 如果你想貢獻你的程式碼,請不要使用 --no-dev 引數。

3.配置資料庫連線池

假設MySQL資料庫賬號為root 密碼為654321 庫名為 test

編輯SMProxyconf/database.json檔案
{
  "database": {
    "account": {
      "root": {
        "user": "root",//資料庫賬號
        "password": "654321"//資料庫密碼
      }
    },
    "serverInfo": {
      "server1": {
        "write": {//寫庫
          "host": "127.0.0.1",//資料庫地址
          "port": 3306,
          "timeout": 0.5,//連線超時時間
          "flag": 0,
          "account": "root"
        },
        "read": {//讀庫,沒有可刪掉read列 或填寫與寫庫資料一致內容
          "host": "127.0.0.1",
          "port": 3306,
          "timeout": 0.5,
          "flag": 0,
          "account": "root"
        }
      },
    "databases": {
      "test": {
        "serverInfo": "server1",
        "startConns": "swoole_cpu_num()*10",
        "maxSpareConns": "swoole_cpu_num()*10",
        "maxSpareExp": 3600,
        "maxConns": "swoole_cpu_num()*20",
        "charset": "utf-8"
      }
    }
  }
}
隨後配置SMProxy 的賬號密碼 在conf/server.json檔案
{
  "server": {
    "user": "SMProxy", //SMProxy賬號
    "password": "SMProxy", //SMProxy密碼
    "charset": "utf8mb4",
    "host": "0.0.0.0",
    "port": "3366",
    "mode": "SWOOLE_PROCESS",
    "sock_type": "SWOOLE_SOCK_TCP",
    "logs": {
      "open":true,
      "config": {
        "system": {
          "log_path": "ROOT/logs",
          "log_file": "system.log",
          "format": "Y/m/d"
        },
        "mysql": {
          "log_path": "ROOT/logs",
          "log_file": "mysql.log",
          "format": "Y/m/d"
        }
      }
    },
    "swoole": {
      "worker_num": "swoole_cpu_num()",
      "max_coro_num": 6000,
      "open_tcp_nodelay": true,
      "daemonize": true,
      "heartbeat_check_interval": 60,
      "heartbeat_idle_time": 600,
      "reload_async": true,
      "log_file": "ROOT/logs/swoole.log",
      "pid_file": "ROOT/logs/pid/server.pid"
    },
    "swoole_client_setting": {
      "package_max_length": 16777216
    },
    "swoole_client_sock_setting": {
      "sock_type": "SWOOLE_SOCK_TCP"
    }
  }
}
啟動SMProxy服務

./SMProxy start

配置Laravel資料庫資訊

.env檔案

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3366
DB_DATABASE=test
DB_USERNAME=SMProxy
DB_PASSWORD=SMProxy
測試Laravel是否能夠正常連線資料庫
  • 出現錯誤請檢查SMProxy日誌

配置完成

SMProxy 文件

相關文章