현재 위치: > 최신 기사 목록> MySQLI :: Debug를 사용하여 데이터베이스 시간 초과 문제를 분석하는 방법

MySQLI :: Debug를 사용하여 데이터베이스 시간 초과 문제를 분석하는 방법

M66 2025-05-17

매일 PHP 개발에서 데이터베이스 성능 문제는 종종 가장 귀찮은 일, 특히 간헐적 인 시간 초과 문제로 인해 개발자가 신속하게 찾기가 어렵습니다. 다행스럽게도 PHP의 MySQLI 확장은 강력한 도구 인 MySQLI :: Debug를 제공하여 자세한 데이터베이스 작동 로그를 녹화하여 느린 쿼리 또는 연결 문제를 깊이 분석하고 성능 병목 현상을 빠르게 찾을 수 있습니다.

1. mysqli :: debug 란 무엇입니까?

mysqli :: debug는 debug 로깅을 가능하게하는 mysqli 클래스의 메소드입니다. 이 메소드는 MySQL 클라이언트 작업을 로그 파일로 녹음하여 연결 중에 예외 또는 성능 문제를 해결하는 데 도움이됩니다.

 mysqli::debug(string $debug_options): bool

이 메소드는 일반적으로 데이터베이스 연결 전에 호출되며 MySQLND 드라이버가 PHP 컴파일 시간에 활성화되어 있어야하며 디버깅이 구성 될 수 있습니다.

2. 디버깅 활성화를위한 전제 조건

mysqli :: debug를 사용하려면 다음을 확인해야합니다.

  1. PHP는 MySQLND 드라이버 <br>를 사용합니다 phpinfo () 를 보면 확인할 수 있습니다.

     phpinfo();
    

    mysqlnd 를 검색하십시오. 다음 단어가 표시되면 다음을 활성화 한 것을 의미합니다.

     Client API library version => mysqlnd 8.x.x
    
  2. php.ini 구성을 수정하여 디버깅을 활성화하십시오

     mysqlnd.debug = "/tmp/mysqlnd.log"
    

    수정 후 PHP-FPM 또는 Apache 서비스를 다시 시작하십시오.

3. mysqli :: debug를 사용하는 방법?

PHP 스크립트에서 mysqli :: debug ()을 호출 한 다음 데이터베이스 연결을 작성하고 정상적으로 쿼리를 실행하십시오. 예를 들어:

 <?php

// 디버그 로깅을 활성화합니다
mysqli::debug("d:t:o,/tmp/mysqlnd.log");

// 데이터베이스 연결
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");

if ($mysqli->connect_errno) {
    echo "연결이 실패했습니다: " . $mysqli->connect_error;
    exit();
}

// 쿼리를 실행하십시오
$result = $mysqli->query("SELECT * FROM users WHERE status = 'active'");

while ($row = $result->fetch_assoc()) {
    echo $row['username'] . "<br>";
}

$mysqli->close();
?>

안에:

  • 거절 가능한 디버깅

  • 타드 타임 스탬프

  • o,/tmp/mysqlnd.log 출력 파일을 지정합니다

4. 디버그 로그를 분석하십시오

디버그 로그는 지정한 위치 (예 : /tmp/mysqlnd.log )로 출력되며 Less , Tail 또는 모든 텍스트 편집기를 사용하여 컨텐츠를 볼 수 있습니다.

 tail -f /tmp/mysqlnd.log

일반적인 분석 지점은 다음과 같습니다.

  • 연결 시간이 소비됩니까?

  • 쿼리 문이 반복적으로 실행되는지 여부

  • 쿼리 캐시 히트가 있으면

  • 느린 쿼리에는 시간이 걸립니다

SQL 문에 대한 설명 분석을 통해 인덱스를 최적화 해야하는지 또는 전체 테이블 스캔을 피해야하는지 더 정확하게 결정할 수 있습니다.

5. 느린 쿼리 로그와 함께 추가 위치

mysqli :: debug는 풍부한 클라이언트 정보를 제공하지만 더 깊은 느린 쿼리 분석은 MySQL 자체 느린 쿼리 로그가 필요합니다.

 SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

mysqli :: debug 의 클라이언트 로그와 결합 된 느린 쿼리 로그는 양쪽 끝에서 협력하여 분석 할 수 있으므로 병목 현상을 신속하게 찾을 수 있습니다.

6. 디버깅 후 디버깅이 완료됩니다

성능 및 보안상의 이유로 개발 또는 테스트 환경에서 디버깅을 사용해야합니다. 디버깅 후 닫아야합니다.

 mysqli::debug(""); // 셧다운과 동일한 디버깅 매개 변수를 지우십시오

7. 요약

MySQLI :: Debug를 통해 데이터베이스 연결 문제, 간헐적 인 시간 초과 및 느린 쿼리 분석을 처리하는 데 큰 가치가있는 PHP 스크립트와 MySQL 간의 상호 작용 프로세스를 정확하게 기록하고 분석 할 수 있습니다. 개발 단계 에서이 도구를 잘 활용하면 발사 후 "광산에 대한 스테핑"확률이 크게 줄어들 수 있습니다.