Коллекции загружаются
#внутренности_фанфикса #будни_админа #исправление_ошибки #веб_разработка
Вот уже около недели анализирую лог медленных запросов к БД, вношу изменения в код или в структуру БД для устранения узких мест. Удалось ускорить несколько групп запросов. - Часть проблем была связана с тем, что Фанфикс вырос. Когда код писался, данных в БД было значительно меньше, и написанный тогда запрос не приводил к проблемам. Позднее стал тормозить на большом объеме данных. - Ещё часть проблем это мои ошибки в проектировании запросов, неверные решения, принятые, когда от не знания, когда от недостатка опыта, когда по недосмотру. - Существенная часть проблем - это нехватка каких-то индексов в БД. Фанфикс я пишу долго, при создании таблицы могли быть нужны одни индексы, а потом был дописан новый функционал, запросы к БД стали более разнообразными, а необходимые индексы вовремя добавлены не были. - Одна проблема нашлась совсем неожиданная. На не самой загруженной таблице индексы были неактивными. Не могу сообразить, как так вообще получилось. Больших проблем из-за этого не было, ибо тяжелые запросы к этой таблице происходят редко. Что по итогам: - За последние сутки по логу вижу три случая, когда существенная пачка запросов массово тормозила. В это время у пользователей сайт мог грузиться по минуте и больше. Три таких случая в сутки, каждый длительностью по паре минут. Причин пока не нашел. - Медленных запросов, которые могли незначительно тормозить все остальные запросы, выполняющиеся одновременно с ними, стало значительно меньше. Точных замеров не производил, ибо на каждый такой замер надо ждать хотя бы сутки. - Никуда не делать проблема ежедневного бэкапа. Каждую ночь сайт очень сильно тормозит в течение примерно часа. С этим пока ничего не делал. Решение существует. В этом должен помочь второй сервер, который я арендовал в ноябре. Надо реализовать репликацию - это технический процесс, когда все изменения в базу данных одновременно вносятся на два сервера. Одновременно существует две копии базы данных. Тогда бэкапить можно будет дублирующую БД, а основная в этот момент не будет тормозить. Сложностей тут несколько: во-первых, я этого ещё никогда не делал - надо внимательно изучить вопрос и просто решиться, во-вторых, процесс репликации увеличивает среднюю постоянную нагрузку на базу, надо будет убедиться, что сервер это без проблем выдерживает, в-третьих, репликация требует прилично свободного места на диске, надо убедиться, что его достаточно, ибо у основного сервера Фанфикса диски быстрые, но довольно маленькие. Работаю дальше. 15 января 2021
24 |