Оптимизация MYSQL тесты - советы

12
nomarketing
На сайте с 23.09.2009
Offline
181
1103

Вообщем хотел спросить, как быть, есть один не очень крупный сайт.

Проблема заключаеться в том, что в пики посещаемости, падает база данных.

Но странное ще то, что к примеру она падает от 20-25 юзеров одновременного прибывание на сайте..

Хотел бы узнать схематические ответы решение этой проблемы, скажу сразу я в mysql не эксперт но кое что могу (если это не слишком сложно..)

Хотел бы узнать как можно это все проверить что бы прийти к выводам, т.е схематически выполнить действие что бы обнаружить ту или инную ошибку и уже решать ее (к примеру заплатить оптимизаторам бд или еще что не знаю пока) но для начала сам хочу понять в чем же проблема..

Думал переезжать на платный сервер но мне сказали что это просто смешно 25 онлайн и падает бд.

Вообщем хочу услышать ваши советы, так как еще проблема в том что если трафик будет расти сайт не будет нормально работать.. т.е будет принимать юзеров если их не слишком много но от этого будет страдать и контекст реклама вообщем.. все взаимосвязанно..

Капитан покидает корабль последним
Z0
На сайте с 03.09.2009
Offline
782
#1

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

М
На сайте с 05.02.2014
Offline
30
#2

nomarketing, лично я бы начал диагностику с общего числа SQL-запросов, которые выполняются, чтобы сформировать страницу. Бывает так: думаешь, что там 5-10 небольших запросов. А на самом деле оказывается 900-1000. Причём 90-95% из них просто лишния.

У вас есть возможность отследить, сколько SQL-запросов выполняется при формировании страниц?

---------- Добавлено 24.02.2014 в 20:31 ----------

Следующее, что приходит в голову — проверить железо. Винчестеры имеют обыкновение через 4-6 лет работать жутко медленно. Бывает и так: в коде ничего не меняешь, но на новой винчестере БД летает, а на старом — глохнет.

Далее я бы использовал утилиту innotop в период пиковых нагрузок. Утилита в реальном времени показывает долго выполняющиеся запросы.

Для этой же цели можно переконфигурировать MySQL. В my.cnf прописать логгирование медленных запросов. Порог поствить, например, 10 или 15 секунд — если запрос выполняется дольше порога, он будет записан в лог-файл. Если в лог файл ничего не попадает, то понижаем порог.

IL
На сайте с 20.04.2007
Offline
435
#3

nomarketing, CMS какая?

Довольно часто есть встроенные средства "профайлинга" - как общее количество/время запросов, так и детализация по каждому запросу.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
nomarketing
На сайте с 23.09.2009
Offline
181
#4
Маркус:
nomarketing, лично я бы начал диагностику с общего числа SQL-запросов, которые выполняются, чтобы сформировать страницу. Бывает так: думаешь, что там 5-10 небольших запросов. А на самом деле оказывается 900-1000. Причём 90-95% из них просто лишния.
У вас есть возможность отследить, сколько SQL-запросов выполняется при формировании страниц?

---------- Добавлено 24.02.2014 в 20:31 ----------

Следующее, что приходит в голову — проверить железо. Винчестеры имеют обыкновение через 4-6 лет работать жутко медленно. Бывает и так: в коде ничего не меняешь, но на новой винчестере БД летает, а на старом — глохнет.

Далее я бы использовал утилиту innotop в период пиковых нагрузок. Утилита в реальном времени показывает долго выполняющиеся запросы.
Для этой же цели можно переконфигурировать MySQL. В my.cnf прописать логгирование медленных запросов. Порог поствить, например, 10 или 15 секунд — если запрос выполняется дольше порога, он будет записан в лог-файл. Если в лог файл ничего не попадает, то понижаем порог.

Сайт - на обычном хостинге где хостяться еще сайты - но когда были проблемы раньше - чаще - хостер говорил что бд падает из за запросов.

Отследить ? - у меня есть сайт на локальной машине win - denwer.. - может как то можно локально проверить или самому как то сгенерировать что то типа нагрузки и выловить где ошибка и сколько держит ? - ну или не знаю.. но на данный момент ситуация такова..

---------- Добавлено 24.02.2014 в 19:41 ----------

ivan-lev:
nomarketing, CMS какая?

Довольно часто есть встроенные средства "профайлинга" - как общее количество/время запросов, так и детализация по каждому запросу.

X-Zero Community

D
На сайте с 14.01.2007
Offline
153
#5

это не обязательно ошибка или кол-во запросов.

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

ваша задача состоит в том, чтобы найти как говорится bottle neck

siv1987
На сайте с 02.04.2009
Offline
427
#6
nomarketing:
Сайт - на обычном хостинге где хостяться еще сайты

Какие тогда советы, если там параллельно работают еще сто сайтов? За советами - к администратору хостинга.

М
На сайте с 05.02.2014
Offline
30
#7
nomarketing:
Сайт - на обычном хостинге где хостяться еще сайты - но когда были проблемы раньше - чаще - хостер говорил что бд падает из за запросов.

Ага, т.е. падение могло быть не по вине вашего сайта, а по вине какого-то другого сайта, который положил СУБД хостера?

С вашей CMS я не знаком, поэтому не скажу, как именно подсчитать число запросов БД. Но если бы такая задача была поставлена...

1) Разворачиваем сайт на Win- Denwer

2) разворачиваем реальную базу с сайта

3) ищем в скриптах место, в котором РНР обращается к MySQL, и ставим там инкрементирующий счётчик. Например, пишем в файл строчку. По окончании загрузки страницы открываем файл и считаемч число строк. (Если есть время разобраться с CMS, то можно и более красивый счётчик сочинить)

4) повторяем процедуру для разных страниц. Записываем результаты измерений.

nomarketing
На сайте с 23.09.2009
Offline
181
#8
Маркус:
Ага, т.е. падение могло быть не по вине вашего сайта, а по вине какого-то другого сайта, который положил СУБД хостера?

С вашей CMS я не знаком, поэтому не скажу, как именно подсчитать число запросов БД. Но если бы такая задача была поставлена...
1) Разворачиваем сайт на Win- Denwer
2) разворачиваем реальную базу с сайта
3) ищем в скриптах место, в котором РНР обращается к MySQL, и ставим там инкрементирующий счётчик. Например, пишем в файл строчку. По окончании загрузки страницы открываем файл и считаемч число строк. (Если есть время разобраться с CMS, то можно и более красивый счётчик сочинить)
4) повторяем процедуру для разных страниц. Записываем результаты измерений.

А поподробней можно на счет счетчика ? остальное уже все есть реальная база - и денвер и сама цсм - готов приступить к понятию и поиска проблемы - еще я глянул в логах сервера (хостера)

В каком скрипте ошибка базы данных и ее строка

PHP Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in

HP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

PHP Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

Что нужно сделать ? - найти код запроса - как выявить сколько времени требуеться и можно ли оптимизировать это ?

siv1987
На сайте с 02.04.2009
Offline
427
#9
nomarketing:
А поподробней можно на счет счетчика ? остальное уже все есть реальная база - и денвер и сама цсм - готов приступить к понятию и поиска проблемы - еще я глянул в логах сервера (хостера)

http://dev.mysql.com/doc/refman/5.1/en/query-log.html


general_log = 1
general_log_file = /tmp/mysql.log


---------- Добавлено 24.02.2014 в 20:34 ----------

nomarketing:
Что нужно сделать ? - найти код запроса - как выявить сколько времени требуеться и можно ли оптимизировать это ?

nomarketing, вы всерьез думаете что с такими "знаниями" сможете что-то оптимизировать, если вы даже сообщить эффективно о ошибке не можете?

Нужно выяснить почему - не прошел запрос. А для этого сначала нужно увидеть сам запрос. Напишите администратору хостинга, пусть скажет что с сервером, и логи даст если есть.

М
На сайте с 05.02.2014
Offline
30
#10

Запрос к БД обычно отправляют через функцию mysql_query(). Можно поискать её текстовым поиском по всем файлам.

А с файлом можно работать, например, так:

$f = fopen( 'путь к лог файлу', 'a' ); //открываем файл на добавление

fputs( $f, '.' ); //пишем точку, как счётчик

$fclose( $f ); //закрываем файл

После открытия HTML-страницы в браузере смотрим сколько точек попало в файл. Количество точек = размер файла в байтах.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий