Обсудим лучшие практики в разработке высоконагруженных систем и разберём реальные рабочие кейсы на примере сервисов с аудиторией в 100+ миллионов пользователей.
Когда: 16 мая, 12:00 мск
Где: офлайн в Москве и онлайн
В программе — два зала с докладами и решением практических задач.
«Направленный ациклический граф в PostgreSQL: как мы научили реляционную базу хранить оргструктуру на 500 тыс. пользователей»
//Спикер: Малик Минубаев, разработчик в B2B-платформе
«Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок»
//Спикер: Илья Абрамов, разработчик в Диске
«Как формировать технологический стек и не погибнуть в священных войнах: от хаоса к процессам и техрадару»
//Спикер: Дмитрий Сафонов, руководитель команды разработки платформы микросервисов
«Зачем и как бэкендеру расти в карьере в 2026 году»
//Спикер: Дмитрий Соломонов, руководитель группы B2B-разработки бэкенда Диска
«Семь раз подумай, один раз пошардируй: как мы начали горизонтально масштабировать метаданные чатов Телемоста»
//Спикер: Никита Звонарев, разработчик в Мессенджере🚀 «Марс: великое противостояние»
//Спикер: Владимир Сурдин, астроном, кандидат физико-математических наук, доцент
Параллельно будут работать зоны открытого общения — можно в любой момент подключиться к обсуждениям с инженерами Яндекс 360 и провести время с пользой!
Please open Telegram to view this post
VIEW IN TELEGRAM
13 типов баз данных :
1. Реляционные
↳ хранят структурированные данные в таблицах с фиксированной схемой и доступом через SQL-запросы.
2. Ключ-значение
↳ хранят простые пары ключ–значение для сверхбыстрого поиска и кэширования.
3. Колонночные
↳ хранят данные по колонкам вместо строк для оптимизации аналитических запросов.
4. Wide-column (ширококолонночные)
↳ используют семейства колонок для гибкого хранения в распределённых системах большого масштаба.
5. Документные
↳ хранят данные как JSON-подобные документы с вложенной и гибкой структурой.
6. Векторные
↳ хранят эмбеддинги для поиска похожих объектов и задач ИИ-извлечения.
7. Временных рядов
↳ хранят данные с метками времени для метрик, логов и событий.
8. Неизменяемые реестры
↳ фиксируют записи без возможности изменения или удаления для защиты от подмены данных.
9. Графовые
↳ хранят связи между сущностями и оптимизируют запросы по отношениям.
10. Геопространственные
↳ работают с координатами и геоданными для карт и пространственных запросов.
11. В памяти
↳ держат данные в ОЗУ для минимальной задержки доступа.
12. BLOB-хранилища
↳ предназначены для больших бинарных объектов: изображения, видео, файлы.
13. Полнотекстовый поиск
↳ индексируют текст для быстрого поиска по содержимому.
👉 @SQLPortal
1. Реляционные
↳ хранят структурированные данные в таблицах с фиксированной схемой и доступом через SQL-запросы.
2. Ключ-значение
↳ хранят простые пары ключ–значение для сверхбыстрого поиска и кэширования.
3. Колонночные
↳ хранят данные по колонкам вместо строк для оптимизации аналитических запросов.
4. Wide-column (ширококолонночные)
↳ используют семейства колонок для гибкого хранения в распределённых системах большого масштаба.
5. Документные
↳ хранят данные как JSON-подобные документы с вложенной и гибкой структурой.
6. Векторные
↳ хранят эмбеддинги для поиска похожих объектов и задач ИИ-извлечения.
7. Временных рядов
↳ хранят данные с метками времени для метрик, логов и событий.
8. Неизменяемые реестры
↳ фиксируют записи без возможности изменения или удаления для защиты от подмены данных.
9. Графовые
↳ хранят связи между сущностями и оптимизируют запросы по отношениям.
10. Геопространственные
↳ работают с координатами и геоданными для карт и пространственных запросов.
11. В памяти
↳ держат данные в ОЗУ для минимальной задержки доступа.
12. BLOB-хранилища
↳ предназначены для больших бинарных объектов: изображения, видео, файлы.
13. Полнотекстовый поиск
↳ индексируют текст для быстрого поиска по содержимому.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
image_2026-04-29_10-55-35.png
297.6 KB
Роадмэп по SQL
SQL MASTER TREE
│
├── 1. Database Fundamentals
│ ├── What is DB / DBMS / RDBMS
│ ├── Tables, Rows, Columns
│ ├── Primary Key
│ ├── Foreign Key
│ ├── Candidate Key
│ ├── Composite Key
│ ├── Constraints
│ │ ├── NOT NULL
│ │ ├── UNIQUE
│ │ ├── PRIMARY KEY
│ │ ├── FOREIGN KEY
│ │ ├── CHECK
│ │ └── DEFAULT
│ └── Data Integrity
│
├── 2. SQL Data Types
│ ├── Numeric
│ │ ├── INT
│ │ ├── BIGINT
│ │ ├── DECIMAL
│ │ └── FLOAT
│ ├── String
│ │ ├── CHAR
│ │ ├── VARCHAR
│ │ └── TEXT
│ ├── Date & Time
│ │ ├── DATE
│ │ ├── TIME
│ │ ├── DATETIME
│ │ └── TIMESTAMP
│ └── Boolean / Binary
│
├── 3. DDL (Data Definition Language)
│ ├── CREATE
│ │ ├── DATABASE
│ │ ├── TABLE
│ │ └── INDEX
│ ├── ALTER
│ │ ├── ADD COLUMN
│ │ ├── MODIFY COLUMN
│ │ └── DROP COLUMN
│ ├── DROP
│ │ ├── DATABASE
│ │ └── TABLE
│ └── TRUNCATE
│
├── 4. DML (Data Manipulation Language)
│ ├── INSERT
│ ├── UPDATE
│ ├── DELETE
│ └── MERGE / UPSERT
│
├── 5. DQL (Data Query Language)
│ ├── SELECT
│ ├── DISTINCT
│ ├── WHERE
│ │ ├── AND
│ │ ├── OR
│ │ └── NOT
│ ├── ORDER BY
│ ├── GROUP BY
│ ├── HAVING
│ └── LIMIT / OFFSET
│
├── 6. SQL Operators
│ ├── Arithmetic (+ - * /)
│ ├── Comparison (= != > < >= <=)
│ ├── Logical (AND OR NOT)
│ ├── BETWEEN
│ ├── IN
│ ├── LIKE
│ └── IS NULL
│
├── 7. SQL Functions
│ ├── Aggregate
│ │ ├── COUNT
│ │ ├── SUM
│ │ ├── AVG
│ │ ├── MIN
│ │ └── MAX
│ ├── String
│ │ ├── CONCAT
│ │ ├── SUBSTRING
│ │ ├── LENGTH
│ │ └── TRIM
│ ├── Numeric
│ │ ├── ROUND
│ │ └── ABS
│ └── Date
│ ├── NOW
│ ├── DATEADD
│ └── DATEDIFF
│
├── 8. Joins
│ ├── INNER JOIN
│ ├── LEFT JOIN
│ ├── RIGHT JOIN
│ ├── FULL JOIN
│ ├── CROSS JOIN
│ └── SELF JOIN
│
├── 9. Subqueries
│ ├── Scalar Subquery
│ ├── Correlated Subquery
│ └── Nested Subquery
│
├── 10. Views
│ ├── CREATE VIEW
│ ├── UPDATE VIEW
│ └── MATERIALIZED VIEW
│
├── 11. Indexing
│ ├── Clustered Index
│ ├── Non-Clustered Index
│ ├── Composite Index
│ └── Index Optimization
│
├── 12. Transactions
│ ├── BEGIN
│ ├── COMMIT
│ ├── ROLLBACK
│ └── SAVEPOINT
│
├── 13. ACID Properties
│ ├── Atomicity
│ ├── Consistency
│ ├── Isolation
│ └── Durability
│
├── 14. Normalization
│ ├── 1NF
│ ├── 2NF
│ ├── 3NF
│ ├── BCNF
│ └── Denormalization
│
├── 15. Advanced SQL
│ ├── Stored Procedures
│ ├── Triggers
│ ├── CTE (WITH)
│ ├── Window Functions
│ │ ├── ROW_NUMBER
│ │ ├── RANK
│ │ ├── DENSE_RANK
│ │ └── PARTITION BY
│ └── Recursive Queries
│
├── 16. Performance Optimization
│ ├── Query Optimization
│ ├── Execution Plan
│ ├── Index Tuning
│ └── Query Caching
│
├── 17. SQL Ecosystem
│ ├── MySQL
│ ├── PostgreSQL
│ ├── SQLite
│ ├── SQL Server
│ └── Oracle DB
│
└── 18. Real-World Usage
├── Backend APIs
├── Data Analytics
├── Reporting Systems
├── ETL Pipelines
└── Data Warehousing
👉 @SQLPortal
SQL MASTER TREE
│
├── 1. Database Fundamentals
│ ├── What is DB / DBMS / RDBMS
│ ├── Tables, Rows, Columns
│ ├── Primary Key
│ ├── Foreign Key
│ ├── Candidate Key
│ ├── Composite Key
│ ├── Constraints
│ │ ├── NOT NULL
│ │ ├── UNIQUE
│ │ ├── PRIMARY KEY
│ │ ├── FOREIGN KEY
│ │ ├── CHECK
│ │ └── DEFAULT
│ └── Data Integrity
│
├── 2. SQL Data Types
│ ├── Numeric
│ │ ├── INT
│ │ ├── BIGINT
│ │ ├── DECIMAL
│ │ └── FLOAT
│ ├── String
│ │ ├── CHAR
│ │ ├── VARCHAR
│ │ └── TEXT
│ ├── Date & Time
│ │ ├── DATE
│ │ ├── TIME
│ │ ├── DATETIME
│ │ └── TIMESTAMP
│ └── Boolean / Binary
│
├── 3. DDL (Data Definition Language)
│ ├── CREATE
│ │ ├── DATABASE
│ │ ├── TABLE
│ │ └── INDEX
│ ├── ALTER
│ │ ├── ADD COLUMN
│ │ ├── MODIFY COLUMN
│ │ └── DROP COLUMN
│ ├── DROP
│ │ ├── DATABASE
│ │ └── TABLE
│ └── TRUNCATE
│
├── 4. DML (Data Manipulation Language)
│ ├── INSERT
│ ├── UPDATE
│ ├── DELETE
│ └── MERGE / UPSERT
│
├── 5. DQL (Data Query Language)
│ ├── SELECT
│ ├── DISTINCT
│ ├── WHERE
│ │ ├── AND
│ │ ├── OR
│ │ └── NOT
│ ├── ORDER BY
│ ├── GROUP BY
│ ├── HAVING
│ └── LIMIT / OFFSET
│
├── 6. SQL Operators
│ ├── Arithmetic (+ - * /)
│ ├── Comparison (= != > < >= <=)
│ ├── Logical (AND OR NOT)
│ ├── BETWEEN
│ ├── IN
│ ├── LIKE
│ └── IS NULL
│
├── 7. SQL Functions
│ ├── Aggregate
│ │ ├── COUNT
│ │ ├── SUM
│ │ ├── AVG
│ │ ├── MIN
│ │ └── MAX
│ ├── String
│ │ ├── CONCAT
│ │ ├── SUBSTRING
│ │ ├── LENGTH
│ │ └── TRIM
│ ├── Numeric
│ │ ├── ROUND
│ │ └── ABS
│ └── Date
│ ├── NOW
│ ├── DATEADD
│ └── DATEDIFF
│
├── 8. Joins
│ ├── INNER JOIN
│ ├── LEFT JOIN
│ ├── RIGHT JOIN
│ ├── FULL JOIN
│ ├── CROSS JOIN
│ └── SELF JOIN
│
├── 9. Subqueries
│ ├── Scalar Subquery
│ ├── Correlated Subquery
│ └── Nested Subquery
│
├── 10. Views
│ ├── CREATE VIEW
│ ├── UPDATE VIEW
│ └── MATERIALIZED VIEW
│
├── 11. Indexing
│ ├── Clustered Index
│ ├── Non-Clustered Index
│ ├── Composite Index
│ └── Index Optimization
│
├── 12. Transactions
│ ├── BEGIN
│ ├── COMMIT
│ ├── ROLLBACK
│ └── SAVEPOINT
│
├── 13. ACID Properties
│ ├── Atomicity
│ ├── Consistency
│ ├── Isolation
│ └── Durability
│
├── 14. Normalization
│ ├── 1NF
│ ├── 2NF
│ ├── 3NF
│ ├── BCNF
│ └── Denormalization
│
├── 15. Advanced SQL
│ ├── Stored Procedures
│ ├── Triggers
│ ├── CTE (WITH)
│ ├── Window Functions
│ │ ├── ROW_NUMBER
│ │ ├── RANK
│ │ ├── DENSE_RANK
│ │ └── PARTITION BY
│ └── Recursive Queries
│
├── 16. Performance Optimization
│ ├── Query Optimization
│ ├── Execution Plan
│ ├── Index Tuning
│ └── Query Caching
│
├── 17. SQL Ecosystem
│ ├── MySQL
│ ├── PostgreSQL
│ ├── SQLite
│ ├── SQL Server
│ └── Oracle DB
│
└── 18. Real-World Usage
├── Backend APIs
├── Data Analytics
├── Reporting Systems
├── ETL Pipelines
└── Data Warehousing
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2👍2
Нашёл удобный сервис для быстрого запуска SQL-запросов онлайн — RunSQL
> Мгновенно пишешь и выполняешь SQL без установки ПО
> Поддержка PostgreSQL
> Можно быстро делиться своими запросами через ссылку
> Подходит для тестов, демонстраций и обучения
Просто открыл сайт — и сразу работаешь с базой. Минимализм и скорость
👉 @SQLPortal
> Мгновенно пишешь и выполняешь SQL без установки ПО
> Поддержка PostgreSQL
> Можно быстро делиться своими запросами через ссылку
> Подходит для тестов, демонстраций и обучения
Просто открыл сайт — и сразу работаешь с базой. Минимализм и скорость
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В Oracle SQL можно проверить, получится ли привести выражение к нужному типу данных, с помощью функции
Она пытается преобразовать выражение в указанный тип
Если формат не указан, используется формат сеанса (настройки NLS)
Возвращает 1, если преобразование удалось, и 0, если нет
👉 @SQLPortal
VALIDATE_CONVERSION ( <expr> AS <datatype>, <fmt> )
Она пытается преобразовать выражение в указанный тип
Если формат не указан, используется формат сеанса (настройки NLS)
Возвращает 1, если преобразование удалось, и 0, если нет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Превратите PostgreSQL в тайм-серверную СУБД с помощью одного расширения
В стандартном PostgreSQL все строки хранятся в одной таблице. По мере роста тайм-серверных данных до миллионов записей запросы не могут пропускать нерелевантные данные, поэтому даже запросы по свежим данным сканируют гораздо больше, чем нужно.
TimescaleDB решает это через гипертаблицы, которые автоматически разбивают данные на временные чанки.
Запросы затрагивают только нужные чанки, остальная часть данных не участвует в чтении.
Другие возможности:
• уменьшение объёма хранения до 95% за счёт колоночного сжатия с полной поддержкой запросов
• ускорение запросов через непрерывные агрегаты, которые обновляются только новыми данными
• встроенные политики хранения для автоматического удаления старых данных
Плюс TimescaleDB — это open source. Достаточно установить расширение и продолжать использовать PostgreSQL.
Ссылка: https://tsdb.co/ktran-x
👉 @SQLPortal
В стандартном PostgreSQL все строки хранятся в одной таблице. По мере роста тайм-серверных данных до миллионов записей запросы не могут пропускать нерелевантные данные, поэтому даже запросы по свежим данным сканируют гораздо больше, чем нужно.
TimescaleDB решает это через гипертаблицы, которые автоматически разбивают данные на временные чанки.
Запросы затрагивают только нужные чанки, остальная часть данных не участвует в чтении.
Другие возможности:
• уменьшение объёма хранения до 95% за счёт колоночного сжатия с полной поддержкой запросов
• ускорение запросов через непрерывные агрегаты, которые обновляются только новыми данными
• встроенные политики хранения для автоматического удаления старых данных
Плюс TimescaleDB — это open source. Достаточно установить расширение и продолжать использовать PostgreSQL.
Ссылка: https://tsdb.co/ktran-x
Please open Telegram to view this post
VIEW IN TELEGRAM
Лёгковесный настольный клиент с открытым исходным кодом, который позволяет подключаться к разным базам данных через единый инструмент: MySQL, PostgreSQL, SQLite, Redis, MongoDB, ClickHouse и другие. Не нужно ставить отдельные клиенты под каждую СУБД.
DBX собран на Tauri 2 + Vue.js 3 + Rust, размер установщика около 15 МБ, без бандла Chromium.
Поддерживает подключение к десяткам баз данных, включая OceanBase и openGauss. SQL-редактор содержит AI-ассистента для генерации и оптимизации запросов на естественном языке; таблицы поддерживают inline-редактирование, сортировку и поиск; для Redis и MongoDB есть отдельные браузеры.
https://github.com/t8y2/dbx
👉 @SQLPortal
DBX собран на Tauri 2 + Vue.js 3 + Rust, размер установщика около 15 МБ, без бандла Chromium.
Поддерживает подключение к десяткам баз данных, включая OceanBase и openGauss. SQL-редактор содержит AI-ассистента для генерации и оптимизации запросов на естественном языке; таблицы поддерживают inline-редактирование, сортировку и поиск; для Redis и MongoDB есть отдельные браузеры.
https://github.com/t8y2/dbx
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Появилась новая игра для изучения SQL — SQL Protocol.
Она сделана в стиле «Матрицы». Внутри надо играть за агента, идти по сюжету и решать множество SQL-задач от простых к сложным. Также есть PvP Arena🤑
👉 @SQLPortal
Она сделана в стиле «Матрицы». Внутри надо играть за агента, идти по сюжету и решать множество SQL-задач от простых к сложным. Также есть PvP Arena
Please open Telegram to view this post
VIEW IN TELEGRAM
JOIN против UNION в Postgres:
JOIN нужен для объединения столбцов➡️
UNION нужен для объединения строк⬇️
✤ JOIN объединяет столбцы из двух и более таблиц по связанному полю. Это как добавлять данные по горизонтали. Используй JOIN, когда нужно посмотреть данные из разных таблиц рядом. Пример:
✤ UNION складывает результаты двух и более SELECT в один набор строк. Это про объединение данных по вертикали. Таблицы должны иметь одинаковое количество столбцов и совместимые типы данных. Пример:
👉 @SQLPortal
JOIN нужен для объединения столбцов
UNION нужен для объединения строк
✤ JOIN объединяет столбцы из двух и более таблиц по связанному полю. Это как добавлять данные по горизонтали. Используй JOIN, когда нужно посмотреть данные из разных таблиц рядом. Пример:
SELECT employees.name, departments.location
FROM employees
JOIN departments
ON employees.dept_id = departments.id;
✤ UNION складывает результаты двух и более SELECT в один набор строк. Это про объединение данных по вертикали. Таблицы должны иметь одинаковое количество столбцов и совместимые типы данных. Пример:
SELECT city
FROM customers
UNION
SELECT city;
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ты обожаешь Postgres и SQL, но начальству нужны отчёты в Excel? К счастью, в Postgres есть простой способ выгрузить данные из SQL-запроса сразу в CSV.
Экспортировать CSV-файл для любого SQL-запроса можно так:
psql уже содержит встроенную утилиту для работы с CSV. Просто укажи параметры подключения, запрос в кавычках — и готово.
– флаг
– добавь
Этот способ не такой гибкий, как
Прямой вывод в CSV избавляет от лишней постобработки. Нам нравится, как psql позволяет быстро и эффективно работать со структурированными данными — для отчётов, аудита и загрузки в таблицы.
👉 @SQLPortal
Экспортировать CSV-файл для любого SQL-запроса можно так:
psql --csv -c 'select * from orders'
psql уже содержит встроенную утилиту для работы с CSV. Просто укажи параметры подключения, запрос в кавычках — и готово.
– флаг
--csv выводит данные в формате CSV прямо в stdout– добавь
>, чтобы направить вывод в файл на локальной системеЭтот способ не такой гибкий, как
\copy, но для простого экспорта результатов запроса — это быстрое и удобное решение.Прямой вывод в CSV избавляет от лишней постобработки. Нам нравится, как psql позволяет быстро и эффективно работать со структурированными данными — для отчётов, аудита и загрузки в таблицы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2👍2
Это визуальная шпаргалка по SQL-командам, оформленная в виде рисунков с фруктами и человечками. Она охватывает основные конструкции SQL на примере таблицы
По моему одна из лучших, что есть🐸
👉 @SQLPortal
fruitsПо моему одна из лучших, что есть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Внутренняя архитектура PostgreSQL
👉 @SQLPortal
1. Архитектура на основе процессов
PostgreSQL использует архитектуру «один процесс на соединение», то есть для каждого клиента создаётся отдельный процесс операционной системы.
2. Журнал предзаписи
PostgreSQL применяет WAL для обеспечения надёжности данных, согласованности, восстановления после сбоев и репликации
3. Многоверсионность и управление параллелизмом
Благодаря MVCC PostgreSQL позволяет выполнять параллельные транзакции без необходимости жёсткой блокировки данных
4. Конвейер выполнения запросов
Запросы в PostgreSQL проходят через чёткую последовательность этапов: разбор, планирование, исполнение и возврат результатов
5. Система индексации
PostgreSQL поддерживает множество типов индексов (B-Tree, GIN, GiST, BRIN и др.) для оптимизации запросов под разные типы данных
6. Партиционирование таблиц
PostgreSQL позволяет разбивать большие таблицы на более мелкие части (партиции) по диапазону значений, списку или хешу, что упрощает управление и ускоряет обработку.
7. Логическая декодировка
Позволяет транслировать изменения из WAL в логическом формате, что полезно для репликации и систем отслеживания изменений (CDC).
8. Расширения
PostgreSQL построен как модульная система и поддерживает расширения, которые позволяют добавлять новые функции и возможности.
9. Сбор статистики
Механизм сбора статистики PostgreSQL отслеживает активность в реальном времени, что помогает анализировать и оптимизировать производительность базы данных
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Использование привязанных переменных — ключ к быстрой работе приложений
Пишите SQL вот так:
Каждое новое значение VAR создаёт новый запрос ⇒ много разборов ⇒ медленно
Используйте привязку вот так:
Один и тот же запрос для любого значения ⇒ один разбор ⇒ быстро
👉 @SQLPortal
Пишите SQL вот так:
'SELECT ... WHERE col = ' || var
Каждое новое значение VAR создаёт новый запрос ⇒ много разборов ⇒ медленно
Используйте привязку вот так:
'SELECT ... WHERE col = :bind'
Один и тот же запрос для любого значения ⇒ один разбор ⇒ быстро
Please open Telegram to view this post
VIEW IN TELEGRAM
Что из следующего присутствует в каждой оконной функции?
Anonymous Quiz
2%
DENSE_RANK
16%
Partition
60%
OVER
6%
RANK
16%
Всё перечисленное
❤1
Знаешь, что Postgres можно тюнить по одной таблице?
ALTER TABLE SET позволяет задавать отдельные параметры тюнинга, такие как fill factor, vacuum и параллельные воркеры, для конкретных нагрузок. Это более гранулярный и точный подход и может быть лучше, чем настройка на уровне всей базы данных.
Например, таблица с частыми вставками и обновлениями может использовать более агрессивное вакуумирование и уменьшенный фактор заполнения, чтобы снизить фрагментацию и ускорить записи. При этом аналитическая таблица с редкими изменениями может получить больше параллельных воркеров для ускорения чтения без влияния на остальную систему
👉 @SQLPortal
ALTER TABLE SET позволяет задавать отдельные параметры тюнинга, такие как fill factor, vacuum и параллельные воркеры, для конкретных нагрузок. Это более гранулярный и точный подход и может быть лучше, чем настройка на уровне всей базы данных.
Например, таблица с частыми вставками и обновлениями может использовать более агрессивное вакуумирование и уменьшенный фактор заполнения, чтобы снизить фрагментацию и ускорить записи. При этом аналитическая таблица с редкими изменениями может получить больше параллельных воркеров для ускорения чтения без влияния на остальную систему
ALTER TABLE orders
SET (
fillfactor = 80,
autovacuum_vacuum_scale_factor = 0.1,
autovacuum_analyze_scale_factor = 0.05,
parallel_workers = 4
);
ALTER TABLE events_log
SET (
fillfactor = 70,
autovacuum_enabled = true,
parallel_workers = 2
);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Media is too big
VIEW IN TELEGRAM
Многие ИИ-воркфлоу у разработчиков выглядят так:
upsert строки → вызов API → обработка через ИИ → обновление строки
А что если запускать LLM прямо в базе данных, с доступом ко всем примитивам и аутентификацией?
Чуваки открыли исходный код Postgres LLM.
- полностью асинхронно, не блокирует транзакции
- работает с любой моделью
можно быстро стартовать в supabase, не выходя из дашборда или просто передать это агенту
👉 @SQLPortal
upsert строки → вызов API → обработка через ИИ → обновление строки
А что если запускать LLM прямо в базе данных, с доступом ко всем примитивам и аутентификацией?
Чуваки открыли исходный код Postgres LLM.
- полностью асинхронно, не блокирует транзакции
- работает с любой моделью
можно быстро стартовать в supabase, не выходя из дашборда или просто передать это агенту
Please open Telegram to view this post
VIEW IN TELEGRAM
Пилообразные всплески ввода-вывода в Postgres часто связаны с агрессивными настройками контрольных точек.
Чтобы стабилизировать задержки, стоит увеличить параметр
Также имеет смысл выставить
Пример настройки в
Если настраивать через SQL:
Проверка текущих значений:
👉 @SQLPortal
Чтобы стабилизировать задержки, стоит увеличить параметр
checkpoint_timeout.Также имеет смысл выставить
checkpoint_completion_target = 0.9, чтобы распределить нагрузку ввода-вывода более равномерно во времени.Пример настройки в
postgresql.conf:checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
Если настраивать через SQL:
ALTER SYSTEM SET checkpoint_timeout = '15min';
ALTER SYSTEM SET checkpoint_completion_target = 0.9;
SELECT pg_reload_conf();
Проверка текущих значений:
SHOW checkpoint_timeout;
SHOW checkpoint_completion_target;
Please open Telegram to view this post
VIEW IN TELEGRAM
Познакомьтесь с Postgresus — open-source и self-hosted решением для автоматизации бэкапов PostgreSQL.
Инструмент закрывает типичный набор задач, которые обычно размазываются по cron-скриптам и ручной поддержке.
Возможности:
- простое планирование резервного копирования;
- выгрузка в облачные хранилища (S3, R2, Google Drive);
- уведомления в Slack и Telegram.
Работа с бэкапами PostgreSQL часто превращается в набор разрозненных скриптов, где нужно отдельно держать расписание, ретраи, доставку в хранилища и алерты. Postgresus собирает это в единый воркфлоу с самохостингом и автоматизацией.
Подходит для DevOps-сценариев, где нужно централизовать резервное копирование без внешних SaaS-зависимостей.
👉 @SQLPortal
Инструмент закрывает типичный набор задач, которые обычно размазываются по cron-скриптам и ручной поддержке.
Возможности:
- простое планирование резервного копирования;
- выгрузка в облачные хранилища (S3, R2, Google Drive);
- уведомления в Slack и Telegram.
Работа с бэкапами PostgreSQL часто превращается в набор разрозненных скриптов, где нужно отдельно держать расписание, ретраи, доставку в хранилища и алерты. Postgresus собирает это в единый воркфлоу с самохостингом и автоматизацией.
Подходит для DevOps-сценариев, где нужно централизовать резервное копирование без внешних SaaS-зависимостей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Мониторинг реплик Postgres
Смотри
Пример SQL-запросов для мониторинга.
Основная нода — состояние репликации
Основная нода — минимальная проверка подключённых реплик
Резервная нода — время последнего применённого коммита
Резервная нода — оценка отставания по времени
👉 @SQLPortal
Смотри
pg_stat_replication на primary-ноде для отслеживания лага в реальном времени и состояния синхронизации. На standby используй pg_last_xact_replay_timestamp(), чтобы точно увидеть, когда был применён последний коммит.Пример SQL-запросов для мониторинга.
Основная нода — состояние репликации
SELECT
application_name,
client_addr,
state,
sync_state,
write_lag,
flush_lag,
replay_lag
FROM pg_stat_replication;
Основная нода — минимальная проверка подключённых реплик
SELECT *
FROM pg_stat_replication;
Резервная нода — время последнего применённого коммита
SELECT pg_last_xact_replay_timestamp();
Резервная нода — оценка отставания по времени
SELECT now() - pg_last_xact_replay_timestamp() AS replay_delay;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1