Как стать автором
Обновить

Авторский курс по GreenPlum от администратора баз данных в Southbridge и ведущего инженера в Data Driven Lab

Время на прочтение 2 мин
Количество просмотров 418
Блог компании Southbridge

GreenPlum помогает компаниям с разными объёмами бизнеса извлекать реальную пользу из накопленных данных. Благодаря масштабируемости и скорости работы с данными он позволяет быстрее принимать бизнес-решения и повышает их качество.

19 сентября у нас стартует «DWH на основе GreenPlum» — авторский курс Ивана Чувашова, администратора баз данных в Southbridge и ведущего инженера компании Data Driven Lab. На нём Иван поделится знаниями в области хранилищ данных, которые собирал на протяжении 10 лет. Мы разберём основы устройства DWH и углубимся в GreenPlum — поломаем и починим его. А ещё поговорим об архитектуре и способах хранения данных, оптимизации запросов.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

«PostgreSQL. База» — старт потока 15 февраля 2023 года

Время на прочтение 2 мин
Количество просмотров 509
Блог компании Southbridge

15 февраля стартует поток курса с мощным уклоном в практику от администратора баз данных в Southbridge и ведущего инженера компании Data Driven Lab Ивана Чувашова — «PostgreSQL. База».

Вся теоретическая часть основана на реальных задачах команды эксплуатации, а выполнение домашних заданий на стендах займет до 108 часов. В общем, это отличный курс, чтобы быстро прокачаться от «у меня в стеке есть PostgreSQL» до «ща всё будет».

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Подсчет количества найденных записей в PostgreSQL

Время на прочтение 3 мин
Количество просмотров 40K
PostgreSQL *
На работе в новом проекте используется СУБД PostgreSQL. Так как до сих пор я работал с MySQL, сейчас приходится изучать и открывать для себя Постгри. Первая проблема, которая меня заинтересовала — замена мускулевского SQL_CALC_FOUND_ROWS. При использовании этой константы в MySQL можно получить количество всех найденных по запросу записей, даже если запрос с limit'ом — это незаменимо при постраничном выводе поисковых результатов, когда используются «тяжелые» запросы.
Сходу готового решения найти не удалось. На форумах просто констатировали, что SQL_CALC_FOUND_ROWS в Постгри нет. Некоторые писали, что надо юзать count(*). И больше никакой информации. Но еще из MySQL мне было известно, что поиск с count()-запросом работает почти в 2 раза медленнее, чем с SQL_CALC_FOUND_ROWS. Я консультировался у тех, кто пользуется PostgreSQL, день мучал google и в результате получил 4 варианта замены SQL_CALC_FOUND_ROWS в PostgreSQL, один из которых вполне приемлимый по скорости.
Читать дальше: какие запросы и какая разница в скорости
Всего голосов 37: ↑35 и ↓2 +33
Комментарии 43

Гениальная поисковая оптимизация

Время на прочтение 1 мин
Количество просмотров 735
Чулан
Вот что бывает, когда человек впервые узнает, что на свете есть SEO:


Эти ребята гарантированно попадут в топ по выделенным словам. Да вот, кстати, и подтверждение
Читать дальше →
Всего голосов 91: ↑56 и ↓35 +21
Комментарии 100

Основные возможности CUBRID 8.4.0

Время на прочтение 9 мин
Количество просмотров 1.1K
Блог компании CUBRID
Приветствую всех!

Этот блог будет очень занимательным! Сегодня я расскажу об очень интересных особенностях последней версии CUBRID 8.4.0, о том, чего обычно не найдешь в мануале. Приведу очень важные рекоммендации по оптимизации запросов и индексов, приведу результаты тестов, а также примеры использования в реальных Веб сервисах.

Ранее я уже поверхностно рассказывал об изменениях в новой версии, о вдвое ускоренном движке базы данных, о расширенной поддержке MySQL синтаксиса, и т.д. А сегодня расскажу о них и других вещах более подробно, акцентируя на том, как мы смогли увеличить производительность CUBRID в два раза.

Основные направления, повлиявшие на производительность CUBRID, являются:
  • Уменьшение размера тома базы данных
  • Улучшенные параллельные вычисления в Windows версии
  • Оптимизации индексов
  • Оптимизации обработки условий в LIMIT
  • Оптимизации обработки условий в GROUP BY

Весь смак под катом
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 4

Оптимизация запросов MySQL с использованием пользовательских переменных

Время на прочтение 14 мин
Количество просмотров 65K
MySQL *
Из песочницы
Введение. В современном мире существует большое количество задач, в рамках которых приходится обрабатывать большие массивы однотипных данных. Яркими примерами являются системы для анализа биржевых котировок, погодных условий, статистики сетевого трафика. Многие из этих систем используют различные реляционные базы данных, в таблицах которых содержатся такие объемы данных, что правильное составление и оптимизация запросов к этим таблицам становится просто необходимым для нормального функционирования системы. В этой статье описаны методы решения ( и сравнительные временные характеристики используемых методов ) нескольких задач по получению данных из таблиц СУБД MySQL, содержащих статистику о проходящем через маршрутизаторы одного из крупных российских сетевых провайдеров сетевом трафике. Интенсивность потока данных, поступающего с главного маршрутизатора такова, что ежесуточно в таблицы базы данных используемой системы мониторинга сетевого трафика поступает в среднем от 400 миллионов до миллиарда записей, содержащих информацию о транзакциях TCP/IP (рассматриваемый маршрутизатор экспортирует данные по протоколу netflow). В качестве СУБД для системы мониторинга используется MySQL.
Читать дальше →
Всего голосов 82: ↑74 и ↓8 +66
Комментарии 19

Оптимизация сложных запросов MySQL

Время на прочтение 5 мин
Количество просмотров 66K
MySQL *
Туториал
Из песочницы

Введение


MySQL — весьма противоречивый продукт. С одной стороны, он имеет несравненное преимущество в скорости перед другими базами данных на простейших операциях/запросах. С другой стороны, он имеет настолько неразвитый (если не сказать недоразвитый) оптимизатор, что на сложных запросах проигрывает вчистую.

Прежде всего хотелось бы ограничить круг рассматриваемых проблем оптимизации «широкими» и большими таблицами. Скажем до 10m записей и размером до 20Gb, с большим количеством изменяемых запросов к ним. Если в вашей в таблице много миллионов записей, каждая размером по 100 байт, и пять несложных возможных запросов к ней — это статья не для Вас. NB: Рассматривается движок MySQL innodb/percona — в дальнейшем просто MySQL.
Читать дальше →
Всего голосов 52: ↑47 и ↓5 +42
Комментарии 20

Индексация неатомарных атрибутов

Время на прочтение 16 мин
Количество просмотров 3.2K
Блог компании InterSystems SQL *NoSQL *
Туториал
Цитаты из википедии (1NF):
Каждое пересечение строки и столбца содержит ровно одно значение из соответствующего домена (и больше ничего).

Одно и то же значение может быть атомарным или неатомарным в зависимости от смысла этого значения. Например, значение «4286» является
  • атомарным, если его смысл — «пин-код кредитной карты» (при разбиении на части или переупорядочивании смысл теряется)
  • неатомарным, если его смысл — «набор цифр» (при разбиении на части или переупорядочивании смысл не теряется)

В данной статье будут рассмотрены стандартные способы ускорения SQL-запросов по следующим типам полей: строка, дата, простой список (в формате $LB), коллекции-cписки и коллекции-массивы.
Будет много SQL, немного классов и совсем чуть-чуть NoSQL
Всего голосов 8: ↑5 и ↓3 +2
Комментарии 0

Что нового в SQLite (2013)?

Время на прочтение 5 мин
Количество просмотров 19K
Разработка веб-сайтов *SQLite *
В последнем обновлении SQLite планировщик запросов претерпел серьезные изменения и отныне зовется Планировщик Запросов Следующего Поколения. Мы решили сделать небольшой обзор нового планировщика и некоторых других значительных обновлений SQLite в текущем году. Новый функционал может оказаться полезным разработчикам.

Читать дальше →
Всего голосов 96: ↑95 и ↓1 +94
Комментарии 6

Сервис от компании Percona для создания оптимальной конфигурации MySQL серверов и анализа SQL-запросов

Время на прочтение 2 мин
Количество просмотров 16K
Разработка веб-сайтов *MySQL *
Предлагаю ознакомиться с сервисом от компании Percona, который позволяет правильно настроить конфигурацию MySQL сервера на основе конкретных условий использования и проанализировать используемые SQL-запросы на наличие ошибок и недочетов.



Анализ запросов в данном сервисе — не является заменой команде EXPLAIN, которая ориентирована на анализ производительности запроса, а является скорее дополнением, которое анализирует запрос с точки зрения его синтаксиса.

Читать дальше →
Всего голосов 22: ↑17 и ↓5 +12
Комментарии 8

Вы встречались с анализом леса популяции запросов SQL промышленного приложения (например, для оптимизации)?

Время на прочтение 2 мин
Количество просмотров 7.8K
Анализ и проектирование систем *SQL *
Хочу задать этот вопрос Хабровчанам.

Современные информационные системы строятся на различных видах СУБД и все же реляционные СУБД остаются самыми распространенными и используемыми. Интересная статистика на эту тему ТУТ и ТУТ.
image

При разработке и модификации систем уровень формализации знаний аналитиков и разработчиков остается небольшим (автоматизации создания умных запросов или с учетом ряда четких правил) и чаще всего результирующие SQL запросы написаны «нормально», «как привык», «так пишут у нас на фирме», а вопросы оптимизации остаются на этап выполнения запросов в СУБД и последующие этапы оптимизации (в худшем случае ждут, когда все начинает тормозить).

Объем ручного кода остается большим даже несмотря на
Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 14

Использование слоя плана выполнения SQL запроса на VST диаграммах

Время на прочтение 5 мин
Количество просмотров 4.9K
Блог компании «Embarcadero (Borland)»
Оптимизация производительности – это такая область, в которой каждый хотел бы стать великим мастером. Если говорить о специалистах в области работы с базами данных, то мы все приходим новичками и в начале карьеры затрачиваем массу времени, изучая основы, стараясь постичь искусство настройки серверов баз данных и приложений для улучшения производительности. Однако, и по мере проникновения в тему глубже, оптимизация производительности не становится легче.

По мере развития технологий, внедрению современных «гибких» подходов, «непрерывной интеграции» в области баз данных необходимость в более быстром отклике на запросы конечных пользователей только усиливается. В нынешних условиях распространения мобильных устройств практически всегда требуется внести изменения в системы обработки данных, чтобы ускорить обмен данными с «нативными» или WEB-приложений пользователей.

Мы наблюдаем постоянное появление и ввод новых технологий. Это здорово! А в это же время имеющиеся «старые» технологии требуют массу внимания и времени для поддержки. «Океан» данных, «море» баз данных, больше распределенных систем. Остается меньше времени на настройку и оптимизацию. Сокращение окон для модификации, поддержки и внесения изменений осложняет задачу увеличить непрерывность работы систем на имеющемся оборудовании.

В области настройки оптимизации баз данных, часто встречаются ситуации, когда трудно выбрать «правильное» решение. В таких случаях приходится полагаться на различные инструменты, которые помогают оценить ситуацию и найти пути ее улучшения. Освоив такие инструменты, часто становится проще найти лучшее решение, если в дальнейшем возникает подобная ситуация.
В подтверждение этой мысли приведу перевод любопытной статьи из блога bulldba.com/db-optimizer



В новых релизах DB Optimizer компании Embarcadero, начиная с версии 3.0, имеется отличная новая возможность: наложить на диаграмму VST explain plan запроса!
[Примечание переводчика:
Диаграмма визуальной оптимизации Visual SQL Tuning (VST) превращает текстовый SQL-код в графическую SQL-диаграмму, показывает индексы и ограничения в таблицах и представлениях с использованием статистических сведений, а также операции соединения, используемые в инструкции SQL, такие как прямые и подразумеваемые декартовы произведения и отношения «многие ко многим». ]


Возьмем для примера следующий запрос:

SELECT COUNT (*) 
FROM   a,  b,  c
WHERE
       b.val2 = 100 AND
       a.val1 = b.id AND
       b.val1 = c.id; 

По колонкам b.id и c.id созданы индексы. В окне DB Optimizer этот запрос выглядит так:



Красные линии связей такого вида в соответствии с определениями говорят, что отношения могут быть типа «многие ко многим».
Вопрос: «какой план выполнения этого запроса является оптимальным?».

Один из возможных оптимальных планов выполнения этого «дерева запроса» может быть таким:
  1. Начать с наиболее селективного фильтра
  2. Выполнить JOIN с подчиненными таблицами, если возможно
  3. Если нет – то выполнить JOIN с таблицей верхнего уровня

Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 0

Изобретая велосипед или поиск отсутствующего значения ID в MySQL таблице

Время на прочтение 2 мин
Количество просмотров 32K
MySQL *Программирование *
Recovery mode
Из песочницы
Разработчики и администраторы систем основанных на sql данных, наверняка, сталкивались с задачей — получить отсутствующее (пропущенное) значение в ряде id записей таблицы. Например номер договора, порядковый номер документа, телефонный номер, айпи-адрес и т.п. При работе с MySQL эта тривиальная задача непропорционально ресурсоемка.
Читать дальше →
Всего голосов 20: ↑13 и ↓7 +6
Комментарии 36

[ABAP] Учимся правильно использовать FOR ALL ENTRIES IN

Время на прочтение 5 мин
Количество просмотров 40K
Разработка веб-сайтов *Программирование *SQL *
Туториал
При разработке отчетов (программ) SAP на языке ABAP для обращения к базе данных используются Open SQL-запросы. Синтаксис очень похож на SQL, но имеются некоторые отличия. Одно из таких отличий – возможность использования конструкции FOR ALL ENTRIES IN. Эта конструкция применяется в SELECT запросах до оператора WHERE. После неё указывается внутренняя таблица с данными, поля которой можно использовать в операторе WHERE в качестве условий выборки.

В этой статье я хочу рассказать о тонкостях работы этой конструкции: что происходит на уровне БД, об оптимизации запросов и о database-hints.
Хочу знать больше о FOR ALL ENTRIES IN
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 10

Немного об оптимизации запросов

Время на прочтение 3 мин
Количество просмотров 39K
PostgreSQL *SQL *
Из песочницы
Хочу на простом примере рассказать о том, как иногда можно сильно оптимизировать вполне простые на первый взгляд запросы. Возьмем такой код, для примера на PostgreSQL 9.3, но принцип подходит ко всем субд, в которых присутствует hash join.

Задача простая — сджойнить две таблицы — одна весьма большая, другая маленькая — но джоин не простой, а золотой с OR. (Как реальный кейс — джоин таблицы проводок по счетам к самим счетам, учитывая, что в проводке два поля со счетом — для дебета и кредита.)
Читать дальше →
Всего голосов 31: ↑26 и ↓5 +21
Комментарии 8

Библиотека, помогающая преодолеть концептуальный разрыв между ООП и БД во время тестирования при использовании ORM, — LinqTestable

Время на прочтение 5 мин
Количество просмотров 11K
.NET *SQL *TDD *
Как известно, между объектно-ориентированной и реляционной моделью существует концептуальный разрыв, преодолеть который не в состоянии даже ORM. В основном этот разрыв влияет на то, что при использовании реляционной базы данных мы вынуждены работать над множествами, а не над конкретными объектами. Но есть и другой фактор: поведение NULL в бд отличается от поведения NULL в объектно-ориентированных языках. Это может стать проблемой, когда вы используете один и тот же запрос в двух ситуациях: 1) при запросе к бд 2) при юнит-тестировании, когда вместо таблицы из бд используется массив в оперативной памяти. Более того, это может стать проблемой, если вы обращаетесь только к бд, но мыслите о NULL в терминах ООП, а не реляционной бд!

image
Читать дальше →
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 11

Оптимизация одного запроса с GROUP BY в PostgreSQL

Время на прочтение 6 мин
Количество просмотров 20K
Высокая производительность *PostgreSQL *Программирование *SQL *
image

Сразу скажу, что в этой статье нет универсального совета на все случаи, а рассмотрен случай оптимизации лишь небольшого класса запросов. Тем не менее такие запросы могут встречаться во многих проектах.
Ускоряем запрос с GROUP BY в 10 раз
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 37

«Распределение в запросе» или «избавляемся от перебора»

Время на прочтение 4 мин
Количество просмотров 12K
Высокая производительность *Программирование *SQL *
Из песочницы
Хороший перебор — это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

В свое время, года 3 назад, возникла необходимость оптимизации конфигурации 1С и устранения ее узких мест в одной компании. Одним из таких узких мест оказался, казалось бы, безобидный, механизм распределения товаров в реализации по сериям. Суть в том, что строк распределялось достаточно много и было это очень медленно. Не миллионы за раз, конечно, но на это самое распределение для одного документа могло уходить до минуты.

Запрос специально привожу на T-SQL, т.к. думаю, что Хабравцам это будет ближе.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 21

Производительность запросов в PostgreSQL – шаг за шагом

Время на прочтение 15 мин
Количество просмотров 71K
Блог компании Конференции Олега Бунина (Онтико) Высокая производительность *PostgreSQL *SQL *


Илья Космодемьянский ( hydrobiont )


Для начала сразу пару слов о том, о чем пойдет речь. Во-первых, что такое оптимизация запросов? Люди редко формулируют и, бывает так, что часто недооценивают понимание того, что они делают. Можно пытаться ускорить какой-то конкретный запрос, но это не обязательно будет оптимизацией. Мы немного на эту тему потеоретизируем, потом поговорим о том, с какого конца к этому вопросу подходить, когда начинать оптимизировать, как это делать, и как понять, что какой-то запрос или набор запросов никак нельзя оптимизировать – такие случаи тоже бывают, и тогда нужно просто переделывать. Как ни странно, я почти не буду приводить примеров того, как запросы оптимизировать, потому что даже 100 примеров не приблизят нас к разгадке.
Всего голосов 46: ↑44 и ↓2 +42
Комментарии 15

Как писать кривые запросы с неоптимальным планом и заставить задуматься СУБД

Время на прочтение 8 мин
Количество просмотров 18K
MySQL *PostgreSQL *
Всё просто. Тут можно найти «Основы разбора запросов для чайников» в случае PostgreSQL и замечательные невыдуманные примеры из продакшена о том, как не надо писать запросы на PostgreSQL и MySQL и что бывает, если их так всё-таки писать.

Ознакомиться с подробностями
Всего голосов 30: ↑26 и ↓4 +22
Комментарии 24
1