메뉴 건너뛰기

Dev tips

DataBase MySQL에서 Sleep 프로세스 죽이기

taknim 2008.12.11 20:44 조회 수 : 11736 추천:2830

http://blog.naver.com/osono/100001156484게시판에 보니 MySQL에서 sleep 프로세스때문에 고민하시는 분들이 꽤 있더군요.
저도 같은 고민을 하다가 Perl 로 간단하게 스크립트 하나 만들었습니다.
cron 으로 한 30분 간격으로 등록해 놓고 sleep 프로세스를 kill 하는 스크립트입니다.
저같은 경우는 sleep 만 몇백개가 생겨서 골치가 아팠는데 이렇게 하니 어느정도 해결 되네요^^
삭제 기준은 sleep 이고 time 이 500 이상인 프로세스입니다.
각자 맞춰서 수정하시면 될것같네요..
참고하시고 혹시 문제점이 있으면 지적해주세요.


#!/usr/bin/perl
###############################################################################
# MySQL 에서 Sleep 프로세스 죽이기
# 2003.02 by Oh Jung Joon
###############################################################################

###############################################################################
# Variables
###############################################################################
use DBI;

$hostname = "localhost";
$database = "mysql";  
$mysql_id = "root";
$mysql_pw = "password";

$dsn = "DBI:mysql:database=$database;host=$hostname";
###############################################################################

$dbh = DBI->connect($dsn,$mysql_id,$mysql_pw)
  or die "Unable to connect to contacts Database: $dbh->errstr\n";

$query="show processlist";
$cursor=$dbh->prepare($query);
$cursor->execute;

while (@field = $cursor->fetchrow)
{
  ($id,$user,$host,$db,$command,$time,$state,$info)=@field;
  print "[$id | $user | $host | $db | $command | $time | $state | $info] ";
  if ( ($command eq 'Sleep') && ($time > 500) )
  {
   $query2="kill $id";
   $dbh->do($query2);
   print "  == > Killed";
  }
  print "\n";
}
$cursor->finish;
$dbh->disconnect;
exit;






  
OJJ cron으로 등록하시려면 print 부분을 지우세요^^ 02/03 11:49:49  
  
박사빈 이거, php버전으루는 힘드나여? 솔직히 제가 perl을 전혀 몰라서여..(부끄럽사와여~) cron에 등록할때는 print " == > Killed";
이부분만 지우면 되나여?
근데여? 왜? sleep프로세서가 죽지 않는 현상이 발생하나여? 이게 죽지 않으면 계속 메모리를 잡아먹게 되는거져? 그래서, 계속 살아있으면 안좋은거져? 02/03 15:21:16  
  
지나가다 위소스 펄 모듈 Mysql 관련 DBI 설치 하시고 사용하세요..

사빈님 php 다루면 펄도 그리 어렵지 않아요 씨 못지 않은 방대한 라이브러리가 좀 고달프지만..  02/03 15:55:07  
  
꽁수하나 편법이라고 해야하나 아님 꽁수라고 해야하나.....
php로 하시려면 우선 php로 소스를 만드신후
lynx를 이용하셔서 cron에 등록을 하시면
perl로 만들어서 cron에 등록하신거와 동일하게
사용하실수 있습니다... ^^ 02/03 16:40:28  
  
sh. php도 쉘스크립트로 사용할수있습니다.
lynx를 사용하지 않아도 말이죠

#!/path/to/php/php -q
<?
php code.....
?>
exec함수나 ``을 이용해 명령을 실행하면됩니다. 02/03 17:27:16  
  
OJJ 제가 서버쪽 스크립트는 주로 perl 로 하다 보니 만들자마자 그냥 올려버렸네요...php로 바꿔서 올릴껄^^
근데 소스가 간단하니 php로 만들어서 쓰시면 될것 같습니다. 02/03 18:02:33  
  
전영규 mysql_pconnect 쓰신다면, mysql_pconnect 대신 mysql_connect 를 사용하시면 효험(?)을 볼 수 있습니다... 02/03 23:14:10  
  
헐랭이 쉘로도 가능합니다.
02/04 4:08:10  
  
쪼리 safe_mysqld 실행시에 -O wait_timeout=7 넣어주는 것만으로는 부족한가요? 이렇게 해도 sleep 이 죽지 않는 경우가 발생하나요?? 02/04 8:45:26  
  
OJJ 엇..그런 옵션이 있는줄 몰랐네요. 그렇게 하면 sleep이 7초까지만 생기나요 ? 02/04 18:30:29  
  
쪼리 네.. RPM 설치의 경우 /etc/init.d/mysql 파일에 소스 설치시에 safe_mysqld 뒤에 다음과 같이 옵션을 줄수 있습니다. 다음은 rpm 으로 설치했을때 입니다.
$bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file -O wait_timeout=5
이런식으로 넣어주면 되죠.. 컴파일 할때 euc-kr 을 디폴트로 설정하지 않은경우에도 여기 옵션에 default-charset 으로 지정할수도 있습니다. 02/04 18:57:08  
  
쪼리 /etc/init.d/mysql 파일에 119번째 줄 정도에 있을꺼에요 뒤에다가 -O wait_timeout=5 & 이런식으로 해주세요..
02/04 18:58:18  
  
쪼리 물론 my.cnf 파일에도 옵션을 설정할수 있습니다.. -_-;; 잡담이었음 02/04 18:59:47  

[출처] MySQL에서 Sleep 프로세스 죽이기|작성자 오손
번호 제목 글쓴이 날짜 조회 수
294 윈도우 리부팅.끄기.잠금 아이콘 만들기 [1] taknim 2009.01.08 9622
293 Implement Oracle's rownum using mysql taknim 2009.01.08 10794
292 오라클의 rownum 처럼 쓸수 있는 mysql 명령어가 있나요 taknim 2009.01.08 9802
291 PHP5 에서 mysql password, old_password 구현 taknim 2009.01.07 12893
290 Include 파일은 부모 디렉터리를 표시하기 위해 '..'를 사용할 수 없습니다. 와 같은 오류 발생 taknim 2009.01.06 9909
289 MySQL CSV 파일 import taknim 2008.12.30 11762
288 USB 메모리의 파일 시스템 FAT32를 NTFS로 변환하는 방법 taknim 2008.12.23 10207
287 윈도우 XP 한 폴더에 저장할 수 있는 파일의 최대 갯수? taknim 2008.12.23 12234
286 [출처] [TIP] BEEP SOUND 에 따른 에러확인하기....... taknim 2008.12.22 8169
285 윈도우XP 속도를 빠르게 하는 Tip 총정리(21개) taknim 2008.12.21 7365
» MySQL에서 Sleep 프로세스 죽이기 taknim 2008.12.11 11736
283 [Shell]Mysql processlist 지켜 보기 [1] taknim 2008.12.11 9893
282 dtd 체크하는 스크립트 taknim 2008.12.06 10681
281 echo 와 print / include 와 require taknim 2008.12.03 10681
280 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16251
279 PHP 새로 컴파일 없이 추가 모듈 설치 taknim 2008.11.27 11964
278 [mysql] 슈퍼 update taknim 2008.11.25 9374
277 오라클에서 varchar2(4000) 데이타 넣기 taknim 2008.11.25 9638
276 [오라클] 슈퍼 updateoracle taknim 2008.11.25 9920
275 보안을 위한 php.ini 설정 [1] taknim 2008.11.12 9691