18 Ноября 2017, 04:03:26

Автор Тема: Количество запросов к БД. Нагрузка на сервер.  (Прочитано 5928 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Кровавый

  • Гость
Получил задание от администрации школы переделать сайт.
Уже, как-бы, начал. Первый этап почти завершен. Второй долго не займёт. А вот третий - "Электронный журнал"...

Так подумал, вещь будет громоздкая... Сколько примерно запросов к БД можно воткнуть в скрипт, чтобы не сильно нагружать сервер?

mishkamsn

  • Гость
Зависит от мощности сервера. Чем меньше запросов тем лучьше.
« Последнее редактирование: 22 Июня 2010, 21:02:19 от mishkamsn »

Оффлайн Demix

  • Отец отцов и матерей
  • Старожил
  • ****
  • Сообщений: 271
  • Репутация: 22
  • Пол: Мужской
    • intObservatory.ru
Так подумал, вещь будет громоздкая... Сколько примерно запросов к БД можно воткнуть в скрипт, чтобы не сильно нагружать сервер?
У меня при 20 запросах всё впорядке, я думаю и при 30 запросах всё будет впорядке. Конечно лучше снижать запросы и использовать кэширование страниц - очень полезная штука.

На мой взгляд, самый лучший вариант уложиться в лимит до 20 запросов.
« Последнее редактирование: 23 Июня 2010, 15:20:19 от Demix »
Раздача брошенных сайтов: http://www.intobservatory.ru/dispensation.php

Iljainc

  • Гость
Лучше всего 1 запрос в виде простого SELECT на базу в 100 записей с лимитом.

Запускаете запросы и смотрите МС выполнения для каждого. В идеале 0.0002 сек на запрос - то что надо.

Кровавый

  • Гость
У меня сейчас в скриптах максимум около 10 запросов. На время пока не смотрел, так как скрипты ещё сырые. Но постараюсь уменьшить на сколько возможно. :)
Спасибо.

Iljainc

  • Гость
Лучше всего до начала проекта продумывать способы отладки

function get_sql_result($FILE, $LINE, $q, $comm){
    global $Core;
    global $total_sql_queris_num;
    global $total_sql_queris;
   
    $q_time=getmicrotime();

    //if (!empty($Core->save_mode) AND $Core->save_mode=='true')echo '<p>'.$q.'</p>';
    //echo $q.' - '.sprintf ("%01.6f", (getmicrotime()-$q_time)).'&nbsp;сек.
';
    $res=mysql_query($q);

    $total_sql_queris_num++;
    $total_sql_queris.='<tr>
        <td style="border-bottom:1px solid #ccc">'.$total_sql_queris_num.'. </td>
        <td style="border-bottom:1px solid #ccc">'.str_replace('<', '&lt;', $q).'</td>
        <td style="border-bottom:1px solid #ccc">'.str_replace(__DOCUMENT_ROOT, '', $FILE).' ('.$LINE.')</td>
        <td style="border-bottom:1px solid #ccc"><!--'.sprintf ("%01.4f",
            (getmicrotime()-$Core->start_mktime)).'&nbsp;-->'.sprintf ("%01.4f",
            (getmicrotime()-$q_time)).'&nbsp;сек. </td>
        <td style="border-bottom:1px solid #ccc">'.$comm.'</td></tr>';

    if (!$res)system_error($q.'

'.mysql_error().'

Файл: '.$FILE.'

Строка: '.$LINE.';', 'неверный SQL запрос.');
   
    return $res;
}

Вот на пример функция замены для mysql_query, которая позволяет не хило следить за процессами скл. Заточена под свои нужды, конечно. Суть проста - вместо mysql_query($q) запускате чтото типа

get_sql_result(__FILE__, __LINE__, $q, 'Простой селект - нагрузки вызывать не должен')

И потом всегда видете кто откуда вызывал, что и ваши комментарии.

Кровавый

  • Гость
Спасибо за скрипт. Чуть позже разберусь. :)

У меня запросы несколько иного смысла. Они относятся не к выводу больших объёмов данных, а скорее к поиску нужных.
Например скрипт отправки личного сообщения:

1. Проверить пароль отправителя, сохранённый в куки с паролем отправителя в БД.
2. Проверить, может ли группа, в которой состоит отправитель, использовать данную функцию.
3. Проверить наличие получателя в БД. И сразу же получить о нём некоторые данные (имя, фамилия, ник, отчество, id, е-маил, игнорируемые пользователи).
4. Записать данное сообщение в БД.

Небольшой пример. В регистрации, где происходит поиск многих полей, да бы исключить возможность спама и повторной регистрации пользователя, запросов больше.
Просто лень сейчас опять его ворошить. :)

Думаю, примерно такой скрипт, где запросы такие:

SELECT * FROM `users` WHERE `id` = '$id_c'
не должен давать большую нагрузку?

Iljainc

  • Гость
В теории нет. Но всегда лучше запускать с возможностью посмотреть сколько мс он исполняется.

Оффлайн Caladon

  • Администраторы
  • Ветеран
  • *****
  • Сообщений: 1 350
  • Репутация: 76
  • Пол: Мужской
А если таблица содержит, к примеру, порядка 500 000 строк или миллион строк.

Получается, что такой размер таблицы не играет серьёзную роль для запроса SELECT по определённому параметру с лимитом в 30 строк. Верно?
Боец невидимого фронта.

>>> правила хостинга <<<
>>> раздача брошенных сайтов <<<