g5_login 테이블 함수 질문입니다.
본문
function run()
{
global $config, $g5, $member;
// 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql);
if ($tmp_row['cnt']) {
$tmp_sql = " update {$g5['login_table']} set mb_id = '{$member['mb_id']}', lo_datetime = '".G5_TIME_YMDHIS."', lo_location = '{$g5['lo_location']}', lo_url = '{$g5['lo_url']}' where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
sql_query($tmp_sql, FALSE);
} else {
$tmp_sql = " insert into {$g5['login_table']} ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '{$_SERVER['REMOTE_ADDR']}', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$g5['lo_location']}', '{$g5['lo_url']}' ) ";
sql_query($tmp_sql, FALSE);
// 시간이 지난 접속은 삭제한다
sql_query(" delete from {$g5['login_table']} where lo_datetime < '".date("Y-m-d H:i:s", G5_SERVER_TIME - (60 * $config['cf_login_minutes']))."' ");
// 부담(overhead)이 있다면 테이블 최적화
//$row = sql_fetch(" SHOW TABLE STATUS FROM ariabackup LIKE {$g5['login_table']} ");
//if ($row['Data_free'] > 0) sql_query(" OPTIMIZE TABLE {$g5['login_table']} ");
}
안녕하세요. php를 본격적으로 실무에서 사용하고 하는 초보 개발자입니다.
그누보드(+영카트)는 기본적으로 사용자 로그인 정보를 g5_login 테이블을 사용하고
html_end -> run() 을 통해서 쿼리가 실행되는 형태고
그걸 접속할때마다 추가 및 삭제(1시간 경과시)하는 형태인 것 같더군요.
1. 그런데 이 부분 (delete from g5_login < where lo_datetime) 에서
슬로우 쿼리가 잡힌다고 호스팅 업체에서 연락이 왔습니다;
로그 파일을 보니 쿼리 실행 타임은 대략 5~10초 정도나 걸리더군요;;
사용 업체가 대규모 쇼핑몰이고 실시간 접속자수가 수천명에 육박해서 그런 문제인지...
이외에도 다른 몇몇 그누보드에 내장된 쿼리들도 잡히는데
일단 로그인 부분부터 페이지 접속마다 실행되는 이 파일에서 조정이 필요할 거 같아서
질문드려봅니다.
2. 그리고 주석처리된 코드가 2줄 더 있던데
이 테이블 최적화 코드를 그냥 풀고 실행해도 되는건가요?
조그만 서버에서 임상으로 사용했으나 작은 서버에서 해보는건 애초에 티가 나질 않아서...
사실 이 두 줄의 역할을 아직도 잘 모르겠습니다;;
table status의 data_free를 0으로 초기화 해준다 라는 부분만 아는건데 이게 큰 차이가 있는건지
아니면 이것마저도 제가 잘못알고 있는건지..
혹시 제가 더 언급해야 할 정보가 더 필요하다면 첨언해주시면 감사하겠습니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.