Laravel,PHP 如何使用数据库连接池提高性能

数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
需要

PHP 7.0+
SWOOLE 2.1+
SMProxy
Laravel
MySQL
  1. 安装 swoole

pecl install swoole

  1. 安装 SMProxy
    (推荐)直接下载最新发行版的 PHAR 文件,解压即用:
    1
    下载前两个压缩包中的一个
    或者使用 Git 切换任意版本:
    2
    git clone https://github.com/louislivi/smproxy.git
    composer install –no-dev # 如果你想贡献你的代码,请不要使用 –no-dev 参数。

  2. 配置数据库连接池

假设 MySQL 数据库账号为 root 密码为 654321 库名为 test
编辑 SMProxy 的 conf/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

SMProxy 文档
https://smproxy.louislivi.com/#/