매일 PHP 개발에서 데이터베이스 성능 문제는 종종 가장 귀찮은 일, 특히 간헐적 인 시간 초과 문제로 인해 개발자가 신속하게 찾기가 어렵습니다. 다행스럽게도 PHP의 MySQLI 확장은 강력한 도구 인 MySQLI :: Debug를 제공하여 자세한 데이터베이스 작동 로그를 녹화하여 느린 쿼리 또는 연결 문제를 깊이 분석하고 성능 병목 현상을 빠르게 찾을 수 있습니다.
mysqli :: debug는 debug 로깅을 가능하게하는 mysqli 클래스의 메소드입니다. 이 메소드는 MySQL 클라이언트 작업을 로그 파일로 녹음하여 연결 중에 예외 또는 성능 문제를 해결하는 데 도움이됩니다.
mysqli::debug(string $debug_options): bool
이 메소드는 일반적으로 데이터베이스 연결 전에 호출되며 MySQLND 드라이버가 PHP 컴파일 시간에 활성화되어 있어야하며 디버깅이 구성 될 수 있습니다.
mysqli :: debug를 사용하려면 다음을 확인해야합니다.
PHP는 MySQLND 드라이버 <br>를 사용합니다 phpinfo () 를 보면 확인할 수 있습니다.
phpinfo();
mysqlnd 를 검색하십시오. 다음 단어가 표시되면 다음을 활성화 한 것을 의미합니다.
Client API library version => mysqlnd 8.x.x
php.ini 구성을 수정하여 디버깅을 활성화하십시오
mysqlnd.debug = "/tmp/mysqlnd.log"
수정 후 PHP-FPM 또는 Apache 서비스를 다시 시작하십시오.
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 출력 파일을 지정합니다
디버그 로그는 지정한 위치 (예 : /tmp/mysqlnd.log )로 출력되며 Less , Tail 또는 모든 텍스트 편집기를 사용하여 컨텐츠를 볼 수 있습니다.
tail -f /tmp/mysqlnd.log
일반적인 분석 지점은 다음과 같습니다.
연결 시간이 소비됩니까?
쿼리 문이 반복적으로 실행되는지 여부
쿼리 캐시 히트가 있으면
느린 쿼리에는 시간이 걸립니다
SQL 문에 대한 설명 분석을 통해 인덱스를 최적화 해야하는지 또는 전체 테이블 스캔을 피해야하는지 더 정확하게 결정할 수 있습니다.
mysqli :: debug는 풍부한 클라이언트 정보를 제공하지만 더 깊은 느린 쿼리 분석은 MySQL 자체 느린 쿼리 로그가 필요합니다.
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
mysqli :: debug 의 클라이언트 로그와 결합 된 느린 쿼리 로그는 양쪽 끝에서 협력하여 분석 할 수 있으므로 병목 현상을 신속하게 찾을 수 있습니다.
성능 및 보안상의 이유로 개발 또는 테스트 환경에서 디버깅을 사용해야합니다. 디버깅 후 닫아야합니다.
mysqli::debug(""); // 셧다운과 동일한 디버깅 매개 변수를 지우십시오
MySQLI :: Debug를 통해 데이터베이스 연결 문제, 간헐적 인 시간 초과 및 느린 쿼리 분석을 처리하는 데 큰 가치가있는 PHP 스크립트와 MySQL 간의 상호 작용 프로세스를 정확하게 기록하고 분석 할 수 있습니다. 개발 단계 에서이 도구를 잘 활용하면 발사 후 "광산에 대한 스테핑"확률이 크게 줄어들 수 있습니다.