PHP에서 Connect_errno 는 MySQLI Extension에서 제공하는 속성으로 MySQL 데이터베이스에 연결할 때 발생하는 오류 수를 얻습니다. mysqli_connect () 또는 mysqli :: __ construct ()를 호출 할 때 데이터베이스 연결을 설정하려면 Connect_erRNO가 자동으로 값을 할당합니다. 연결이 성공하면 Connect_erRNO 의 값은 0이됩니다. 연결 오류가 발생하면 Connect_erRNO는 해당 오류 코드를 반환합니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"데이터베이스에 성공적으로 연결하십시오!"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
위의 코드에서 데이터베이스 연결이 성공하면 $ mysqli-> connect_errno가 0이됩니다. 연결이 실패하면 $ mysqli-> connect_errno가 특정 오류 코드를 반환합니다.
Connect_ERRNO는 데이터베이스 연결 프로세스 중에 문제가 발생할 때만 정보를 제공합니다.
데이터베이스 서버는 도달 할 수 없습니다
잘못된 사용자 이름 또는 비밀번호
데이터베이스가 존재하지 않습니다
그러나 Connect_errno는 데이터베이스로드가 너무 높는지 여부를 직접 결정하는 데 직접 도움이되지 않습니다. 데이터베이스의로드는 일반적으로 느린 쿼리 응답 시간, 연결 풀의 소진 또는 과도한 서버 리소스 (예 : CPU, 메모리)로 나타납니다. 이러한 경우는 Connect_errno 에 의해 감지 할 수 없습니다.
데이터베이스의로드를 모니터링하려면 다음과 같은 다른 수단을 사용해야합니다.
MySQL은 데이터베이스의로드 상태를 모니터링하는 데 도움이되는 일부 시스템 변수 및 명령을 제공합니다.
표시 상태 :이 명령은 연결 수, 쿼리 시간, 느린 쿼리 등을 포함하여 MySQL의 실행 상태를 볼 수 있습니다.
변수 표시 : 최대 연결 수, 메모리 사용량 등을 포함하여 MySQL 구성의 매개 변수를 확인하십시오.
Show ProcessList : 현재 실행중인 쿼리를 표시하므로 시스템로드를 과도한 장기 쿼리가 있는지 확인할 수 있습니다.
<span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Threads_connected'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> STATUS </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'Questions'</span></span><span>;
</span><span><span class="hljs-keyword">SHOW</span></span><span> PROCESSLIST;
</span></span>
이러한 명령은 데이터베이스 연결 및 쿼리 조건 수를 실시간으로 모니터링하여 데이터베이스에 과부하가 있는지 여부를 결정하는 데 도움이 될 수 있습니다.
Prometheus , Grafana , Percona Monitoring and Management (PMM) 와 같은 전문 데이터베이스 모니터링 도구를 사용하여 데이터베이스의로드 상태를보다 심층적으로 분석합니다. 이러한 도구는 자세한 차트와 경보 기능을 제공 할 수있어 데이터베이스로드가 너무 높아서시기 적절한 조치를 취할 수 있습니다.
느린 쿼리 로그를 활성화하면 많은 시간을 소비하는 쿼리를 식별하는 데 도움이 될 수있어 데이터베이스에 과부하가 발생할 수 있습니다. 다음 mySQL 구성으로 느린 쿼리 로그를 활성화 할 수 있습니다.
<span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> slow_query_log </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-string">'ON'</span></span><span>;
</span><span><span class="hljs-keyword">SET</span></span><span> </span><span><span class="hljs-keyword">GLOBAL</span></span><span> long_query_time </span><span><span class="hljs-operator">=</span></span><span> </span><span><span class="hljs-number">2</span></span><span>; </span><span><span class="hljs-comment">-- 설정 쿼리가 초과됩니다 2 초의 쿼리는 느린 쿼리입니다</span></span><span>
</span></span>
느린 쿼리 로그는 데이터베이스에서 덜 효율적인 쿼리를 발견하여 이러한 쿼리 또는 데이터베이스 구조를 최적화하고 데이터베이스로드를 줄일 수 있습니다.
모니터링에서 데이터베이스로드가 너무 높다는 것을 알게되면 문제를 최적화하고 해결하기 위해 다음 방법을 수행 할 수 있습니다.
느린 쿼리 로그를 분석하고 복잡하고 시간이 많이 걸리는 SQL 쿼리를 최적화하여 쿼리 문의 효율성을 확인하십시오. 예를 들어, 적절한 인덱스를 사용하여 전체 테이블 스캔을 피하고 페이징 쿼리를 사용하여 쿼리 당 데이터 양을 줄입니다.
데이터베이스 연결 수가 높은 부하의 이유 인 경우 데이터베이스가 요청 될 때마다 연결 오버 헤드를 줄이기 위해 데이터베이스 연결 풀의 크기를 늘리는 것을 고려할 수 있습니다.
동시성이 높은 경우 데이터베이스의 읽기 및 쓰기 분리를 통해 읽기 요청 및 쓰기 요청을 다른 데이터베이스 서버에 할당하여 단일 데이터베이스 서버의로드를 줄일 수 있습니다.
매우 큰 데이터베이스의 경우 데이터베이스의 수평 분할을 고려하고 데이터를 여러 데이터베이스 인스턴스로 산란시키고로드를 더 공유 할 수 있습니다.