Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос по распределению нагрузки на MySQL-сервер

420
17 июля 2008 года
Fobos
197 / / 10.03.2006
Здравствуйте!

Делал одному человеку скрипт, который выполняет около 7000 запросов типа SELECT и UPDATE к БД. И вот в один прекрасный день его хостер прислал к нему на почту письмо следующего содержания:
Цитата:
Здравствуйте.
Большое количество обращений к базе данных с Вашего аккаунта вызвало перегрузку сервера, что привело к неработоспособности сайтов других клиентов.
Мы были вынуждены заблокировать работу сайтов.


Тоесть хостер просто заблокировал для него возможность подключения к БД.

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

Как можно распределить нагрузку на сервер?

Я думал, что можно ввести интервал ожидания между каждым запросом к БД, но тут другая проблема: если так, то может просто не будет хватать времени для завершения работы скрипта! У них почему-то нельзя устанавливать set_time_limit() в скриптах, которые по крону выполняются.

Что мне делать?

1
18 июля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Fobos
Здравствуйте!

Делал одному человеку скрипт, который выполняет около 7000 запросов типа SELECT и UPDATE к БД. И вот в один прекрасный день его хостер прислал к нему на почту письмо следующего содержания:

Тоесть хостер просто заблокировал для него возможность подключения к БД.

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

Как можно распределить нагрузку на сервер?

Я думал, что можно ввести интервал ожидания между каждым запросом к БД, но тут другая проблема: если так, то может просто не будет хватать времени для завершения работы скрипта! У них почему-то нельзя устанавливать set_time_limit() в скриптах, которые по крону выполняются.

Что мне делать?



А причем здесь распеределение нагрузки?
Если для хостера подобная нагрузка непосильна - меняйте хостера.
Второй вариант - использование хранимых процедур (если конечно версия базы соотвествует)
третий вариант - ну выполняйте в одном скрипте по столько запросов, сколько не является критичным. запускайте их с интервалом в 10 минут например.

304
18 июля 2008 года
Fenyx
707 / / 26.01.2005
4 вариант если позволяет логика проекта - разнеси в гибридную систему, т.е смесь файлов и базы - но это уже потяжелее ))
5 вариант - проверить скул запросы, правильность поднятых индексов, иногда хостеры могут кикнуть и из-за одного запроса )) проверить логику проекта - выборка по числу будет быстрее выборки по тексту и тд, т.е просмотреть максимально ли оптимизированна работа с базой
2
18 июля 2008 года
squirL
5.6K / / 13.08.2003
а collocation осилить? не?
420
19 июля 2008 года
Fobos
197 / / 10.03.2006
Re to kot_
Хостера сменить не проблема. Только на какого?
Насчёт выполнять столько запросов, сколько он потянет: знаете что он ответил заказчику? Примерно в том смысле "Пусть все запросы будут выполняться в течении 1-й секунды".

Это вообще идиотизм открповенный со стороны хостера!!! Скрипт простой, и выполняется за то время, которое позволяет аппаратное обеспечение сервера. Упрощать его некуда. Если только разбить на части, или сделать интервал между выполнением запросов.

Но хостер, как я привел выше, вообще какой-то гон моему клиенту пишет...

Re to Fenyx

Ну а что может быть неоптимизированно в простом чтении поля через SELECT (даже без WHERE, а просто подряд) 1-го поля таблы, и изменении соотв-го поля в другой табле?

Ну проще некуда!!!

Re to squirL

Это уже не в моей компитенции. :)
304
19 июля 2008 года
Fenyx
707 / / 26.01.2005
Цитата: Fobos
Re to kot_
Re to Fenyx

Ну а что может быть неоптимизированно в простом чтении поля через SELECT (даже без WHERE, а просто подряд) 1-го поля таблы, и изменении соотв-го поля в другой табле?

Ну проще некуда!!!


Что то совсем логики не понимаю такого подхода, ты берешь весь столбец и вгоняешь апдейтами в поле другой таблыцы?

1
19 июля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Fobos
Re to kot_
Хостера сменить не проблема. Только на какого?
Насчёт выполнять столько запросов, сколько он потянет: знаете что он ответил заказчику? Примерно в том смысле "Пусть все запросы будут выполняться в течении 1-й секунды".

Это вообще идиотизм открповенный со стороны хостера!!! Скрипт простой, и выполняется за то время, которое позволяет аппаратное обеспечение сервера. Упрощать его некуда. Если только разбить на части, или сделать интервал между выполнением запросов.

Но хостер, как я привел выше, вообще какой-то гон моему клиенту пишет...


не зная конкретной ситуации посоветовать лично мне чтото тяжело. Но вобщето - 7000 запросов - вроде как и не слишьком много. Т.е. вероятно на любом нормальном хостинге, где используеться собственно распеределенная нагрузка проблем быть не должно. Спишись с несколькими - изложи свои требования и реши.

Цитата: Fobos

Re to Fenyx

Ну а что может быть неоптимизированно в простом чтении поля через SELECT (даже без WHERE, а просто подряд) 1-го поля таблы, и изменении соотв-го поля в другой табле?

Ну проще некуда!!!


ну во первых - индекс важен для поля которое читаеться - это обязательно. Поле которое апдейтеться - апдейт происходит по какомуто условию - т.е. оно тоже должно индексироваться. А само поле которое модифицируеться - недолжно в ходить в индекс. И вобще - подобные "элементарные" запросы - но построенные неграмотно вполне могут положить сервер. Поэтому возможно притензия хостера вполне обоснованна - не надо сразу лезть в бутылку - разбирайтесь, я думаю что это вполне решаемая проблема.

420
19 июля 2008 года
Fobos
197 / / 10.03.2006
Прошу прощения, что-то я загнался. Ну как же без WHERE. Там по id конечно выборка идёт. ID товаров во всех 3-х магазинах соответствуют.

Вообще сейчас выясняется, что это не из-за скрипта, который по крону запускается, а из-за другого, который для ручного экспорта.

Там конечно уже не одно поле меняется в 1 или 0. И выполняется где-то минуты 3-5.

Ещё выеснилось, что заказчик его раз пять запускал в тот день, и ,как я предполагаю, каждый раз недождавшись завершения предыдущего.

В общем там конкретно сначала причину нужно найти, а потом её править... :confused:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог