현재 위치: > 최신 기사 목록> 연결 기능을 최적화하여 "너무 많은 연결"오류를 해결하는 방법은 무엇입니까?

연결 기능을 최적화하여 "너무 많은 연결"오류를 해결하는 방법은 무엇입니까?

M66 2025-07-04

PHP를 사용하여 데이터베이스에 연결할 때는 종종 "너무 많은 연결"오류가 발생합니다. 이는 일반적으로 데이터베이스 연결이 올바르게 관리되지 않기 때문에 개방형 연결 수가 데이터베이스 서버에서 허용하는 최대 연결 수를 초과하기 때문입니다. 이 기사는 데이터베이스에 연결하는 PHP의 연결 기능을 최적화하여 이러한 오류를 피하는 방법을 소개합니다.

1. "너무 많은 연결"오류의 이유

데이터베이스 서버는 일반적으로 리소스가 소진되는 것을 방지하기 위해 최대 연결 수를 제한합니다. 각 요청마다 새 데이터베이스 연결이 생성되지만 정시에 닫히지 않거나 연결이 재사용되지 않으면 최대 연결 수에 빠르게 도달하여 오류가 발생합니다.

2. 최적화 전략의 개요

  • 연결 멀티플렉싱 : 싱글 톤 모드 또는 지속적인 연결을 사용하여 반복적 인 연결 생성을 피하십시오.

  • 작업을 완료 한 후 시간에 연결을 닫습니다 .

  • 연결 풀링 : 높은 동시성 시나리오에서 연결 풀링 기술을 사용합니다 (PHP는 기본적으로, 일반적으로 사용되는 프레임 워크 또는 확장 된 지원)를 구현하기가 어렵습니다).

3. 샘플 코드를 최적화하십시오

다음은 연결 다중화 및 폐쇄 구현에 중점을 둔 최적화 된 연결 기능을 보여줍니다.

 <?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 ()을 호출하여 연결 시간을 닫으려면 리소스를 해제하십시오.

4. 추가 제안

  • 영구 연결 : 데이터베이스가 지원하는 경우 MySQLI_PCONNECT를 고려할 수 있습니다 (지속적인 연결의 특성과 위험에주의하십시오).

  • 데이터베이스에 최대 연결 수를 구성하십시오 . 응용 프로그램로드를 결합하고 MySQL의 Max_Connection을 합리적으로 구성하십시오.

  • 연결 풀 사용 : 대규모 프로젝트의 경우 Swoole, PDO 연결 풀 등과 같은 방법을 사용하여 연결 관리를 달성 할 수 있습니다.