PHP 쿼리 데이터베이스로 인한 메모리 부족 문제 해결

*文
풀어 주다: 2023-03-18 12:24:01
원래의
2031명이 탐색했습니다.

데이터베이스 쿼리로 인한 메모리 부족 문제를 해결하는 방법은 무엇입니까? 이번 글에서는 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 튜토리얼

php는 MySQL에 데이터를 삽입할 때 잘못된 문자열 값: 'xF0x9Fx92x8BTi...' 오류 문제를 해결합니다.

위 내용은 PHP 쿼리 데이터베이스로 인한 메모리 부족 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿