database_info | Unsorted

Telegram-канал database_info - Базы данных (Data Base)

6213

Базы данных (Data Base). По всем вопросам @evgenycarter

Subscribe to a channel

Базы данных (Data Base)

Как быстро найти “тяжёлые” запросы в PostgreSQL

Сегодня покажу простой способ найти самые ресурсоёмкие запросы, которые прямо сейчас выполняются в PostgreSQL. Это помогает, когда база начинает “тормозить”, а понять почему — сложно.

Используем pg_stat_activity и pg_stat_statements. Но сначала убедись, что pg_stat_statements включён:

-- Проверка:
SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';

-- Включение (если не установлен):
CREATE EXTENSION pg_stat_statements;


Теперь сам запрос на поиск “тяжёлых” запросов:

SELECT
query,
calls,
total_exec_time,
mean_exec_time,
rows
FROM
pg_stat_statements
ORDER BY
total_exec_time DESC
LIMIT 5;


А если интересует то, что прямо сейчас выполняется — тогда так:

SELECT
pid,
now() - query_start AS duration,
state,
query
FROM
pg_stat_activity
WHERE
state != 'idle'
ORDER BY
duration DESC;


Я часто сохраняю эти запросы в отдельный .sql-файл, чтобы запускать сразу при проблемах с производительностью. Полезно добавить в .psqlrc алиас или даже обернуть в скрипт.

Как вы ищете “тяжёлые” запросы в проде? Поделитесь в комментариях.

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🚀 Сегодня покажу, как быстро диагностировать «тормоза» в PostgreSQL — без всяких внешних тулов и дополнительных логов. Только pg_stat_activity и немного здравого смысла.


🔍 Проблема: пользователи жалуются — "всё тормозит". Как понять, что именно?

💡 Решение: открываем сессию в psql от суперпользователя и запускаем:


SELECT pid, state, wait_event_type, wait_event, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY duration DESC;


📌 Что это нам даёт:
- Видим все активные (и зависшие) запросы.
- Сколько времени они уже выполняются (duration).
- На чём конкретно «висят»: CPU, IO, Lock, Client и т.д. (wait_event_type + `wait_event).

Пример:

wait_event_type: Lock
wait_event: relation

→ Сразу ясно: кто-то держит блокировку на таблицу, и все остальные ждут.


🔥 Бонус: чтобы найти виновника, можно запустить:


SELECT blocked_locks.pid AS blocked_pid,
blocking_locks.pid AS blocking_pid,
blocked_activity.query AS blocked_query,
blocking_activity.query AS blocking_query
FROM pg_locks blocked_locks
JOIN pg_locks blocking_locks ON blocked_locks.locktype = blocking_locks.locktype
AND blocked_locks.database IS NOT DISTINCT FROM blocking_locks.database
AND blocked_locks.relation IS NOT DISTINCT FROM blocking_locks.relation
AND blocked_locks.page IS NOT DISTINCT FROM blocking_locks.page
AND blocked_locks.tuple IS NOT DISTINCT FROM blocking_locks.tuple
AND blocked_locks.transactionid IS NOT DISTINCT FROM blocking_locks.transactionid
AND blocked_locks.classid IS NOT DISTINCT FROM blocking_locks.classid
AND blocked_locks.objid IS NOT DISTINCT FROM blocking_locks.objid
AND blocked_locks.objsubid IS NOT DISTINCT FROM blocking_locks.objsubid
AND blocked_locks.pid != blocking_locks.pid
JOIN pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid
JOIN pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid
WHERE NOT blocked_locks.granted;


Этот запрос покажет, кто кого блокирует, и с каким запросом.

🙌 Это простая, но мощная техника диагностики. Помогала мне не раз в проде — особенно, когда времени мало, а багов много.

Ты пользуешься pg_stat_activity в проде? Или сразу лезешь в лог? Расскажи в комментах!


#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🧩 Как сделать backup PostgreSQL с минимальной нагрузкой на прод?

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

Сценарий: у нас есть продовый PostgreSQL и настроенная горячая реплика (streaming replication). Зачем использовать реплику для бэкапа?

Причины:
- 💡 На проде бэкап может замедлить отклик приложения.
- 🔁 Реплика — отличный способ разгрузить основной сервер.
- ⏱ Бэкап с pg_basebackup возможен только на стопнутой БД или через репликацию.

Как сделать:


pg_basebackup -h replica.host -U repl_user -D /backup/pg -F tar -z -P


Пояснения:
- -h — адрес реплики
- -U — пользователь с правами репликации
- -D — куда класть бэкап
- -F tar -z — формат архива и сжатие
- -P — прогресс в консоли

Важно:
Пользователь repl_user должен быть прописан в pg_hba.conf и иметь роль REPLICATION.

А если добавить в cron, то получишь стабильный ночной бэкап без боли.

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Хотите свести к минимуму риск потери информации?

Тогда ждём вас на вебинаре «Как обеспечить отказоустойчивость хранилищ данных»

В результате вы сможете:
- Разобраться в стратегии репликации, резервного копирования и автоматического фейловера
- Изучить архитектурные решения и инструменты для проектирования систем с высокой доступностью
- Эффективно сохранять данные при сбоях
- Улучшить пользовательский опыт

Будет интересно сисадминам, разработчикам, архитекторам ПО, IT-менеджерам, администраторам БД.

Спикер: Дмитрий Золотов, Kotlin-разработчик в «Яндексе».

Бонус! Всем участникам – скидка 5% на любой курс и гайд «Разбор ошибок: 5 распространённых проблем при проектировании отказоустойчивых хранилищ»

3 апреля, в 19:00 МСК, Бесплатно

Записаться на событие - https://otus.pw/8vSS/?erid=2W5zFGdDo1A

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Читать полностью…

Базы данных (Data Base)

Подборка Telegram каналов для программистов

/channel/bash_srv Bash Советы
/channel/win_sysadmin Системный Администратор Windows
/channel/lifeproger Жизнь программиста. Авторский канал.
/channel/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
/channel/rabota1C_rus Вакансии для программистов 1С

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
/channel/DevLab1C 1С:Предприятие 8

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Базы данных (Data Base)

❓Хотите стать C#-разработчиком, но боитесь, что будет сложно?

Подготовьтесь заранее и освойте Git — ключевой инструмент командной разработки!

На открытом вебинаре 31 марта в 20:00 мск разберем:

◽️ Систему контроля версий

◽️ Основные команды

◽️ Принципы работы с репозиториями

◽️ Эти знания помогут вам уверенно работать в команде и подготовиться к следующему этапу.

С Git вы сможете эффективно управлять кодом, вести проекты и двигаться к позиции Junior и Middle.

🔗 Регистрируйтесь на вебинар и 🎁 получите скидку на большое обучение «C# Developer»: https://vk.cc/cKdHxS

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Базы данных (Data Base)

📊 Зачем DBA нужно уметь читать планы выполнения запросов (EXPLAIN)?

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

Когда приходит запрос от разработчика: "Почему тормозит?" — ты открываешь EXPLAIN (ANALYZE, BUFFERS) и видишь:


Seq Scan on users (cost=0.00..44231.00 rows=1000000 width=64)
Filter: (status = 'active')


И тут всё понятно: фильтрация идёт по колонке без индекса, Postgres делает полный проход по таблице. Один CREATE INDEX — и запрос летит 🚀

Но не всё так просто. Иногда план говорит:


Index Scan using idx_users_status on users
Index Cond: (status = 'active')


А запрос всё равно медленный. Почему?

➡️ Buffers: shared hit=5 read=100000 dirtied=0 — вот оно. Индекс-то используется, но данные не в кэше, приходится читать с диска. А диск медленный. Решение? Подумать о горячем кэше, пачке RAM или REINDEX, если индекс раздулся.

Каждый EXPLAIN — как рентген. Не читаешь — лечишь наугад.

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🧹 VACUUM FULL — спасение от bloated-таблиц или тихий враг?

Сегодня хочу поговорить о том, что многие DBA используют как "универсальную таблетку" — VACUUM FULL. Но стоит ли?

💡 Что делает VACUUM FULL:
Он полностью перебирает таблицу и создаёт её заново, убирая все мёртвые строки. Результат — таблица становится компактной, как после дефрагментации. Это помогает, если у тебя:

- Много UPDATE или DELETE
- Таблица разрослась до абсурдных размеров
- Autovacuum не справляется

🔎 Как понять, что таблица bloated:


SELECT
schemaname, relname,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
pg_size_pretty(pg_relation_size(relid)) AS table_size,
(pg_total_relation_size(relid) - pg_relation_size(relid)) AS index_overhead
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;


Если table_size сильно больше, чем объём живых данных — у тебя блоат.

⚠️ Осторожно: VACUUM FULL = эксклюзивная блокировка!

Пока он работает:
- Все запросы к таблице ждут
- Могут “залипать” аппы
- В проде без окон — 💥

🛠 Что делать вместо:
- Пробовать pg_repack — он делает примерно то же, но без блокировок
- Делать регулярный autovacuum + мониторинг
- Разбивать массивные UPDATE/DELETE на батчи

VACUUM FULL — это инструмент, который стоит использовать осознанно. Как хирургический скальпель — мощный, но не для каждодневного применения. А ты когда последний раз делал VACUUM FULL в проде? 😏

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🧠 Почему PostgreSQL иногда "зависает" на UPDATE и как это пофиксить

Сегодня я расскажу про одну интересную особенность PostgreSQL, с которой сталкивался лично: внезапные подвисания при UPDATE большого количества строк. Причём CPU почти не загружен, а запрос как будто "висит".

📌 Проблема часто кроется в отсутствии индекса на колонку фильтра в WHERE. Пример:


UPDATE orders SET status = 'archived' WHERE created_at < '2022-01-01';


Если на created_at нет индекса, то PostgreSQL делает sequential scan всей таблицы. А теперь внимание: если в таблице много "мертвых" строк, которых ещё не убрал autovacuum, то PostgreSQL должен:

1. Прочитать кучу ненужных версий строк (MVCC).
2. Проверять видимость каждой строки.
3. Иногда ещё и ждать завершения других транзакций, держащих старые снапшоты.

🛠 Что делать:
- Проверить наличие индекса на колонку фильтра:

CREATE INDEX idx_orders_created_at ON orders(created_at);

- Проверить состояние autovacuum:

SELECT relname, n_dead_tup, last_vacuum, last_autovacuum
FROM pg_stat_user_tables ORDER BY n_dead_tup DESC;

- Можно вручную запустить:

VACUUM ANALYZE orders;


🔥 Лайфхак: если UPDATE всё равно медленный, попробуй его разбить на батчи по 10 000 строк. Это снизит нагрузку и ускорит выполнение.


#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

💪 Качаем скиллы PostgreSQL!

10 апреля 2025 года пройдет бесплатное комьюнити-мероприятие из серии PG BootCamp Russia — конференция, направленная на приобретение практических навыков при работе с СУБД PostgreSQL.

🔵Программа рассчитана как на начинающих специалистов, так и на более опытных разработчиков, желающих углубить знания в части ядра и экосистемы продукта
🔵 Ведущие эксперты в области СУБД проведут мастер-классы и лекции по наиболее востребованным и интересным темам
🔵Для тех, кто не сможет присутствовать очно, предусмотрена онлайн-трансляция

🧑‍🎓 Все участники получат электронные сертификаты, подтверждающие приобретение новых знаний и навыков.

📌 Дата и время: 10 апреля, в 10:00 (по ЕКБ)
Формат: офлайн/онлайн
Место проведения: конгресс-отель «Екатеринбург»

✅ Зарегистрируйтесь сейчас и приготовьтесь к захватывающему путешествию в мир СУБД!

Реклама. ООО «ТАНТОР ЛАБС», ОГРН 1217700399949

Читать полностью…

Базы данных (Data Base)

Подборка Telegram каналов для программистов

/channel/bash_srv Bash Советы
/channel/win_sysadmin Системный Администратор Windows
/channel/lifeproger Жизнь программиста. Авторский канал.
/channel/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
/channel/rabota1C_rus Вакансии для программистов 1С

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
/channel/DevLab1C 1С:Предприятие 8

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Базы данных (Data Base)

Как индекс может замедлить запрос?

Сейчас разберём интересный парадокс: почему индекс может замедлить выполнение запроса? 🤔

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

🚀 1. Неправильный выбор индекса
Допустим, у нас есть индекс по created_at, а мы выполняем запрос:


SELECT * FROM orders WHERE YEAR(created_at) = 2024;

Проблема в том, что функция YEAR(created_at) делает так, что индекс не используется эффективно. База данных должна пройтись по всем строкам, применяя функцию ко всем значениям. Лучше переписать так:

SELECT * FROM orders WHERE created_at >= '2024-01-01' AND created_at < '2025-01-01';

Теперь индекс сможет работать оптимально. 🔥

🏗 2. Слишком широкий индекс (Over-indexing)
Если у нас слишком много индексов на таблице, это приведёт к замедлению операций INSERT, UPDATE, DELETE. Почему? Потому что каждый раз при изменении данных БД должна обновлять все индексы. Поэтому добавляйте индексы осознанно!

📦 3. Низкая селективность индекса
Допустим, у нас есть индекс по status, но всего три возможных значения ('new', 'processing', 'done'). Если в таблице миллионы строк, но мало уникальных значений, индекс бесполезен — оптимизатор может решить, что проще выполнить полный скан таблицы.

⚠️ 4. Ошибка с покрывающим индексом
Иногда индекс покрывает все нужные колонки (INDEX(col1, col2, col3)), но запрос выбирает ещё одну (col4). Тогда база вынуждена обращаться к самой таблице, что убивает эффективность индекса.

📌 Вывод: индекс — мощный инструмент, но его неправильное использование может навредить. Перед добавлением индексов всегда анализируйте планы выполнения запросов (EXPLAIN в MySQL, EXPLAIN ANALYZE в PostgreSQL).

💬 Делитесь в комментариях, сталкивались ли вы с проблемами из-за индексов?

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Оптимизируем SQL-запросы – индексы, которые вы могли забыть

Оптимизация SQL-запросов – это как чистка кода: делаешь вовремя, и всё летает, откладываешь – потом разгребаешь баги и тормоза. Сегодня о трёх индексах, которые часто упускают:

Составные индексы
Ошибка: делать индекс на одно поле, если запрос использует WHERE col1 = X AND col2 = Y.
Правильный индекс:


CREATE INDEX idx_example ON table_name (col1, col2);

📌 Запрос ускорится, потому что БД не будет делать лишние проверки.

Индекс для ORDER BY
Ошибка: сортировка без индекса приводит к сканированию всей таблицы.
Решение – индекс в порядке сортировки:

CREATE INDEX idx_order ON table_name (col1 ASC);


Индекс на FOREIGN KEY
Ошибка: внешний ключ без индекса – медленный джойн.
Исправляем:

CREATE INDEX idx_fk ON table_name (foreign_key_column);


🔍 Бонус: если не знаете, какой индекс поможет – посмотрите EXPLAIN ANALYZE в PostgreSQL или EXPLAIN в MySQL.

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🔔 PostgreSQL уже не справляется? Пора на новый уровень!

В мире больших данных время — главный ресурс. Если вам нужны мощные аналитические запросы, горизонтальное масштабирование и высокая производительность, пора знакомиться с Arenadata DB (Greenplum).

📅 На открытом вебинаре 4 марта в 18:30 МСК разберем:

- Отличия MPP ArenadataDB от PostgreSQL
- Как запускать и останавливать кластер
- Как писать аналитические запросы, чтобы получать максимум

👨‍🏫 Спикер: Алексей Железной — Senior Data Engineer с большим опытом и широким технологическим стеком.

🔗 Регистрируйтесь и получите скидку на большое обучение «Greenplum для разработчиков и архитекторов баз данных»: https://vk.cc/cIWW7E

Не упустите возможность поднять свои навыки на новый уровень! 💪

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Базы данных (Data Base)

🔥 Оптимизация запросов: Как убрать тормоза в SQL?

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

🚀 Разбор примера
Допустим, у нас есть такой запрос:


SELECT *
FROM orders
WHERE customer_id = 123
ORDER BY order_date DESC;


Кажется простым, но выполняется медленно. В чём может быть проблема?

📌 Основные причины тормозов:
1️⃣ Нет нужного индекса – если customer_id или order_date не индексированы, база будет делать полный скан таблицы.
2️⃣ Слишком много данных – если таблица огромная, ORDER BY без индекса будет работать медленно.
3️⃣ Использование SELECT * – загружает ненужные колонки и увеличивает нагрузку.

✅ Как ускорить?
Добавляем индекс (если его нет):

CREATE INDEX idx_orders_customer ON orders(customer_id, order_date DESC);

Выбираем только нужные колонки:

SELECT order_id, order_date
FROM orders
WHERE customer_id = 123
ORDER BY order_date DESC;

Лимитируем выборку (если нужен только последний заказ):

SELECT order_id, order_date
FROM orders
WHERE customer_id = 123
ORDER BY order_date DESC
LIMIT 1;


🔥 Итог
Добавление индекса + правильный выбор колонок + LIMIT = в разы быстрее! 🚀

А какие приёмы оптимизации запросов используете вы? Делитесь в комментариях!

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🚀 Подпишись и прокачай свои скилы: лучшие каналы для IT-специалистов 👨‍💻📲

Папка с каналами для DevOps, Linux - Windows СисАдминов 👍

Папка с каналами для 1С программистов 🧑‍💻

Папка с каналами для C++ программистов 👩‍💻

Папка с каналами для Python программистов 👩‍💻

Папка с каналами для Java программистов 🖥

Папка с книгами для программистов 📚

Папка для программистов (frontend, backend, iOS, Android) 💻


GitHub Сообщество 🧑‍💻
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 🖥
/channel/database_info Все про базы данных


Разработка игр 📱
/channel/game_devv Все о разработке игр

БигДата, машинное обучение 🖥
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning


QA, тестирование 🖥
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 💻
/channel/thehaking Канал о кибербезопасности
/channel/xakep_2 Хакер Free

Книги, статьи для дизайнеров 🎨
/channel/ux_web Статьи, книги для дизайнеров

Математика 🧮
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак🙃
/channel/Excel_lifehack

Технологии 🖥
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 💰
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
/channel/rabota1C_rus Вакансии для программистов 1С

Читать полностью…

Базы данных (Data Base)

PostgreSQL 17: архитектура и тюнинг SQL-запросов

Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.

🌐 В программе курса:

🤩 Разберем, как работают СУБД вообще и PostgreSQL в частности: что такое MVCC, ACID, WAL, LRU, PPC/TPC и другие фундаментальные понятия архитектуры баз данных
🤩 Получите свой собственный выделенный облачный PostgreSQL-сервер (8 vCPU, 12G RAM, 100G NVMe) – БЕСПЛАТНО на время обучения предоставляется
🤩 Получите теорию и практику EXPLAIN и EXPLAIN ANALYZE на разных типа запросов
🤩 Изучите архитектуру хранения данных в PostgreSQL, типы и особенности индексов, а также получите полезные советы и трюки оптимизации БД

🗓 Старт курса: 24 апреля. Продолжительность: 5 недель обучения (четверг, 18:00 МСК).

Изучить программу и записаться можно здесь.

🤩Кто мы: R&D-центр Devhands, основатель школы Алексей Рыбак.
Автор курса — Николай Ихалайнен, эксперт по СУБД (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquiQ76e

Читать полностью…

Базы данных (Data Base)

🎯 Сегодня покажу простой способ ускорить запросы в PostgreSQL, даже не трогая сам SQL-код.

Часто вижу, как разработчики и админы оптимизируют запросы, играя с индексами или переписывая JOIN'ы. Но забывают про один мощный инструмент — ANALYZE.

ANALYZE обновляет статистику по таблицам. Эта статистика — хлеб для планировщика запросов. Если она устарела, PostgreSQL может выбрать неэффективный план, даже если у вас всё индексировано как надо.

👨‍🔧 Простой пример:


ANALYZE my_big_table;


Запускаешь — и вдруг сложный JOIN срабатывает в разы быстрее. Потому что PostgreSQL теперь знает, какие там объемы данных, сколько уникальных значений в колонках и т.п.

🧠 Совет: если ты регулярно заливаешь данные в таблицы (например, через ETL или бэкапы) — добавь ANALYZE в конец процедуры. Это дёшево, но может дать мощный прирост производительности.

Можно даже так:

VACUUM ANALYZE my_big_table;


Так ты и "мусор" уберёшь, и статистику обновишь за один проход.


#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🧩 Сегодня покажу вам простой, но крайне полезный приём, как находить “тяжёлые” запросы в PostgreSQL, которые тормозят базу.

📌 Если у вас база под нагрузкой, и “что-то всё стало медленно”, первым делом проверьте:


SELECT pid, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC
LIMIT 5;


Этот запрос показывает топ-5 самых долгих активных запросов. Обратите внимание на query_start — именно он поможет понять, кто завис и тормозит остальных.

А если хотите посмотреть историю медленных запросов за последние часы/дни — подключайте pg_stat_statements:


SELECT
calls,
total_time,
mean_time,
query
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;


🔍 Тут видно, какие запросы в сумме "съели" больше всего времени. И это гораздо честнее, чем смотреть только на mean_time или calls по отдельности.

💡 Совет: подключите pg_stat_statements на проде и делайте такой анализ хотя бы раз в неделю. Это поможет находить проблемные места в приложении до того, как начнётся пожар.

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Сегодня расскажу вам про одну часто недооценённую, но крайне полезную SQL-фишку — CROSS APPLY в SQL Server (и его аналог в других СУБД — LATERAL).

Когда обычный JOIN бессилен

Допустим, у нас есть таблица Orders, и мы хотим для каждой строки выбрать топ-1 продукт по сумме, но выборка зависит от строки — тут уже обычный JOIN не справится. Вот пример, где приходит на помощь CROSS APPLY:


SELECT
o.OrderID,
p.ProductName,
p.Amount
FROM Orders o
CROSS APPLY (
SELECT TOP 1 *
FROM Products p
WHERE p.OrderID = o.OrderID
ORDER BY p.Amount DESC
) p;


Что делает CROSS APPLY?

Он буквально говорит: «Для каждой строки из Orders выполни подзапрос с её параметрами». Это похоже на foreach, где внутренняя выборка может меняться в зависимости от строки внешней таблицы.

Аналог в PostgreSQL:


SELECT
o.order_id,
p.product_name,
p.amount
FROM orders o,
LATERAL (
SELECT *
FROM products p
WHERE p.order_id = o.order_id
ORDER BY p.amount DESC
LIMIT 1
) p;




🔥 Используйте CROSS APPLY, когда:
- Нужна подстрочная логика внутри запроса
- Не получается реализовать через обычный JOIN
- Вы работаете с функциями, которые возвращают таблицу (TVF)


#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Как работают джойны SQL?

На приведенной ниже схеме подробно показано, как работают 4 типа объединений SQL.

🔹INNER JOIN возвращает совпадающие строки в обеих таблицах
🔹LEFT JOIN возвращает все записи из левой таблицы и соответствующие записи из правой
🔹RIGHT JOIN возвращает все записи из правой таблицы и соответствующие записи из левой
🔹FULL OUTER JOIN возвращает все записи, в которых есть совпадения, в левой или правой таблице

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Ждать будущее или создавать его? Команда Navio за второй вариант: мы разрабатываем и внедряем инновации, меняющие транспортную отрасль. Вы можете к нам присоединиться!

Мы активно развиваемся и приглашаем в компанию экспертов в области инженерии данных и машинного обучения. Вы будете работать с большими данными и оптимизировать системы. Мы открыты к новым идеям: если у вас появится предложение, будут все возможности реализовать задуманное.

Navio — разработчик технологии автономного вождения с применением искусственного интеллекта. Мы создаём решения, которые делают транспорт безопаснее и комфортнее.

Выбирайте вакансию и отправляйте отклик.

Читать полностью…

Базы данных (Data Base)

🚀 Ваша база данных уже не справляется с нагрузкой?

Запросы тормозят, индексы не помогают, а миллиарды строк превращают аналитику в настоящую пытку? PostgreSQL умеет работать с Big Data, но важно знать, как правильно его настроить.

📅 На открытом вебинаре 27 марта в 20:00 МСК мы разберем проверенные способы разгона PostgreSQL для высоконагруженных систем.

🔍 На вебинаре мы разберем:
- Как эффективно масштабировать хранилище?
- Когда переходить на партицирование?
- Как объединить PostgreSQL с ClickHouse для быстрой аналитики?

👨‍🏫 Спикер: Дмитрий Золотов — разработчик мобильных приложений на Flutter в Яндекс Про и ментор.

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

💡 Регистрируйтесь и получите скидку на большое обучение «PostgreSQL. Advanced»: https://vk.cc/cKbsuV

Не упустите возможность улучшить производительность вашей базы данных!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Базы данных (Data Base)

Оптимизация запросов: как найти узкое место? 🔍

Привет, коллеги! Сегодня я покажу вам, как находить узкие места в SQL-запросах и оптимизировать их. Если ваш запрос работает медленно, скорее всего, проблема в одном из трех мест:

1️⃣ Неверные индексы
- Проверьте EXPLAIN ANALYZE, если используется Seq Scan вместо Index Scan, значит, индексы либо отсутствуют, либо неэффективны.
- Добавьте индексы на часто фильтруемые и соединяемые поля.

2️⃣ Проблемные JOIN'ы
- Проверьте, какие типы JOIN используются. NESTED LOOP JOIN может быть проблемой на больших таблицах.
- Используйте HASH JOIN или MERGE JOIN, если это возможно.

3️⃣ Громоздкие операции (GROUP BY, ORDER BY, DISTINCT)
- Сортировка и группировка требуют много ресурсов.
- Можно ли заменить DISTINCT на EXISTS?
- Используйте индексированные столбцы в ORDER BY.

Вот вам задача:
Какой тип JOIN наиболее эффективен для соединения двух больших таблиц? Пишите свои мысли в комментариях! 👇

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

SQL JOINs наглядно: как работать с объединением таблиц

Хотите лучше понимать SQL JOIN? Вот наглядная шпаргалка с примерами и визуализацией!

🔹 INNER JOIN – пересечение двух таблиц, возвращает только совпадающие строки.

SELECT *
FROM A
INNER JOIN B ON A.key = B.key;


🔹 FULL JOIN – объединяет все данные из обеих таблиц, заполняя пропущенные значения NULL.

SELECT *
FROM A
FULL JOIN B ON A.key = B.key;


🔹 FULL JOIN с фильтрацией NULL – выбирает только строки, которые есть только в одной из таблиц.

SELECT *
FROM A
FULL JOIN B ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL;


🔹 LEFT JOIN – возвращает все строки из A и совпадающие строки из B.

SELECT *
FROM A
LEFT JOIN B ON A.key = B.key;


🔹 LEFT JOIN (только уникальные в A) – возвращает только строки из A, которых нет в B.

SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL;


🔹 RIGHT JOIN – аналогично LEFT JOIN, но с приоритетом B.

SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key;


🔹 RIGHT JOIN (только уникальные в B) – выбирает строки, которые есть в B, но отсутствуют в A.

SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
WHERE B.key IS NULL;


Сохраняйте в закладки и пользуйтесь! ⚡

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Визуализация SQL-запросов

Ментальная модель, помогающая представить, как выполняются SQL-запросы.

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

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

Комплексное техническое руководство для опытных администраторов баз данных: Обеспечение целостности данных

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

https://bookflow.ru/kompleksnoe-tehnicheskoe-rukovodstvo-dlya-opytnyh-administratorov-baz-dannyh-obespechenie-tselostnosti-dannyh/

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🔍 Как ускорить SELECT в больших таблицах?

Сегодня расскажу, как можно ускорить выборку данных из больших таблиц. Если у вас запрос SELECT тормозит, попробуйте эти методы:

1️⃣ Индексы
Без индексов даже самый мощный сервер не спасёт. Используйте B-Tree для точных совпадений (=) и диапазонов (BETWEEN). Для полнотекстового поиска — GIN или Full-Text Index.

2️⃣ EXPLAIN ANALYZE
Перед оптимизацией всегда проверяйте план запроса:


EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending';

Ищите Seq Scan (последовательное сканирование) – оно медленное. Заменяйте его на Index Scan или Bitmap Index Scan.

3️⃣ Ограничение выборки
Не грузите тысячи строк, если нужно 10 записей:

SELECT * FROM logs ORDER BY created_at DESC LIMIT 10;

Такой запрос работает быстрее, чем выборка всего.

4️⃣ Партиционирование
Разделяйте большие таблицы по дате, ID или другому критерию. Например, если у вас логи за 5 лет, можно хранить их по месяцам.

5️⃣ Материализованные представления
Если отчёты строятся медленно, попробуйте кэшировать результат:

CREATE MATERIALIZED VIEW fast_report AS
SELECT status, COUNT(*) FROM orders GROUP BY status;

Обновлять можно по расписанию:

REFRESH MATERIALIZED VIEW fast_report;


#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

🔥 Оптимизация индексов: частая ошибка DBA 🔥

Сегодня разберём распространённую ошибку, которую совершают многие администраторы баз данных — избыточные индексы.

💡 Проблема
Добавление индексов — это полезно, но если их становится слишком много, то база данных начинает тормозить при вставке, обновлении и удалении данных. Почему? Потому что каждый индекс требует дополнительного обслуживания при изменениях в таблице.

💡 Пример ошибки
Представим таблицу orders:


CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
total DECIMAL(10,2) NOT NULL
);

Допустим, мы добавляем индексы:

CREATE INDEX idx_customer ON orders(customer_id);
CREATE INDEX idx_order_date ON orders(order_date);
CREATE INDEX idx_customer_order_date ON orders(customer_id, order_date);

На первый взгляд, всё логично, но есть проблема: индекс idx_customer_order_date покрывает оба предыдущих индекса!

💡 Как исправить?
Можно удалить idx_customer и idx_order_date, так как составной индекс (idx_customer_order_date) способен выполнять их работу.

📌 Как проверить ненужные индексы?
1️⃣ В PostgreSQL:

SELECT indexrelid::regclass, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
ORDER BY pg_relation_size(indexrelid) DESC;

2️⃣ В MySQL:

SHOW INDEX FROM orders;

Здесь ищем индексы, которые дублируют друг друга.

Вывод
Чем меньше избыточных индексов — тем быстрее работает ваша база данных. Проверьте свои индексы прямо сейчас!

#db

👉 @database_info

Читать полностью…

Базы данных (Data Base)

📍Геоданные и временные ряды в Spark: хаос или порядок?

GPS-координаты, карты, временные метки — данные есть, но как с ними работать? Стандартные методы тормозят, запросы громоздкие, аналитика требует вечности.

💡Есть решение. На открытом вебинаре «Обработка геопространственных и временных данных на Spark» 11 марта в 20:00 (мск):

- Разберём пространственные данные: координаты, маршруты, карты
- Научимся анализировать временные ряды с трендами и предсказаниями
- Проанализируем реальные кейсы: GPS-данные, сенсоры IoT, анализ движения

📢 Спикер Вадим Заигрин — опытный разработчик, Data Engineer и Data Scientist. Team Lead команд инженеров данных на разных проектах.

Все участники получат скидку на большое обучение «Spark Developer».

➡️ Регистрируйтесь, чтобы не пропустить: https://vk.cc/cIVWOd

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…
Subscribe to a channel