[튜닝] db접속횟수 줄이기 (2011/08/24수정) > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[튜닝] db접속횟수 줄이기 (2011/08/24수정) 정보

[튜닝] db접속횟수 줄이기 (2011/08/24수정)

첨부파일

adm.upgrade2.euc-kr.zip (615byte) 91회 다운로드 2011-08-22 08:12:03
adm.upgrade2.utf-8.zip (615byte) 126회 다운로드 2011-08-22 08:12:03

본문

접속자가 증가하다 보면 튜닝을 하게되는데.. 튜닝을 하는데 있어 db컨넥을 줄이고자 노력합니다.
기본 설정 (g4_config), 게시판 설정 (g4_board), 그룹 설정 (g4_group) 을 파일로 만들어 컨넥을 줄일수도 있습니다.

동접자는 10분간 현재접속자 기준 최대 1500명, 일일 방문자 3만명 남짓한 사이트에서 테스트 해본결과
서버가 해외에 있어 국내사정보다 못하지만, db접속오류가 현저히 낮아졌으며, 사이트 속도도 나름 쾌적해 졌습니다.

먼저, 첨부파일을 다운받아 /adm/upgrade2.php 경로로 업로드후 실행하신 후 아래 방법대로 소스수정을 해주세요.


기본설정 g4_config

adm/config_form_update.php 121줄 부근
변경전
//sql_query(" OPTIMIZE TABLE `$g4[config_table]` ");

goto_url("./config_form.php", false);
변경후
//sql_query(" OPTIMIZE TABLE `$g4[config_table]` ");

$file = "$g4[path]/data/config/default.php";
$f = fopen($file, "w");

$row = sql_fetch(" select * from $g4[config_table] ");

fwrite($f, "<?\n");
foreach($row as $key => $value) {
    $value = str_replace("\"", "\\\"", $value);
    fwrite($f, "\$config['{$key}'] = \"{$value}\";\n");
}
fwrite($f, "?>");

fclose($f);
@chmod($file, 0606);

goto_url("./config_form.php", false);

common.php 294줄 부근
변경전
$config = sql_fetch(" select * from $g4[config_table] ");
변경후
include_once("$g4[path]/data/config/default.php");

if(!$config['cf_admin'])
    $config = sql_fetch(" select * from $g4[config_table] ");


그룹설정 g4_group

adm/boardgroup_form_update.php 64줄부근
변경전
else
    alert("제대로 된 값이 넘어오지 않았습니다.");

goto_url("./boardgroup_form.php?w=u&gr_id=$gr_id&$qstr");
변경후
else
    alert("제대로 된 값이 넘어오지 않았습니다.");

$file = "$g4[path]/data/config/group_{$_POST[gr_id]}.php";
$f = fopen($file, "w");

$row = sql_fetch(" select * from $g4[group_table] where gr_id = '$_POST[gr_id]' ");

fwrite($f, "<?\n");
foreach($row as $key => $value) {
    $value = str_replace("\"", "\\\"", $value);
    fwrite($f, "\$group['{$key}'] = \"{$value}\";\n");
}
fwrite($f, "?>");

fclose($f);
@chmod($file, 0606);

goto_url("./boardgroup_form.php?w=u&gr_id=$gr_id&$qstr");

adm/boardgroup_list_update.php 23줄 부근
변경전
    sql_query($sql);
}
변경후
    sql_query($sql);

    $file = "$g4[path]/data/config/group_{$_POST[gr_id][$k]}.php";
    $f = fopen($file, "w");

    $row = sql_fetch(" select * from $g4[group_table] where gr_id = '{$_POST[gr_id][$k]}' ");

    fwrite($f, "<?\n");
    foreach($row as $key => $value) {
        $value = str_replace("\"", "\\\"", $value);
        fwrite($f, "\$group['{$key}'] = \"{$value}\";\n");
    }
    fwrite($f, "?>");

    fclose($f);
    @chmod($file, 0606);

}

common.php 462줄 부근
변경전
if (isset($gr_id))
    $group = sql_fetch(" select * from {$g4['group_table']} where gr_id = '$gr_id' ");
변경후
if (isset($gr_id)) {

    include_once("$g4[path]/data/config/group_{$gr_id}.php");

    if(!$group['gr_id'])
        $group = sql_fetch(" select * from {$g4['group_table']} where gr_id = '$gr_id' ");
}


게시판설정 g4_board

adm/board_form_update.php 309줄 부근
변경전
if ($s) {
        $sql = " update $g4[board_table]
                    set bo_table = bo_table
                        {$s}
                  where gr_id = '$gr_id' ";
        sql_query($sql);
}
변경후
if ($s) {
    $sql = " update $g4[board_table]
                set bo_table = bo_table
                    {$s}
              where gr_id = '$gr_id' ";
    sql_query($sql);

    $que = sql_query(" select * from $g4[board_table] where gr_id = '$gr_id' ");
    for($i=0; $row=sql_fetch_array($que); $i++) {

        $file = "$g4[path]/data/config/board_{$row[bo_table]}.php";
        $f = fopen($file, "w");

        fwrite($f, "<?\n");
        foreach($row as $key => $value) {
            $value = str_replace("\"", "\\\"", $value);
            fwrite($f, "\$board['{$key}'] = \"{$value}\";\n");
        }
        fwrite($f, "?>");

        fclose($f);
        @chmod($file, 0606);
    }

} else {

    $file = "$g4[path]/data/config/board_{$bo_table}.php";
    $f = fopen($file, "w");

    $row = sql_fetch(" select * from $g4[board_table] where bo_table = '$bo_table' ");

    fwrite($f, "<?\n");
    foreach($row as $key => $value) {
        $value = str_replace("\"", "\\\"", $value);
        fwrite($f, "\$board['{$key}'] = \"{$value}\";\n");
    }
    fwrite($f, "?>");

    fclose($f);
    @chmod($file, 0606);

}

adm/board_list_update.php 39줄 부근
변경전
    sql_query($sql);
}
변경후
    sql_query($sql);

    $file = "$g4[path]/data/config/board_{$_POST['board_table'][$k]}.php";
    $f = fopen($file, "w");

    $row = sql_fetch(" select * from $g4[board_table] where bo_table = '{$_POST['board_table'][$k]}' ");

    fwrite($f, "<?\n");
    foreach($row as $key => $value) {
        $value = str_replace("\"", "\\\"", $value);
        fwrite($f, "\$board['{$key}'] = \"{$value}\";\n");
    }
    fwrite($f, "?>");

    fclose($f);
    @chmod($file, 0606);

}

bbs/write_update.php 618줄 부근
변경전
@include_once("$board_skin_path/write_update.tail.skin.php");

if ($g4[https_url])
변경후
@include_once("$board_skin_path/write_update.tail.skin.php");


$file = "$g4[path]/data/config/board_{$bo_table}.php";
$f = fopen($file, "w");

$row = sql_fetch(" select * from $g4[board_table] where bo_table = '$bo_table' ");

fwrite($f, "<?\n");
foreach($row as $key => $value) {
    $value = str_replace("\"", "\\\"", $value);
    fwrite($f, "\$board['{$key}'] = \"{$value}\";\n");
}
fwrite($f, "?>");

fclose($f);
@chmod($file, 0606);

if ($g4[https_url])



common.php 452줄 부근
변경전
    $board = sql_fetch(" select * from {$g4['board_table']} where bo_table = '$bo_table' ");
변경후
    include_once("$g4[path]/data/config/board_{$bo_table}.php");

    if(!$board['bo_table'])
        $board = sql_fetch(" select * from {$g4['board_table']} where bo_table = '$bo_table' ");

추천
7

댓글 23개

고맙습니다~ 잘 적용은 했습니다....만
관리자화면에서 모든 그룹을 수정으로 들어가 확인해야 하고
모든 게시판마다 다 한번씩 들어가 확인 버튼 한번씩 눌러줘야 하는 군요..흑 ㅠㅠ
새벽에 50개가 넘는 게시판마다 들어갔다 나왔습니다..ㅎ

빨라진 성능을 기대해봅니다..^^
하나만 더 확인 부탁 드립니다. 메인 카운터를 노출해 보면 카운터가 정지 상태로 있습니다. 관리자모드의 접속자(합계)랑 메인 카운터의 숫자가 일치하지 않는 현상이 보여 집니다. 감사합니다.

기본 게시판으로 공지 테스트를 해 보았습니다. 마찬가지 입니다.
한번 더 확인 부탁 드립니다.
$file = "$g4[path]/config/board_{$bo_table}.php";

이 부분 경로가 맞는지 확인해보세요 data 에 config 폴더가 있다면

$file = "$g4[path]/data/config/board_{$bo_table}.php";

이렇게 입력해주시면 정상적으로 공지등록되는걸 확인하였습니다.
board_copy.php 에 연계된 내용
그룹삭제시 구룹파일 삭제 구문
게시판 삭제시 게시판 파일 삭제 구문이 없어서 살짝 아쉽네요
추천
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT