Slow query 를 잡는 것은 아주 필수적이고 당연한 일인데,
이게 db 서버도 많아지고, web 서버도 많아지면,
각 query 가 어디서 나오고 누가 만들었는지 알기도 쉽지 않습니다.

따라서  query 안에 주석을 넣어주면 참 좋은데,
이미 프로그램이 모두 개발된 상태에서 일일히 넣어주기는 어렵습니다. (라고 쓰고 귀찮다 라고 읽습니다) 

외국 사례를 좀 찾아보면 php mysql 드라이버를 좀 고쳐서 로그를 남기기도 하던데,
웹 서버 로그를 뒤지기도 힘든 일이잖아요. 

그래서 아무튼 자동 주석함수를 만들었습니다. db query 를 위해
라이브러리를 쓰신다면, 거기 적어주시면 좋고, 아니면 php.ini 에
auto_prepend_file 로 다음의 파일을 모든 php 에 자동으로 include 해버려도 좋습니다.

( 동작을 위해서는 apd 모듈이 필요합니다)

<?
/*
* 2012.2.17. 최희철 ( ironyjk@.... )
* Slow query 추적을 위한 mysql_query 함수 override 및 주석 추가
*/
 


if (!function_exists("mysql_commented_query"))
{
       function mysql_commented_query($query,$dblink = null, $writer="")
       {
   $comment = php_uname('n');
   $backtrace = debug_backtrace();

   if (!empty($backtrace))
$comment .= " " . $backtrace[1]['file'] . " (" . filemtime($backtrace[1]['file']) .   ") : " . $backtrace[1]['line'] ;

   if (!empty($writer))
       $comment .= " " . $writer;

   $query = "/* " . $comment . " */ " . $query ;  // 호스트명, 파일명, line no, 작성자 순으로 query 에 주석 추가

return is_null($dblink)? mysql_old_query ( $query ) : mysql_old_query ( $query , $dblink);

       }
}

if ( !function_exists("mysql_old_query") )
{
       rename_function('mysql_query','mysql_old_query');
}       


if (!function_exists("mysql_query"))
{

       override_function('mysql_query','$query,$dblink=null,$writer=""','return mysql_commented_query($query,$dblink,$writer);');
} ?> 

 
위의 작성시에는 엠모사 모사장님과 모사의 모본부장님 두분이 도움을 주셨다는 걸 밝혀둡니다. (읽으실리는 없겠지만.)

그럼.  

(stackoverflow 에 댓글로 달아두었어야 하는 내용일까요. 아무튼 stackoverflow 도움을 참 많이 받는데, 기여는...)
 
p.s rename_function 의 경우에는 한번 적용후 계속 적용되어서 업데이트 했습니다. 
신고
Creative Commons License
Creative Commons License
Posted by heechul

티스토리 툴바