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

PostgreSQL Antipatterns: куда крутить NULLS

Время на прочтение2 мин
Количество просмотров6.2K

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

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

SQL HowTo: обход дерева иерархии «по курсору» через двойную рекурсию

Время на прочтение3 мин
Количество просмотров8.6K

В предыдущих статьях "PostgreSQL Antipatterns: навигация по реестру", "PostgreSQL 13: happy pagination WITH TIES" и "SQL HowTo: курсорный пейджинг с неподходящей сортировкой" я уже рассматривал проблемы навигации по данным, представленных в виде плоского реестра.

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

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

«Ленивый сахар» PostgreSQL

Время на прочтение7 мин
Количество просмотров37K

SQL - декларативный язык - то есть вы описываете "что" хотите получить, а СУБД сама решает, "как" именно она будет это делать. Некоторые из них при этом позволяют им "подсказывать", как именно лучше выполнять запрос, но PostgreSQL - нет.

Тем не менее, "синтаксический сахар" некоторых языковых конструкций позволяет не только писать меньше кода (учите матчасть!), но и добиться, что ваша база будет делать часть вычислений "лениво", только при фактической необходимости.

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

PostgreSQL Antipatterns: когда мешает внешний ключ

Время на прочтение5 мин
Количество просмотров14K

Внешние ключи (foreign keys) - мощный и удобный механизм контроля логической целостности данных в базе. Но он бывает не только лишь полезен, и может неплохо пригрузить вашу БД.

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

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

PostgreSQL Antipatterns: в этом плане кто-то лишний

Время на прочтение3 мин
Количество просмотров7.4K

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

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

Битва «Титанов». Сравнение двух лучших отечественных сканеров уязвимостей. MaxPatrol 8 и RedCheck Enterprise

Время на прочтение13 мин
Количество просмотров21K

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

Обычно на вопрос "Какой сканер безопасности купить?" вспоминаются лишь OpenVas и Nessus (Tenable). Но есть и другие достойные отечественные продукты, о которых мы сегодня и поговорим – это продукты для корпоративного сегмента, полностью лицензированные под все российские требования безопасности и имеющие сертификаты ФСТЭК и ФСБ:

MaxPatrol 8 от Positive Technologies 

RedCheck Enterprise от Алтэкс Софт 

Читать далее
Всего голосов 20: ↑19 и ↓1+18
Комментарии11

Псс, парень… индекс нужен?

Время на прочтение8 мин
Количество просмотров20K

Самый больной вопрос для любого разработчика, которому приходится вычитывать данные из базы: "Как сделать мой запрос быстрее?". Классический ответ - необходимо создать подходящий индекс. Но куда именно его стоит "накатывать", да и как вообще он должен выглядеть?..

Мы научили наш сервис визуализации планов PostgreSQL отвечать на эти вопросы, и под катом расскажем, чем именно он руководствуется в своих рекомендациях.

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

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

Время на прочтение4 мин
Количество просмотров10K

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

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

Читать далее
Всего голосов 42: ↑41 и ↓1+40
Комментарии8

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

Время на прочтение4 мин
Количество просмотров2.4K

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

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

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

Время на прочтение3 мин
Количество просмотров17K

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

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

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

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

Время на прочтение2 мин
Количество просмотров8.9K

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

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

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

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

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

Время на прочтение5 мин
Количество просмотров9.3K

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

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

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

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

Время на прочтение2 мин
Количество просмотров12K

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

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

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

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

Время на прочтение4 мин
Количество просмотров9.1K

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

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

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

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

Время на прочтение4 мин
Количество просмотров5.3K

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

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

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

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

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

Время на прочтение3 мин
Количество просмотров7.2K
26 октября 2021 года вышел новый релиз Node.JS 16.13.0 который стал Active LTS.

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

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

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

Время на прочтение4 мин
Количество просмотров3K

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

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

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

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

Время на прочтение7 мин
Количество просмотров6.2K

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

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

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

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

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

Время на прочтение4 мин
Количество просмотров6.9K

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

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

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

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

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

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

Время на прочтение4 мин
Количество просмотров4.5K

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

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

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

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

Информация

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