Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Настройка и Изменение (http://forum.mynuke.ru/forumdisplay.php?f=11)
-   -   очень много запросов к бд (http://forum.mynuke.ru/showthread.php?t=1115)

Andruha 13.01.2006 03:10

очень много запросов к бд
 
Здравствуйте
У меня большая проблема, на днях решил поставить счетчик запросов к БД и был очень сильно растроен.
На главной странице около 100 запросов к БД, а в самом каталоге файлов местами до 300 :cry: :cry: (каталог не родной, Enhanced Downloads Module 2.0 )
Это ужас просто. Неужели данный модуль делали с такими ошибками. Но при том скорость запросов за 0.052498 с.
Хочу узнать как устронить данную проблему ? Где надо править код.

П.С.
Прошу не советовать перейти на другую систему, на тот же Slaed т.к. жалко потраченных сил.

Soniks 13.01.2006 03:35

Andruha начните с определения какие функции в php-nuke нужны, а какие нет, т.к. в php-nuke есть оочень ного не нужных функций, которые и кушают запросы, например, рефералы, статистика.

kor 13.01.2006 09:18

Andruha day sayt dlynut?

Andruha 13.01.2006 10:02

Цитата: Сообщение от Soniks
Andruha начните с определения какие функции в php-nuke нужны, а какие нет, т.к. в php-nuke есть оочень ного не нужных функций, которые и кушают запросы, например, рефералы, статистика.

Лишнее убрал уже давно.
Цитата Andruha day sayt dlynut?

http://modernmobile.net

kor 13.01.2006 16:56

у тебя 81 запрос это нормально!!! снижай еще меньше

Andruha 13.01.2006 18:38

где можно найти материал по данной теме ?
сам не разберусь.

Andruha 13.01.2006 20:40

Вот к примеру простой блок для вывода последнех статей от Small Pages и только он делает 5 запросов к базе:
Код:
<?php if (eregi("block-Top10_Small_Pages.php",$_SERVER['PHP_SELF'])) { Header("Location: index.php"); die(); } global $prefix, $db; $a = 1; $result = $db->sql_query("SELECT pid, title, UNIX_TIMESTAMP(date) as postdate, counter FROM ".$prefix."_smallpages WHERE active=1 ORDER BY pid DESC LIMIT 0,5"); while ($row = $db->sql_fetchrow($result)) { $pid = intval($row['pid']); $title = stripslashes($row['title']); $p_date = date("d/m/Y", $row["postdate"]); $kol_vo = $db->sql_numrows($db->sql_query("SELECT tid FROM ".$prefix."_smallpages_comments WHERE pid='$pid'")); $content .= "<strong><big>&middot;</big></strong>&nbsp;<a href=\"modules.php?name=Pages&go=page&pid=$pid\"><b>$title</b></a>&nbsp;<em>$p_date</em><br> "; $a++; } ?>

Master 14.01.2006 11:27

Andruha Можно попробывать заменить несколько функций в файле mainfile большого снижения нагрузки не обещаю но всеже!

Открываем mainfile.php

Находим функцию:

PHP код:
 function is_admin($admin) { 


Заменяем на:
PHP код:
 function is_admin($admin) { 
    global 
$prefix$db
    static 
$adminSave
    if (isset(
$adminSave)) return ($adminSave);
    if(!
is_array($admin)) { 
        
$admin base64_decode($admin); 
        
$admin explode(":"$admin); 
    } 
    
$aid $admin[0]; 
    
$pwd $admin[1]; 
    if (
$aid != "" AND $pwd != "") { 
        
$aid trim($aid); 
        
$sql "SELECT pwd FROM ".$prefix."_authors WHERE aid='$aid'"
        
$result $db->sql_query($sql); 
        
$row $db->sql_fetchrow($result); 
        
$pass $row['pwd']; 
        if (
$pass == $pwd && $pass != "") { 
            return 
$adminSave 1
        } 
    } 
    return 
$adminSave 0



Далее находим:
PHP код:
 function is_user($user) { 


Заменяем на:
PHP код:
 function is_user($user) { 
    global 
$db$user_prefix
    static 
$userSave
    if (isset(
$userSave)) return ($userSave); 
    if (!
is_array($user)) { 
        
$user base64_decode($user); 
        
$user explode(":"$user); 
    } 
    
$uid $user[0]; 
    
$pwd $user[2]; 
    
$uid intval($uid); 
    if (
$uid != "" AND $pwd != "") { 
        
$sql "SELECT user_password FROM ".$user_prefix."_users WHERE user_id='$uid'"
        
$result $db->sql_query($sql); 
        
$row $db->sql_fetchrow($result); 
        
$pass $row['user_password']; 
        if (
$pass == $pwd && $pass != "") { 
            return 
$userSave 1
        } 
    } 
    return 
$userSave 0



Далее находим:
PHP код:
 function blocks($side) { 


Заменяем на:
PHP код:
 function blocks($side) {
    global 
$storynum$prefix$multilingual$currentlang$db$admin$user;
    static 
$barr;
    if (
$multilingual == 1) {
            
$querylang "AND (blanguage='$currentlang' OR blanguage='')";
    } else {
            
$querylang "";
    }
    if (
strtolower($side[0]) == "l") {
                
$pos "l";
    } elseif (
strtolower($side[0]) == "r") {
                
$pos "r";
    }  elseif (
strtolower($side[0]) == "c") {
                
$pos "c";
    } elseif  (
strtolower($side[0]) == "d") {
                
$pos "d";
    }
    
$side $pos;
    if (!isset(
$barr)){
    
$sql "SELECT bid, bkey, title, content, url, blockfile, view, expire, action, subscription, bposition FROM ".$prefix."_blocks WHERE active='1' $querylang ORDER BY weight ASC";
    
$result $db->sql_query($sql);
    while(list(
$bid$bkey$title$content$url$blockfile$view$expire$action$subscription$bposition) = $db->sql_fetchrow($result)) {
        
$bid intval($bid);
        
$view intval($view);
        
$barr[]= array($bid$bkey$title$content$url$blockfile$view$expire$action$subscription$bposition);
        }
        }
      for (
$i=0$i<sizeof($barr); $i++){
      list (
$bid$bkey$title$content$url$blockfile$view$expire$action$subscription$bposition)=$barr[$i];
        if (
$bposition==$side){
        
$now time();
        if (
$sub == OR ($sub == AND !paid())) {
                    if (
$expire != AND $expire <= $now) {
                        if (
$action == "d") {
                            
$db->sql_query("UPDATE ".$prefix."_blocks SET active='0', expire='0' WHERE bid='$bid'");
                            return;
                        } elseif (
$action == "r") {
                            
$db->sql_query("DELETE FROM ".$prefix."_blocks WHERE bid='$bid'");
                            return;
                        }
                    }
                            if (
$view == 0) {
                                        
render_blocks($side$blockfile$title$content$bid$url);
                            } elseif (
$view == AND is_user($user) || is_admin($admin)) {
                                        
render_blocks($side$blockfile$title$content$bid$url);
                            } elseif (
$view == AND is_admin($admin)) {
                                        
render_blocks($side$blockfile$title$content$bid$url);
                            } elseif (
$view == AND !is_user($user) || is_admin($admin)) {
                                        
render_blocks($side$blockfile$title$content$bid$url);
                             }
                        }
                }
    }



Вот вобщем это минимум что можно зделать! :wink:

kor 14.01.2006 16:39

Master это тока для него или все могут сделать

Andruha 14.01.2006 18:58

Master спасибо, на несколько запросов стало меньше.
Только вот это минимум, что можно сделать :(

Master 14.01.2006 20:12

Andruha Всем можно! но тестировал только на нюке 7.6 на других не знаю как будет пробуйте если все работает значит ок :)

Andruha я тебе еще в личные сообщения написал кое что посмотри потом также в личке отпишись мне

kor 15.01.2006 00:22

у меня после изменениях в mainfile.php на главной странице стало на 3 запроса меньше а под пользователем и под админкой стало с 188 упало до 71 запрос!! спасибо master

Alex76 11.11.2007 10:57

проверил на версии 8.0 работает прекрассно слов нет со 133 запросов упало до 76 огромное пасибо мастеру


Часовой пояс GMT +4, время: 20:55.

Copyright © 2005 by Soniks