Представьте, что вам нужно ускорить работу огромной легаси-системы с 50 микросервисами, нагрузка на которую выросла в 2000 раз. При этом она обрабатывает затратные по времени операции, которые зависят друг от друга в плане данных.
Рубрика «оптимизация запросов»
Ускоряем приложение: никаких фреймворков — только математика
2023-05-02 в 11:46, admin, рубрики: highload, Алгоритмы, Блог компании Конференции Олега Бунина (Онтико), Блог компании Почтатех, высокая производительность, высоконагруженные приложения, Микросервисная архитектура, микросервисы, оптимизация запросовАлгоритмы балансировки нагрузок
2023-05-01 в 13:25, admin, рубрики: ruvds_перевод, Алгоритмы, балансировка нагрузки, балансировщик нагрузки, Блог компании RUVDS.com, веб-серверы, оптимизация запросов, Серверная оптимизация, Серверное администрированиеРано или поздно веб-приложения перерастают среду одного сервера. Компаниям требуется увеличить или их доступность, или масштабируемость, или и то, и другое. Чтобы сделать это, они развёртывают своё приложение на нескольких серверах и ставят перед ним балансировщик нагрузок для распределения входящих запросов. Чтобы справляться с нагрузками, большим компаниям могут потребоваться тысячи серверов, на которых запущено веб-приложение.
В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать полностью »
Разработчик в стране DBA: как оптимизация запросов БД окончилась обнаружением «подводных камней» и багрепортом в MariaDB
2022-01-05 в 7:00, admin, рубрики: backend, mariadb, performance, php, sql, базы данных, Блог компании SuperJob, высокая нагрузка, высокая производительность, оптимизация запросов, ускорение сайтаЭта история про то, как искать виновника торможения запросов, если база и бэкенд переводят стрелки друг на друга; почему при обновлении базы не стоит раньше времени завершать нагрузочное тестирование; а также о том, что не всегда во встроенных инструментах оказываются те, что упомянуты в документации.
Ну а начиналось все очень мирно: мы хотели немного подтянуть сайт под обновленные требования Google.
varchar(max)-varchar(max) и в продакшн
2020-02-20 в 9:39, admin, рубрики: Microsoft SQL Server, sort, sql server, оптимизация запросов, памятьНедавно поучаствовал в дискуссии на тему влияния на производительность указания длины в столбцах с типом nvarchar. Доводы были разумны у обеих сторон и поскольку у меня было свободное время, решил немного потестировать. Результатом стал этот пост.
Спойлер – не всё так однозначно.
Все тесты проводились на SQL Server 2014 Developer Edition, примерно такие же результаты были получены и на SQL Server 2016 (с небольшими отличиями). Описанное ниже должно быть актуально для SQL Server 2005-2016 (а в 2017/2019 требуется тестирование, поскольку там появились Adaptive Memory Grants, которые могут несколько исправить положение).
Нам понадобятся – хранимая процедура от Erik Darling sp_pressure_detector, которая позволяет получить множество информации о текущем состоянии системы и SQL Query Stress – очень крутая open-source утилита Adam Machanic/Erik Ejlskov Jensen для нагрузочного тестирования MS SQL Server.
О чём вообще речь
Вопрос, на который я стараюсь ответить – влияет ли на производительность выбор длины поля (n)varchar (далее везде просто varchar, хотя всё актуально и для nvarchar), или можно использовать varchar(max) и не париться, поскольку если длина строки < 8000 (4000 для nvarchar) символов, то varchar(max) и varchar(N) хранятся IN-ROW.
Читать полностью »
История одного SQL расследования
2019-06-12 в 13:55, admin, рубрики: postgresql, postrgresql, sql, оптимизация запросовВ декабре прошлого года я получил интересный отчет об ошибке от команды поддержки VWO. Время загрузки одного из аналитических отчетов для крупного корпоративного клиента казалось непомерно большим. А так как это сфера моей ответственности, я тут же сосредоточился на решении проблемы.
Предыстория
Чтобы было понятно о чём речь, я расскажу совсем немного о VWO. Это платформа, с помощью которой можно запускать разные таргетированные кампании на своих сайтах: проводить A/B эксперименты, отслеживать посетителей и конверсии, делать анализ воронки продаж, отображать тепловые карты и проигрывать записи визитов.
Но самое главное в платформе — составление отчетов. Все вышеперечисленные функции связаны между собой. И для корпоративных клиентов, огромный массив из информации был бы просто бесполезен без мощной платформы, представляющей их в виде для аналитики.
Используя платформу, можно сделать произвольный запрос на большом наборе данных. Вот простенький пример:
Показать все клики на странице "abc.com" ОТ <даты d1> ДО <даты d2> для людей, которые использовали Chrome ИЛИ (находились в Европе И использовали iPhone)
Обратите внимание на булевы операторы. Они доступны для клиентов в интерфейсе запроса, чтобы делать сколь угодно сложные запросы для получения выборок.
Медленный запрос
Клиент, о котором идет речь, пытался сделать что-то, что интуитивно должно работать быстро:
Покажи все записи сессий для пользователей посетивших любую страницу с урлом, где есть "/jobs"
На этом сайте было огромное количество трафика, и мы хранили более миллиона уникальных URL-адресов только для него. И они хотели найти довольно простой шаблон урла, относящегося к их бизнес-модели.
Нескучные запросы с Django ORM Annotate и Query Expressions
2017-04-12 в 3:46, admin, рубрики: django, postgresql, python, оптимизация запросовБыло когда-то время, когда ORM Django считалась очень милой, но абсолютно глупой. Хотя, возможность производить Annotate и Aggregate были в ней с незапамятных времён. А в версии 1.8 добавилась возможность применять функции базы данных внутри Query Expressions. И, разумеется, если начинающий джангист не испугался и дочитал вступление до этих строк, он может смело читать дальше: статья ориентирована именно на начинающих.
Некоторое время назад передо мной встала задача: выбрать из таблицы значения по пользователям. Причём, эти значения должны соответствовать определённому регулярному выражению. Но и это не конец условия: из выбранных выражений нужно вытащить substring. Опять же, по регулярке. Сделал я это довольно быстро, и захотелось поделиться опытом с тем, кто ещё не может применять Annotate и Query Expressions на практике
Как писать кривые запросы с неоптимальным планом и заставить задуматься СУБД
2017-02-01 в 7:00, admin, рубрики: activerecord, explain, explain analyze, mysql, postgresql, query optimization, грабли повсюду, кто здесь, куда делась вся память, оптимизация запросов
Всё просто. Тут можно найти «Основы разбора запросов для чайников» в случае PostgreSQL и замечательные невыдуманные примеры из продакшена о том, как не надо писать запросы на PostgreSQL и MySQL и что бывает, если их так всё-таки писать.
Производительность запросов в PostgreSQL – шаг за шагом
2017-01-05 в 19:38, admin, рубрики: postgresql, sql, Блог компании Конференции Олега Бунина (Онтико), высокая производительность, илья космодемьянский, оптимизация запросов, метки: илья космодемьянский
Илья Космодемьянский (
hydrobiont )
Для начала сразу пару слов о том, о чем пойдет речь. Во-первых, что такое оптимизация запросов? Люди редко формулируют и, бывает так, что часто недооценивают понимание того, что они делают. Можно пытаться ускорить какой-то конкретный запрос, но это не обязательно будет оптимизацией. Мы немного на эту тему потеоретизируем, потом поговорим о том, с какого конца к этому вопросу подходить, когда начинать оптимизировать, как это делать, и как понять, что какой-то запрос или набор запросов никак нельзя оптимизировать – такие случаи тоже бывают, и тогда нужно просто переделывать. Как ни странно, я почти не буду приводить примеров того, как запросы оптимизировать, потому что даже 100 примеров не приблизят нас к разгадке.
Читать полностью »
«Распределение в запросе» или «избавляемся от перебора»
2016-12-22 в 15:54, admin, рубрики: sql, высокая производительность, оптимизация запросов, перебор, Программирование, распределение в запросеХороший перебор — это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.
В свое время, года 3 назад, возникла необходимость оптимизации конфигурации 1С и устранения ее узких мест в одной компании. Одним из таких узких мест оказался, казалось бы, безобидный, механизм распределения товаров в реализации по сериям. Суть в том, что строк распределялось достаточно много и было это очень медленно. Не миллионы за раз, конечно, но на это самое распределение для одного документа могло уходить до минуты.
Запрос специально привожу на T-SQL, т.к. думаю, что Хабравцам это будет ближе.
Читать полностью »