데이터베이스 쿼리로 인한 메모리 부족 문제를 해결하는 방법은 무엇입니까? 이번 글에서는 PHP가 대용량 MySQL 데이터를 쿼리할 때 발생하는 메모리 부족 현상에 대한 해결 방법을 주로 소개하고 있으며, MySQL 쿼리 시 발생하는 메모리 부족 현상의 원인과 그에 따른 해결 방법을 예시를 통해 분석하고, mysql_unbuffered_query 함수의 사용법을 좀 더 자세히 분석합니다. 모든 사람에게 도움이 되기를 바랍니다.
이 기사에서는 PHP가 대량의 MySQL 데이터를 쿼리하여 발생하는 메모리 부족에 대한 솔루션을 예제를 사용하여 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
1. 문제
PHP를 사용하여 대용량 MySQL 데이터를 쿼리할 때 프로그램이 아직 실행을 완료하지 못하고 경고 팝업이 뜹니다.
치명적인 오류: 허용되는 메모리 크기 100663296바이트 소진(103바이트 할당 시도)
오류 메시지: PHP에서 할당한 100M 메모리가 완전히 사용되었습니다.
2. 해결 방법:
가장 간단한 해결 방법은 다음을 추가하는 것입니다.
ini_set('memory_limit','256M');
실행 파일 앞 부분의 메모리를 256M 이상으로 늘리면 PHP 메모리에서 사용하는 크기가 늘어날 수 있습니다. space
그런데 다음에 더 많은 데이터를 읽고 싶으면 어떻게 해야 하나요? 계속해서 늘릴 수 없어서 PHP가 서버의 메모리를 잡아먹게 됩니다.
다음은 함수입니다:
memory_get_usage() 메서드를 사용하여 PHP에서 사용하는 메모리 양을 가져옵니다. 읽은 데이터 항목의 수가 증가함에 따라 PHP에서 사용하는 메모리도 단계적으로 증가하는 것으로 나타났습니다.
PHP가 mysql에 쿼리할 때의 데이터가 메모리에 저장되어 있나요? 몇 번 검색해본 결과 이것이 실제로 의미하는 바임을 알았습니다.
Mysql의 C API 함수에는 mysql_use_result() 및 mysql_store_result()
mysql_store_result()가 mysqlServer에서 클라이언트로 결과 세트를 읽는 반면, mysql_use_result()는 결과 세트의 메타 정보만 읽습니다
1. 결과 집합을 자동으로 가져오고 캐시하는 mysql_store_result()를 호출합니다. PHP의 또 다른 함수인 mysql_unbuffered_query()는 대규모 결과 집합을 처리할 때 상당한 시간을 절약합니다. 반면, 전체 SQL 문이 실행될 때까지 기다리지 않고 첫 번째 행을 가져온 직후 결과 집합을 작업할 수 있습니다.
그래서 많은 양의 데이터를 읽을 때는 mysql_query() 대신 mysql_unbuffered_query()를 사용할 수 있습니다. 테스트 결과 실제로 그렇습니다. 그리고 꽤 강력합니다. 모든 데이터를 가져온 후 메모리가 1MB 이내로 유지되고 증가하지 않습니다. Mysql_unbuffered_query()는 MySQL에 SQL 쿼리를 보내지만 mysql_query()처럼 결과 집합을 자동으로 가져오고 캐시하지 않습니다. 한편으로 이는 매우 큰 결과 세트를 처리할 때 상당한 메모리를 절약합니다. 반면, 전체 SQL 문이 실행될 때까지 기다리지 않고 첫 번째 행을 가져온 직후 결과 집합을 작업할 수 있습니다. 여러 데이터베이스 연결을 사용하는 경우 선택적 매개변수 link_identifier를 지정해야 합니다. mysql_unbuffered_query()의 장점은 다음과 같습니다. mysql_num_rows() 및 mysql_data_seek()는 mysql_unbuffered_query()가 반환한 결과 집합 위에 사용할 수 없습니다. 또한, 새로운 SQL 쿼리를 MySQL에 보내기 전에 캐시되지 않은 SQL 쿼리에 의해 생성된 모든 결과 행을 가져와야 합니다.
따라서 비즈니스 요구 사항에 따라 적절하게 기능을 선택해야 합니다
PHP 세션 교착 상태를 해결하는 방법_PHP 튜토리얼
php는 MySQL에 데이터를 삽입할 때 잘못된 문자열 값: 'xF0x9Fx92x8BTi...' 오류 문제를 해결합니다.
위 내용은 PHP 쿼리 데이터베이스로 인한 메모리 부족 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!