PHP를 이용하여 MYSQL Sleep 프로세스 죽이기
페이지 정보
작성자 MintState 댓글 0건 조회 17,250회 작성일 11-01-18 22:10본문
PHP에서 자동으로 MYSQL의 디비를 닫아(Closed)주기 때문에 굳이 mysql_close($dbconn); 를 쓸 필요는 없습니다.
그러나 MYSQL의 Sleep 프로레스가 너무 많이 늘어나는 것을 볼수 있습니다.
이것은 MYSQL의 wait timeout의 시간을 너무 많이 주어서 생기는 문제입니다.
서버마다 wait timeout값을 적정값을 설정해야 합니다.
[MySQL] time out(wait_timeout) 계산과 설정 - 여기를 참고하세요
my.cnf 파일을 수정하면 됩니다.
my.cnf 설정파일 - 여기를 참고하세요
램이 2기가인경우 아래 정도입니다.
max_connections = 200
wait_timeout = 30
max_connections 의 기본값은 100 이고 wait_timeout 의 기본값은 28,800 입니다.
다음과 같이 safe_mysqld을 실행시킬때 wait_timeout을 지정하는 방법도 있습니다.
safe_mysqld -O wait_timeout=30
또한 아래와 값이 PHP파일을 만들고 cron으로 주기적으로 돌려도 될것 같습니다.
참고로 어느분이 perl로 짜 놓으신 것입니다.
그러나 MYSQL의 Sleep 프로레스가 너무 많이 늘어나는 것을 볼수 있습니다.
이것은 MYSQL의 wait timeout의 시간을 너무 많이 주어서 생기는 문제입니다.
서버마다 wait timeout값을 적정값을 설정해야 합니다.
[MySQL] time out(wait_timeout) 계산과 설정 - 여기를 참고하세요
my.cnf 파일을 수정하면 됩니다.
my.cnf 설정파일 - 여기를 참고하세요
램이 2기가인경우 아래 정도입니다.
max_connections = 200
wait_timeout = 30
max_connections 의 기본값은 100 이고 wait_timeout 의 기본값은 28,800 입니다.
다음과 같이 safe_mysqld을 실행시킬때 wait_timeout을 지정하는 방법도 있습니다.
safe_mysqld -O wait_timeout=30
또한 아래와 값이 PHP파일을 만들고 cron으로 주기적으로 돌려도 될것 같습니다.
<? define('MAX_SLEEP_TIME', 120); $dbconn = @mysql_connect($dbConfig['host'],$dbConfig['user'],$dbConfig['pass']); $result = mysql_list_processes($dbconn); //mysql_list_processes 대신 아래와 같이 써도 됩니다. //$result = mysql_query("SHOW PROCESSLIST", $connect); while ($row = mysql_fetch_assoc($result)){ printf("%s %s %s %s %s\n<br />", $row["Id"], $row["Host"], $row["db"], $row["Command"], $row["Time"]); if ($row["Command"] == "Sleep" && $row["Time"] > MAX_SLEEP_TIME) { mysql_query("KILL " . $row["Id"], $dbconn); echo "KILL ID : ".$row["Id"]."<br />"; } } mysql_free_result($result); mysql_close($dbconn); ?>
참고로 어느분이 perl로 짜 놓으신 것입니다.
#!/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;
|
댓글목록
등록된 댓글이 없습니다.