동시 웹 애플리케이션을 구축 할 때 데이터베이스 연결의 오버 헤드는 무시할 수없는 성능 병목 현상입니다. 각 요청과 함께 데이터베이스 연결을 재건하면 리소스를 낭비 할뿐만 아니라 자주 연결 중단을 유발할 수도 있습니다. 이 문제를 해결하기 위해 PHP는 Connect () 함수가 특정 확장 (예 : MySQL, PostgreSQL)에서 지속적으로 사용할 수있는 데이터베이스 연결을 지속하는 메커니즘을 제공하여 시스템 성능 및 안정성을 효과적으로 향상시킵니다.
영구 연결은 요청이 완료된 후 PHP 스크립트가 데이터베이스와의 연결을 닫지 않지만 후속 요청을 재사용 할 수 있도록 연결 풀에 연결을 유지 함을 의미합니다. 이렇게하면 "Connect-Disconnect-Reconnect"프로세스가 빈번하지 않으며 서버로드가 줄어 듭니다.
MySQL을 예제로 취하면 PHP의 MySQLI 및 PDO 확장 기능을 모두 영구 연결을 사용하도록 구성 할 수 있습니다. 다음은 mysqli를 사용하는 예입니다.
<?php
$host = 'p:localhost'; // 접두사에 유의하십시오 'p:' 지속적인 연결을 나타냅니다
$user = 'db_user';
$password = 'db_pass';
$database = 'example_db';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("연결이 실패했습니다: " . $conn->connect_error);
}
echo "지속성 연결이 성공적으로 연결됩니다!";
?>
위의 코드에서는 p : 접두사를 호스트 이름에 추가하여 MySQLI는 지속적인 연결을 설정하려고합니다. 연결 풀에 이미 사용 가능한 연결이있는 경우 재사용하십시오. 그렇지 않으면 새 연결이 생성됩니다.
PDO는 하나의 옵션만으로 지속적인 연결을 설정하는보다 우아한 방법을 제공합니다.
<?php
$dsn = 'mysql:host=localhost;dbname=example_db';
$user = 'db_user';
$password = 'db_pass';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $user, $password, $options);
echo "PDO 지속성 연결이 성공적으로 연결됩니다!";
} catch (PDOException $e) {
echo "연결이 실패했습니다: " . $e->getMessage();
}
?>
pdo :: att_persistent를 사용하면 호스트 주소를 수정하지 않고도 지속적인 연결을 쉽게 활성화 할 수 있습니다.
성능 개선 : 자주 연결 생성으로 인한 CPU 및 메모리 오버 헤드를 피하십시오.
더 빠른 응답 : 연결이 이미 존재하며 데이터베이스 작업은 거의 즉시 수행 될 수 있습니다.
자원 재사용 : 여러 요청이 연결 리소스를 공유하여 데이터베이스 서버의 압력을 줄일 수 있습니다.
지속적인 연결에는 많은 이점이 있지만 다음에주의를 기울여야 할 몇 가지 잠재적 인 문제도 있습니다.
연결 누출 위험 : 코드 로직이 트랜잭션이나 가까운 명령문을 올바르게 처리하지 않으면 연결에서 리소스가 백로그화 될 수 있습니다.
연결 상태 오염 : 여러 요청간에 연결이 재사용되며 각 요청이 시작되기 전에 연결 상태가 정리되도록해야합니다.
연결 수 : 영구 연결은 해제하기 쉽지 않으며 데이터베이스에 대한 최대 연결 수를 설명 할 수 있습니다. 데이터베이스 수준에서 합리적으로 구성하는 것이 좋습니다.
연결하려는 원격 데이터베이스 주소가 DB.m66.net 에 연결하고 PDO를 사용하여 지속적인 연결을 달성하려고한다고 가정합니다.