在Ubuntu上優化PHP與數據庫(如MySQL)的連接,可以通過以下幾個方面來實現:
持久連接可以減少每次請求時建立和關閉連接的開銷。
// 使用持久連接
$mysqli = new mysqli('p:localhost', 'user', 'password', 'database');
編輯MySQL配置文件(通常是/etc/mysql/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
),進行以下優化:
[mysqld]
# 增加連接數限制
max_connections = 500
# 調整連接超時時間
wait_timeout = 300
interactive_timeout = 300
# 啟用查詢緩存(適用于讀密集型應用)
query_cache_size = 64M
query_cache_type = 1
# 調整緩沖區大小
innodb_buffer_pool_size = 1G # 根據服務器內存調整
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
連接池可以管理一組數據庫連接,減少連接的創建和銷毀開銷。
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO($dsn, 'user', 'password', $options);
例如,使用Amphp/MySQL
庫:
use Amp\Loop;
use Amp\MySQL;
Loop::run(function () use ($dsn, $user, $password) {
$connection = new MySQL\Connection($dsn, $user, $password);
$result = $connection->query('SELECT * FROM table');
$rows = $result->fetchAll();
print_r($rows);
});
mysqli_close($mysqli);
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
使用緩存系統(如Redis、Memcached)來緩存頻繁訪問的數據,減少數據庫負載。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('key', 'value');
$value = $redis->get('key');
通過以上方法,可以顯著提高PHP在Ubuntu上與數據庫連接的性能和效率。