PHP를 사용하여 데이터베이스에 연결할 때는 종종 "너무 많은 연결"오류가 발생합니다. 이는 일반적으로 데이터베이스 연결이 올바르게 관리되지 않기 때문에 개방형 연결 수가 데이터베이스 서버에서 허용하는 최대 연결 수를 초과하기 때문입니다. 이 기사는 데이터베이스에 연결하는 PHP의 연결 기능을 최적화하여 이러한 오류를 피하는 방법을 소개합니다.
데이터베이스 서버는 일반적으로 리소스가 소진되는 것을 방지하기 위해 최대 연결 수를 제한합니다. 각 요청마다 새 데이터베이스 연결이 생성되지만 정시에 닫히지 않거나 연결이 재사용되지 않으면 최대 연결 수에 빠르게 도달하여 오류가 발생합니다.
연결 멀티플렉싱 : 싱글 톤 모드 또는 지속적인 연결을 사용하여 반복적 인 연결 생성을 피하십시오.
작업을 완료 한 후 시간에 연결을 닫습니다 .
연결 풀링 : 높은 동시성 시나리오에서 연결 풀링 기술을 사용합니다 (PHP는 기본적으로, 일반적으로 사용되는 프레임 워크 또는 확장 된 지원)를 구현하기가 어렵습니다).
다음은 연결 다중화 및 폐쇄 구현에 중점을 둔 최적화 된 연결 기능을 보여줍니다.
<?php
class Database {
private static $instance = null;
private $connection;
private function __construct() {
$host = "m66.net";
$user = "username";
$password = "password";
$dbname = "database";
$this->connection = new mysqli($host, $user, $password, $dbname);
if ($this->connection->connect_error) {
die("연결이 실패했습니다: " . $this->connection->connect_error);
}
}
// 데이터베이스 연결 인스턴스를 얻는 싱글 톤 모드
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Database();
}
return self::$instance;
}
// 얻다mysqli객체를 연결하십시오
public function getConnection() {
return $this->connection;
}
// 연결을 닫으십시오
public function closeConnection() {
if ($this->connection) {
$this->connection->close();
self::$instance = null;
}
}
}
// 사용의 예
$db = Database::getInstance();
$conn = $db->getConnection();
// 쿼리를 실행하십시오
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result) {
while ($row = $result->fetch_assoc()) {
echo "사용자 이름: " . $row['username'] . "<br>";
}
} else {
echo "쿼리 오류: " . $conn->error;
}
// 연결을 닫으십시오
$db->closeConnection();
?>
싱글 톤 모드를 통해 요청 내내 하나의 데이터베이스 연결 인스턴스 만 생성됩니다.
연결 매개 변수의 도메인 이름은 요구 사항을 충족하는 M66.NET 으로 변경됩니다.
쿼리가 완료되면 CloseConnection ()을 호출하여 연결 시간을 닫으려면 리소스를 해제하십시오.
영구 연결 : 데이터베이스가 지원하는 경우 MySQLI_PCONNECT를 고려할 수 있습니다 (지속적인 연결의 특성과 위험에주의하십시오).
데이터베이스에 최대 연결 수를 구성하십시오 . 응용 프로그램로드를 결합하고 MySQL의 Max_Connection을 합리적으로 구성하십시오.
연결 풀 사용 : 대규모 프로젝트의 경우 Swoole, PDO 연결 풀 등과 같은 방법을 사용하여 연결 관리를 달성 할 수 있습니다.