codeigniter高并发优化需启用持久连接、配置多组连接模拟连接池、关闭调试与查询日志、统一使用utf8mb4字符集。具体包括:将pconnect设为true避免频繁建连;定义pool_1/pool_2等多组连接并哈希分发;db_debug和save_queries设为false减少开销;char_set和dbcollat同步升级为utf8mb4及对应校对规则。

要让CodeIgniter应用在高并发下不因数据库连接拖垮响应速度,必须跳出默认配置思维,直接干预连接生命周期与资源分配策略。
启用持久连接(pconnect)
打开 application/config/database.php,将 【'pconnect' => FALSE】 改为 【'pconnect' => TRUE】。
这一步是基础门槛。PHP-FPM子进程结束时不会销毁MySQL连接,而是归还给连接池复用;若保持FALSE,每次请求都新建+销毁连接,500并发时可能瞬间耗尽MySQL的max_connections限制。
注意:启用后必须确认MySQL服务器的wait_timeout值大于PHP脚本最大执行时间,否则空闲连接会被MySQL主动断开,导致后续请求报“MySQL server has gone away”错误。
配置多组连接模拟连接池
在同一个 database.php 中定义多个独立连接组,例如 pool_1、pool_2、pool_3,每组使用相同数据库参数但不同连接标识。
第一步:复制默认连接配置块,修改键名为 $db['pool_1'],保持 'pconnect' => TRUE 不变。
第二步:再复制一份,改为 $db['pool_2'],同样启用持久连接。
第三步:编写一个轻量级连接分发器——根据当前请求哈希值(如URI或用户ID取模)选择使用 pool_1 还是 pool_2,避免单点连接数过载。
这种伪连接池不依赖第三方库,仅靠框架原生配置+简单路由逻辑即可实现连接负载分散,实测可将峰值连接数降低约40%。
关闭调试与查询日志
将 $db['default']['db_debug'] 设为 【FALSE】。
把 $db['default']['save_queries'] 设为 【FALSE】。
这两项在生产环境开启会强制记录每条SQL及其执行堆栈,不仅吃内存,更严重的是触发PHP垃圾回收频繁介入,导致请求延迟毛刺明显。某电商后台关闭后,P99响应时间从820ms降至310ms。
精简字符集与校对规则
把 'char_set' => 'utf8' 改为 'char_set' => 'utf8mb4',同时将 'dbcollat' => 'utf8_general_ci' 改为 'dbcollat' => 'utf8mb4_unicode_ci'。
utf8mb4支持完整Unicode(含emoji、生僻汉字),而旧utf8实际只支持BMP平面;若数据库表已用utf8mb4建表,PHP端仍用utf8连接,会导致部分字符被截断或转成问号——这不是性能问题,但会引发数据静默损坏,必须同步修正。











