2010-01-19 7 views
0

하나의 MySQL DB의 테이블에서 행을 읽고, 데이터를 변환하고, 다른 MySQL DB의 두 번째 테이블에 행을 추가하는 Zend/PHP 스크립트가 있습니다.MySQL이 점진적으로 붕괴 ...?

스크립트를 디버깅하는 동안 오류가 발생하기 전에 점점 더 많이 줄어들고 있습니다. 지금은 60 개의 행을 추가 한 후 종료됩니다. 처음에는 300+ 행이 추가되었습니다. 원본 데이터가 변경되지 않았습니다.

나는 모든 온스 코드의 블록을 잡아 봤지만 일반적인 "깨진"스타일 오류가 발생하지는 않는다. 뭔가 잘못된 젠드 프레임 워크에서 오류를 던질 가능성이있다. 잡히지 만 추가되는 행과의 관계를 이해하지 못합니다.

문자 그대로 83 행을 추가하는 것에서 80에서 74에서 63에서 60 ... 코드를 변경하지 않았습니다. 시도 사이에 대상 데이터베이스를 비 웠습니다. 내가 최적화하고 데이터베이스를 플러시했습니다, 그리고 MySQL을 다시 시작했습니다, 나는 전체 서버를 다시 시작했습니다 ... 그리고 그것은 같은 패턴으로 스틱.

내가 보거나 시도 할 수있는 모든 야생 추측은 무엇입니까?

+0

쓰기를 비활성화하고 읽기 기능 만 테스트 할 수 있습니까? – Matthew

+0

그렇게했는데 데이터베이스에 쓰려고하지 않으면 잘 돌아갑니다. –

+0

그런 경우 실제로 대상 데이터베이스를 비우는 것이 긍정적입니까? –

답변

0

MySQL에서 문제가 메모리 누출로 밝혀졌습니다. 21 세기 버전으로 업그레이드하도록 설득 한 후 문제가 사라졌습니다. 이렇게하기 전에 메모리 누수를 확인했습니다.

0

디스크 (또는 고려하지 않는 다른 컴퓨터)에 어딘가에 데이터가 누적되어야합니다. 그렇지 않으면 다시 시작될 때 속도 저하가 나타나지 않습니다. 나는 메모리 누수가 VM을 먹어 치우고 점차적으로 기계를 과도한 스와핑으로 강요하고 느려지는 것들을 추측했지만, 다시 말하면 다시 시작하면 지속되지 않아야합니다.

펜티엄 4 이상의 CPU에서 냉각이 멈추었을 때 CPU 자체가 점차 가열되어 응답 속도가 느려지는 등 일부 펑키 한 HW 오류가 발생하지 않는다고 가정하면 스크립트를 적게 할 수 있습니다. PHP에서 구성된 스크립트 실행 시간 제한에 부딪치기 전까지는 작업량이 적습니다.