Перейти к содержимому

Фото
- - - - -

База данных падает


  • Вы не можете создать новую тему
  • Please log in to reply
23 ответов в этой теме

#1 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 октября 2010 - 17:08

Есть сайт, работающий на PHP/MySQL.
Сейчас возросло количество пользователей и сайт стал падать.

Я посмотрел лог Мускула перед падением сервера.
В логе большое число запросов, которые локают таблицы в базе данных. Подозреваю, что причина может быть именно в этом.

Кто-нибудь сталкивался с подобным? Как решали проблему? Наверняка советов много, попробовал бы всё.

Заранее спасибо!
  • 0

#2 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 27 октября 2010 - 17:14

Если много локов, наверное таблицы myisam + много записей в базу. Если идёт много записей и считываний в таблицу, то поможет InnoDb.

А вообще надо анализировать запросы explain'ом, вычленять slowlog

P.S. сайт стал падать - это что есть? может там просто лимит на кол-во одновременных подключений к БД? :)
  • 0

#3 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 октября 2010 - 17:25

может там просто лимит на кол-во одновременных подключений к БД

Да, в апаче установлен лимит. А разве пользователей не ставит в таком случае в очередь?

Попробую переделать в InnoDB. Авось, поможет. Потом поанализирую запросы.

А вообще когда лучше использовать ИнноДБ. Какое должно быть соотношение селектов и записей, чтобы было целесообразно?
  • 0

#4 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 27 октября 2010 - 17:41

Да, в апаче установлен лимит. А разве пользователей не ставит в таком случае в очередь?

При чём тут апаче?

Очередей нет.

Попробую переделать в InnoDB. Авось, поможет. Потом поанализирую запросы.
Хуже конечно не станет, но нужно понимать что делаете. Я например вообще не использую MyIsam, да и в случае падения таблицы myisam постоянно крошатся, иннодб в этом плане надёжней + транзакции и внешние ключи, без них никак :)
  • 0

#5 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 27 октября 2010 - 18:02

Да, max connections 100. Ты про это говорил?
  • 0

#6 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 27 октября 2010 - 22:40

Какая ошибка вываливается? Дословно.
  • 0

#7 еть.

еть.
  • Постоялец
  • 2 655 сообщений

Отправлено 28 октября 2010 - 00:22

Setor прав. Первым делом проверить те запросы, на которые БД отвечает медленнее всего, оптимизировать. Второе - перевести таблицы в InnoDB.
  • 0

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


#8 simonsays

simonsays
  • Пользователь
  • 835 сообщений

Отправлено 28 октября 2010 - 09:35

Точную ошибку попрошу попозже у админа.

А в плане количества запросов? Я всегда считал, что лучше сделать один запрос на страницу подлиннее, чем кучу мелких запросов. А мне только что сказали, что лучше как раз наоборот. Что подсказывает ваш опыт, ребята?
  • 0

#9 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 10:58

Я всегда считал, что лучше сделать один запрос на страницу подлиннее, чем кучу мелких запросов. А мне только что сказали, что лучше как раз наоборот. Что подсказывает ваш опыт, ребята?

Надо смотреть explain. Чаще мелкие запросы могут оказаться шустрее за счёт более грамотного использования индексов и за счёт кеширования на стороне БД.
  • 0

#10 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 28 октября 2010 - 11:44

Можете ли объяснить объективную разницу между ними? Почему InnoDB работает быстрее и чем так плох MyISAM?
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#11 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 11:58

Можете ли объяснить объективную разницу между ними? Почему InnoDB работает быстрее и чем так плох MyISAM?

В сети полно информации.

InnoDb работает быстрее когда в таблицу идёт много записей и считываний, т.к. myisam на каждую запись лочит ВСЮ таблицу, иннодб лочит только 1 строку. Из-за этого праллельные вставки в myisam невозможны, что будет создавать большие очереди при очень большой нагрузке.

Myisam работает быстрее когда много чтений и почти нет записей

MyIsam как я говорил после падения сервера ломает почти все таблицы, и приходится из консоли делать им myisamcheck чтобы починить. возможны потери данных. иннодб сам себя чинит используя для этого журналы, там ещё есть свои оговорки по стабильности.
  • 0

#12 Demetrio

Demetrio
  • Пользователь
  • 18 649 сообщений
  • Откуда:Tallinn

Отправлено 28 октября 2010 - 12:05

вот этот форум на myisam
база сейчас уже ~2.3GB
  • 0

#13 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 12:06

вот этот форум на myisam
база сейчас уже ~2.3GB

Да ладно, не верю. Мало как-то.
  • 0

#14 Demetrio

Demetrio
  • Пользователь
  • 18 649 сообщений
  • Откуда:Tallinn

Отправлено 28 октября 2010 - 12:10

в дампе так по крайней мере
в месяц в районе 200мб прибавляется
  • 0

#15 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 12:26

Значит мало пишут форумчане :) Я всегда думал что форумные базы весят десятки Гб. У меня таблицы с логами быстро набирают такие объёмы.
  • 0

#16 Alexano

Alexano
  • Пользователь
  • 109 сообщений

Отправлено 28 октября 2010 - 12:35

у меня таблицы с логами набирают в день столько сколько база этого форума за весь период существования :D
  • 0

#17 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 28 октября 2010 - 12:50

Ну вот, начинали так хорошо, а закончили тем, у кого база толще :) Мальчики, что с нас возьмёшь.

Просто для статичной базы, цель которой только поиск избранных данных, что лучше выбрать? Инно или Исам? Имеется ввиду fulltextsearch.

Сообщение изменено: Clement (28 октября 2010 - 12:50 )

  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#18 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 13:06

Просто для статичной базы, цель которой только поиск избранных данных, что лучше выбрать? Инно или Исам? Имеется ввиду fulltextsearch.

FULLTEXT - только в myisam есть :)
  • 0

#19 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 28 октября 2010 - 13:20

FULLTEXT - только в myisam есть :)

Спасибо. Просто читал тут иностранный холивар, использовать или нет эту функцию, плюсы-минусы. Кто-то говорит очень долгие запросы, кто-то вроде оптимизировал... А с полным набором стопвордов и смысл пропадает использовать её :(
Надо-то мелочь, чтобы грамотно искал не по кускам слов, а полному предложению :)
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#20 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 13:29

Смотря сколько записей в таблице. Я для фултекста предпочитаю sphinx
  • 0

#21 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 28 октября 2010 - 13:43

Возьмём к примеру книги. Нам надо узнать автора книги, по строчке из текста книги. Т.е. текста очень много.
У нас есть база с текстом книг и авторами, вот для этих целей сфинкс подойдёт?
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#22 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 28 октября 2010 - 14:25

Отлично подойдёт. Главное правильно индекс построить. К примеру он не будет искать так

В базе: гидроэлектростанция
Ищем: электростанция

не найдёт ничего (чтобы искал не с начала слова, индекс будет в 100 раз больше весить чем без этой ф-ции) я так создал чудо-индекс из 1 Гб информации на 100 Гб :)

Ищем: гидро

найдёт гидроэлектростанцию
  • 0

#23 MiamiBC

MiamiBC
  • Пользователь
  • 21 сообщений

Отправлено 06 ноября 2010 - 01:00

Чтобы установить автора статьи, слова дробить не нужно. Достаточно отиндексить Sphinx'ом оригиналы и подать ему запрос с куском статьи. Учитывая порядок слов в запросе и в результатах, вверху окажется вероятный автор.

2Setor, эт ты о насущном? Хе хе. Кстати по разбиению слов есть одна мысль, сократит твой 100гиговый индекс раз может в 10. Интересно?
  • 0
_   _ __ ____ _____/\  ____________ ____ __  __ _  _
www.blackcrystal.net \/ Show what You can. Learn what You don't.

#24 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 06 ноября 2010 - 11:05

2Setor, эт ты о насущном? Хе хе. Кстати по разбиению слов есть одна мысль, сократит твой 100гиговый индекс раз может в 10. Интересно?

Уже не актуально, но интересно.
  • 0