Как стать автором
Обновить
127.73
Рейтинг
Тензор
Разработчик системы СБИС
Сначала показывать

«Импортозамещаем» анализ планов PostgreSQL

Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *Визуализация данных

Вчера Hubert 'depesz' Lubaczewski закрыл доступ с российских IP ко всем своим сайтам, включая широко известный визуализатор планов PostgreSQL-запросов explain.depesz.com.

Но это не беда, потому что в компании "Тензор" мы разработали сервис explain.tensor.ru, функционал которого гораздо обширнее, и которым можете воспользоваться и вы.

Читать далее
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 5.1K
Комментарии 3

Багатлон — хакатон для тестировщиков

Блог компании Тензор Тестирование IT-систем *Тестирование веб-сервисов *

Я работаю уже 10 лет в компании Тензор, за это время число тестировщиков приблизилось к четырём сотням. И все эти 10 лет у нас в компании проводились различные хакатоны для студентов, соревнования для разработчиков, наши безопасники участвовали в CTF, проводились конкурсы на лучшее фото из отпуска, турниры по настольному теннису, шахматам, волейболу, пауэрлифтингу... Ну вы поняли. Всё что угодно, но не соревнования, в которых можно померяться своим навыком в нахождении ошибок. Причём не геймификацию процесса, не дружеские посиделки с ноутбуками, а по-хорошему злые забеги. Собственно такие соревнования мы и организовали и успешно проводим второй год подряд (2020 не считается за год :)). О нашем опыте, сложностях, удачах и выводах  как раз и хочу рассказать.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Просмотры 1.2K
Комментарии 0

SQL HowTo: разные варианты работы с EAV

Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *ERP-системы *

Соблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно - создать "универсальный" способ описания характеристик объектов, который больше не потребует доработок базы ни при появлении новых типов объектов, ни при возникновении новых атрибутов...

Однако, за любую универсальность приходится платить сложностью и производительностью запросов - так что json[b] может оказаться более эффективной заменой. Но если уж такая модификация невозможна - давайте попробуем выжать максимум производительности из доставшегося нам legacy на самом простом примере.

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Просмотры 3.8K
Комментарии 7

PostgreSQL Antipatterns: рекурсивные грабли на ровном месте, или Сказка о потерянном времени

Блог компании Тензор Ненормальное программирование *PostgreSQL *SQL *Администрирование баз данных *

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

Но иногда обнаруживаются очень странные вещи в поведении этой, безусловно, отличной СУБД.

Все началось с запроса, который мне показали с диагнозом "необъяснимо тормозит"...

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

SQL HowTo: «простое» прогнозирование

Блог компании Тензор Ненормальное программирование *PostgreSQL *SQL *ERP-системы *

В "Тензоре" мы разрабатываем множество сервисов для управления бизнесом. А в бизнесе очень часто возникает желание немного "заглянуть в будущее" - спрогнозировать и увидеть на графике значение каких-то величин, которые мы можем только предполагать на основании данных предыдущих периодов. Например, на какую примерно выручку мы сможем рассчитывать в следующем месяце или сколько продуктов стоит закупить в столовую на следующую неделю.

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

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 6.9K
Комментарии 5

PostgreSQL Antipatterns: делаем группировку быстрее от 0.1 до 5 раз

Блог компании Тензор PostgreSQL *Программирование *SQL *Администрирование баз данных *

Примитивный запрос - простой джойн и группировка. Традиционные методы оптимизации - казалось бы, что могло пойти не так?..

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

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 9.1K
Комментарии 5

SQL HowTo: считаем «уников» на интервале

Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *CRM-системы *

Для систем управления бизнесом часто приходится решать очень похожий класс задач по вычислению количества уникальных объектов на произвольном временном интервале. В контексте CRM это могут быть "пользователи, обращавшиеся на горячую линию на прошлой неделе", "контрагенты, оплатившие за последние 30 дней" или "потенциальные клиенты, с кем был контакт в этом квартале".

Искать в большом количестве фактов «уники» — всегда сложно и долго, если их достаточно много. Если интервалы фиксированы (календарные месяц/квартал/год), можно материализовывать такие агрегаты заранее. А если интервал — произвольный, как тогда эффективно найти ответ?

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 4.9K
Комментарии 26

Реверс-инжинирим структуру БД PostgreSQL по плану запроса к ней

Блог компании Тензор PostgreSQL *Анализ и проектирование систем *Администрирование баз данных *Визуализация данных

Большая часть оптимизаций запросов к базам PostgreSQL может выполняться "механически", следуя разного рода маркерам в плане выполнения запроса, которые подскажут, что и как можно ускорить. Но "глубинные" переработки алгоритма, вроде описанных в статье про DBA-детектив, требуют от разработчика детального понимания используемой структуры логических связей.

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

А ведь она уже и так находится "под ногами" в момент анализа плана запроса - надо только лишь удобно увидеть ее!

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

Как мы переходили на Node.JS v16, или История о сломанном GC

Блог компании Тензор Высокая производительность *JavaScript *Программирование *Node.JS *
✏️ Технотекст 2021
26 октября 2021 года вышел новый релиз Node.JS 16.13.0 который стал Active LTS.

Как мы переводили на него наш сервис мониторинга и анализа логов PostgreSQL и с какими проблемами столкнулись — в статье ниже.

Читать дальше →
Всего голосов 54: ↑54 и ↓0 +54
Просмотры 5.5K
Комментарии 5

PostgreSQL в «Тензоре» — публикации за год (#2)

Блог компании Тензор Высокая производительность *PostgreSQL *SQL *Администрирование баз данных *

Добро пожаловать под кат, если вдруг вы пропустили какие-то из наших статей за прошедший год об интересных и полезных возможностях PostgreSQL, которые мы узнаем при разработке нашей системы полного цикла управления бизнесом СБИС — от кадрового учета, бухгалтерии, делопроизводства и налоговой отчетности, до таск-менеджмента, корпоративного портала и видеокоммуникаций.

Если не видели дайджест за первый год — время наверстать упущенное!

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 2K
Комментарии 0

SQL HowTo: генерируем лабиринты (алгоритм Прима и геометрические типы)

Блог компании Тензор Занимательные задачки PostgreSQL *SQL *Алгоритмы *

SQL является мощным инструментом для обработки множеств, а функционал PostgreSQL позволяет делать многие вещи еще проще, поэтому идеально подходит для реализации некоторых алгоритмов на графах.

Причем работа с графами - это не просто разминка для ума, а вполне себе прикладная задача. Например, в прошлой статье мы сделали "из мухи - слона" волновым алгоритмом Ли, аналогичным используемому у нас в СБИС при расчете себестоимости в многокомпонентных актах выпуска.

А сегодня мы научимся генерации случайных лабиринтов алгоритмом Прима с использованием геометрических типов данных.

Читать далее
Всего голосов 33: ↑33 и ↓0 +33
Просмотры 4.5K
Комментарии 2

SQL HowTo: делаем из мухи слона (алгоритм Ли)

Блог компании Тензор Занимательные задачки PostgreSQL *SQL *Алгоритмы *

Правила игры очень просты: надо построить цепочку слов от начального (МУХА) до конечного (СЛОН), на каждом шаге меняя только одну букву. При этом могут использоваться только русские 4-буквенные нарицательные существительные в начальной форме: например, слова БАЗА, НОЧЬ, САНИ допускаются, а слова ЛИТЬ, ХОТЯ, РУКУ, НОЧИ, САНЯ, ОСЛО, АБВГ, ФЦНМ — нет.

Эта игра под названием «Дублеты» приобрела известность благодаря Льюису Кэрроллу — не только автору книг про Алису, но ещё и замечательному математику. В марте 1879 года он начал раз в неделю публиковать в журнале «Ярмарка тщеславия» по три задания в форме броских фраз: «Turn POOR into RICH» — «Преврати бедного в богатого», «Evolve MAN from APE» — «Выведи человека из обезьяны», «Make TEA HOT» — «Сделай чай горячим». В том же году он выпустил брошюру «Дублеты», подробно описал в ней правила и предложил читателям попрактиковаться на нескольких десятках примеров.

Александр Пиперски, "Из мухи — слона", «Квантик» №2, 2019 и №3, 2019

Сегодня мы научимся реализовывать на SQL волновой алгоритм, решив заодно классический пример из этой игры для конкретного словаря.

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

Кластеризуем миллионы планов PostgreSQL

Блог компании Тензор PostgreSQL *Алгоритмы *Администрирование баз данных *Визуализация данных

Как найти самые "горячие" запросы на вашем PostgreSQL-сервере? Поискать их в логе и проанализировать план или воспользоваться расширением pg_stat_statements.

А если в лог попадает миллион запросов за сутки?.. Тогда любое значение лимита pg_stat_statements.max окажется недостаточно велико, чтобы собрать правдивую статистику. Так давайте собирать эту статистику прямо с планов!

Но для некоторых сервисов СБИС нам в "Тензоре" производительность запросов к базе настолько важна, что auto_explain.log_min_duration приходится выставлять в единицы миллисекунд - и вот они, миллионы планов... Как не потеряться в них?

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

SQL HowTo: три WHERE в одном запросе

Блог компании Тензор Ненормальное программирование *PostgreSQL *SQL *Администрирование баз данных *

При реализации некоторых прикладных задач в рамках экосистемы СБИС случается сталкиваться с неочевидными возможностями PostgreSQL, которые позволяют вместо сложной логики создать решение "в один ход".

Сегодня на примере вполне реальной задачи рассмотрим такие возможности оператора INSERT ... ON CONFLICT.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 7.3K
Комментарии 18

КЛАДРируем адреса произвольной формы (ч.2 — подстрочный поиск)

Блог компании Тензор Высокая производительность *PostgreSQL *SQL *ERP-системы *
Tutorial

В первой части серии статей про работу с адресами по КЛАДР мы научились импортировать данные этого справочника к себе в базу и превращать их во что-то более удобное для дальнейшей работы.

Сегодня же займемся реализацией конкретных прикладных алгоритмов на этой структуре и рассмотрим, как можно реализовать мгновенную помощь пользователю при вводе адреса, используя возможности префиксного поиска в PostgreSQL.

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

PostgreSQL Antipatterns: «где-то я тебя уже видел...»

Блог компании Тензор Высокая производительность *PostgreSQL *SQL *Администрирование баз данных *

Иногда при анализе производительности запроса на предмет "куда ушло все время" возникает стойкое ощущение deja vu, что вот ровно этот же кусок плана ты уже где-то раньше видел...

Пролистываешь выше - и таки-да, вот он рядом - но почему он там оказался, и как выйти из Матрицы самому и помочь коллегам?

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 7.4K
Комментарии 21

КЛАДРируем адреса произвольной формы (ч.1 — импорт)

Блог компании Тензор Системное администрирование *PostgreSQL *SQL *ERP-системы *
Tutorial

Достаточно часто при работе с вводимыми пользователем адресными данными возникает необходимость сначала подсказать ему, как правильно свой адрес указать, а потом - полученную строку адреса привести в некоторый машинно-читаемый вид.

Таким видом у нас в стране можно считать код по справочникам КЛАДР или ФИАС.

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

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

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 3K
Комментарии 10

PostgreSQL Antipatterns: «слишком много золота»

Блог компании Тензор Высокая производительность *PostgreSQL *SQL *Администрирование баз данных *

Иногда мы пишем SQL-запросы, мало задумываясь над тем фактом, что сначала они должны быть по сети как-то доставлены до сервера, а затем их результат - обратно в клиентское приложение. Если при этом на пути до сервера присутствует еще и пулер соединений типа pgbouncer, дополнительно "перекладывающий" байты между входящими и исходящими коннектами, ситуация становится еще тяжелее...

Поэтому сегодня рассмотрим некоторые типичные ситуации, в которых разработчики иногда принимают не самые оптимальные решения, гоняя по сети мегабайты трафика при общении с сервером PostgreSQL - а заодно посмотрим, как можно увидеть такую ситуацию в плане с помощью explain.tensor.ru и подумаем над вариантами, как сделать подобное взаимодействие более эффективным.

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Просмотры 6K
Комментарии 5

Борем deadlock при пакетных UPDATE

Блог компании Тензор Высокая производительность *PostgreSQL *SQL *Администрирование баз данных *

Однажды при выполнении достаточно тривиального запроса:

UPDATE tbl SET val = val + 1 WHERE id IN (1, 2, 3)

... вы получаете ошибку ERROR: deadlock detected

Но почему? Ведь еще вчера все успешно работало!

И что с этим теперь делать? Давайте разбираться.

Читать далее
Всего голосов 27: ↑26 и ↓1 +25
Просмотры 6.5K
Комментарии 12

Анализируем «слона» вместе с коллегами

Блог компании Тензор PostgreSQL *SQL *Администрирование баз данных *Визуализация данных

Если ваша жизнь DBA, сопровождающего PostgreSQL, наполнена вопросами "а почему так медленно?" и "как сделать, чтобы запрос не тормозил?", наш сервис анализа и визуализации планов запросов explain.tensor.ru сделает ее немного легче за счет привлечения коллег и обновленных подсказок.

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

Информация

Дата основания
Местоположение
Россия
Сайт
sbis.ru
Численность
1 001–5 000 человек
Дата регистрации