주 함수에서 MySQL 데이터베이스 작업을 수행하는 여러 함수를 호출하는 Perl 스크립트가 있습니다. 그러나 전체 스크립트가 너무 느리고 로그 메시지를 인쇄하여 컨트롤을 주 기능으로 되돌리기 전에 마치 "대기 중"인 것처럼 보였습니다.Perl 함수는 main 함수로 1을 반환하기 전에 "대기"합니다.
MySQL의 processlist를 보면 NULL 정보가 들어간 Sleep 프로세스가 나타납니다. Perl 스크립트 자체가 명령을 수행했지만 Perl 함수가 메인 함수로 돌아 가지 않습니다. , 모든 것이 성공적으로 완료되었습니다.
예 : log2
와 log3
사이에,이 시간까지의 MySQL의 PROCESSLIST의 수면 과정이
use IO::Handle;
STDERR->autoflush(1);
STDOUT->autoflush(1);
sub SomeFunction{
// writing into MySQL database
print localtime()."log2";
return 1;
}
print localtime()."log1";
&SomeFunction();
print localtime()."log3";
지연입니다.
이 문제의 원인은 무엇이며 어떻게이 스크립트의 성능을 향상시킬 수 있습니까?
이러한 인쇄 문이 버퍼링되면 실제로 그 내용을 결론 지을 수 없습니다. 메시지뿐만 아니라 정확한 시간을 인쇄하고 자동 플러시를 켭니다. – Mat
죄송합니다. 물론 메시지에 연결되어있는 localtime()을 사용하는 것을 잊었습니다. 다음 코드는 입니다.'IO :: Handle; STDERR-> autoflush (1); – martoncsukas
이 동작을 실제로 보여주는 최소한의 실제 예제를 보여줄 수 있습니까? 지침은 [SSCCE.org] (http://sscce.org/)를 참조하십시오. 현재 코드는 컴파일되어서도 컴파일되지 않습니다 ('_SomeFunction' vs'SomeFunction',''log2'',''log3;''닫는 따옴표가 없습니다). – amon