This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл штуку, которая делает PostgreSQL понятным даже для чайников 🙂
Это визуальная надстройка над Postgres, которая превращает его в нечто среднее между Airtable и Excel. Таблицы, связи, формы — всё редактируется прямо в браузере, без SQL.
👉 @SQLPortal
Это визуальная надстройка над Postgres, которая превращает его в нечто среднее между Airtable и Excel. Таблицы, связи, формы — всё редактируется прямо в браузере, без SQL.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯10❤5👍5
This media is not supported in your browser
VIEW IN TELEGRAM
В обновляемые представления можно вставлять строки
...но при этом возможно добавить данные, противоречащие условию
Из-за этого кажется, что значения просто исчезают!
Чтобы этого избежать, добавь:
Тогда вставлять можно будет только те строки, которые соответствуют условию
👉 @SQLPortal
...но при этом возможно добавить данные, противоречащие условию
WHERE
Из-за этого кажется, что значения просто исчезают!
Чтобы этого избежать, добавь:
CREATE VIEW ... AS SELECT ... WHERE ...
WITH CHECK OPTION
Тогда вставлять можно будет только те строки, которые соответствуют условию
WHERE
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё один отличный тренажёр для изучения SQL — SQL Teaching
Интерактивный сайт, где вы учитесь писать SQL-запросы в игровой форме. Всё происходит прямо в браузере: пишете — сразу видите результат
Бесплатно и опенсорс. Забираем здесь😊
👉 @SQLPortal
Интерактивный сайт, где вы учитесь писать SQL-запросы в игровой форме. Всё происходит прямо в браузере: пишете — сразу видите результат
Бесплатно и опенсорс. Забираем здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5❤4
Когда стоит сбрасывать
🔸 В начале нового периода мониторинга
Если ты анализируешь производительность на ежедневной, недельной или месячной основе, имеет смысл сбрасывать
🔸 После внесения значимых изменений в запросы
Если в приложении были переработаны запросы, оптимизирована логика или изменены индексы, сброс
🔸 Во время бенчмарков и тестирования производительности
Если ты запускаешь тесты производительности или сравниваешь эффективность разных вариантов запросов, сброс
🔸 После серьёзных операций по обслуживанию базы
После таких операций, как
👉 @SQLPortal
pg_stat_statements
?Если ты анализируешь производительность на ежедневной, недельной или месячной основе, имеет смысл сбрасывать
pg_stat_statements
в начале каждого периода. Это позволяет собирать метрики с «чистого листа» и получать более точную аналитику за конкретный интервал.Если в приложении были переработаны запросы, оптимизирована логика или изменены индексы, сброс
pg_stat_statements
помогает точнее отследить влияние этих изменений. Это также исключает устаревшие запросы, которые могут исказить результаты.Если ты запускаешь тесты производительности или сравниваешь эффективность разных вариантов запросов, сброс
pg_stat_statements
гарантирует, что собираемая статистика будет относиться только к выполненным в рамках теста запросам.После таких операций, как
pg_repack,
переиндексация или изменение структуры таблиц, сброс pg_stat_statements
позволяет объективно оценить, как они повлияли на производительность.Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Пользователи часто хотят получать отчёты из базы данных, адаптированные под их нужды; запросы на такую кастомизацию могут со временем превратить систему в нечто вроде
Товарищ рассказывает историю одной такой системы, где в итоге один из пользователей удалил критичные данные:
https://idiallo.com/blog/sql-injection-as-a-feature
Берегите свои данные, коллеги!🐒
👉 @SQLPortal
SQL-инъекции как сервис
Товарищ рассказывает историю одной такой системы, где в итоге один из пользователей удалил критичные данные:
https://idiallo.com/blog/sql-injection-as-a-feature
Берегите свои данные, коллеги!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Подготовленные выражения / параметризованные запросы в Postgres
Подготовленные выражения — это повторно используемые SQL-запросы, которые позволяют обойти стадию планирования, повторно используя уже построенный план выполнения и подставляя разные данные.
Полноценный SQL-запрос в Postgres проходит через следующие этапы:
- Парсинг — преобразование в внутреннее представление;
- Переписывание / трансформация — применение правил переписывания запроса, создание внутренних представлений (например, CTE или view);
- Планирование — планировщик Postgres использует статистику по таблицам и другую информацию, чтобы выбрать оптимальный план выполнения;
- Выполнение — непосредственный запуск запроса.
Подготовленные выражения используют тот же SQL и сохраняют первые три шага. Это значит, что при выполнении остаётся только извлечь данные — Postgres может полностью пропустить стадию планирования.
Пример
Подготовить запрос и сохранить план выполнения
Выполнить с одним параметром
Выполнить с другим параметром
Освободить ресурсы
ORM'ы часто работают с подготовленными выражениями, и это может значительно повысить производительность приложений. Со стороны приложения такие запросы обычно называют параметризованными. Параметризованный запрос содержит плейсхолдеры, которые заполняются значениями позже. Такой запрос на стороне БД превращается в подготовленное выражение.
Примеры в коде
В Rails:
В Python:
👉 @SQLPortal
Подготовленные выражения — это повторно используемые SQL-запросы, которые позволяют обойти стадию планирования, повторно используя уже построенный план выполнения и подставляя разные данные.
Полноценный SQL-запрос в Postgres проходит через следующие этапы:
- Парсинг — преобразование в внутреннее представление;
- Переписывание / трансформация — применение правил переписывания запроса, создание внутренних представлений (например, CTE или view);
- Планирование — планировщик Postgres использует статистику по таблицам и другую информацию, чтобы выбрать оптимальный план выполнения;
- Выполнение — непосредственный запуск запроса.
Подготовленные выражения используют тот же SQL и сохраняют первые три шага. Это значит, что при выполнении остаётся только извлечь данные — Postgres может полностью пропустить стадию планирования.
Пример
Подготовить запрос и сохранить план выполнения
PREPARE get_user_by_email (text) AS
SELECT * FROM users WHERE email = $1;
Выполнить с одним параметром
EXECUTE get_user_by_email('alice@test.com');
Выполнить с другим параметром
EXECUTE get_user_by_email('bob@test.com');
Освободить ресурсы
DEALLOCATE get_user_by_email;
ORM'ы часто работают с подготовленными выражениями, и это может значительно повысить производительность приложений. Со стороны приложения такие запросы обычно называют параметризованными. Параметризованный запрос содержит плейсхолдеры, которые заполняются значениями позже. Такой запрос на стороне БД превращается в подготовленное выражение.
Примеры в коде
В Rails:
User.where("email = ?", "alice@test.com")
В Python:
cur.execute("SELECT * FROM users WHERE email = %s", ("alice@test.com",))
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Новичок в использовании
Попробуй этот простой веб-учебник:
https://crunchydata.com/developers/playground/query-performance-analytics
💡 Там есть пара отличных запросов, которые стоит сохранить для дальнейшего использования.
👉 @SQLPortal
pg_stat_statements
для анализа производительности запросов в Postgres?Попробуй этот простой веб-учебник:
https://crunchydata.com/developers/playground/query-performance-analytics
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Привет. Вот тебе самые топовые каналы по IT!
⚙️ Free Znanija (IT) — Самая огромная коллекция платных курсов, которые можно скачать бесплатно;
👩💻 IT Books — Самая огромная библиотека книг;
💻 Hacking & InfoSec Base — Крутой блог белого хакера;
🛡 CyberGuard — Всё про ИБ;
🤔 ИБ Вакансии— Всё, чтобы найти работу в ИБ;
👩💻 linux administration — Всё про Линукс;
👩💻 Программистика — Python, python и ещё раз python;
👩💻 GameDev Base — Всё про GameDev;
🖥 Coding Base — Мемы, полезные репозитории и инструменты, а так же софт:
😆 //code — Самые топовые мемы по IT:
А так же крутой блог админа: Rahol Jey | тг вайб
А так же крутой блог админа: Rahol Jey | тг вайб
Please open Telegram to view this post
VIEW IN TELEGRAM
Новая фича в PostgreSQL 17 — геймчейнджер
Эта новая возможность в PostgreSQL 17 настоящая революция.
🔸 Механика страниц в PostgreSQL
PostgreSQL, как и большинство СУБД, работает с страницами фиксированного размера.
Практически всё — таблицы, индексы и т.д. хранится в виде страниц размером 8 КБ.
Каждая страница содержит:
- строки таблицы или кортежи индекса
- фиксированный заголовок
Страницы это просто байты в файлах. Они читаются и кэшируются в буферном пуле
Примеры чтения страниц:
- Страница 0:
- Страница 1:
- Страница 7:
Если таблица занимает 100 страниц, то для full table scan придётся выполнить 100 системных вызовов.
А каждый системный вызов имеет накладные расходы.
🔸 Что изменилось в Postgres 17
Добавили возможность объединения I/O:
- Можно указать, сколько страниц читать за один системный вызов
- Теоретически можно просканировать всю таблицу за один системный вызов
Это не всегда хорошая идея, подробнее об этом ниже.
Также добавили поддержку векторизованного I/O:
- Используется системный вызов
- Он принимает массив оффсетов и длин — удобно для произвольного чтения
🔸 Проблема: не читать лишнего
Допустим, мы делаем
1. Читаем страницу 0
2. Находим нужное → выходим
3. Остальные страницы не нужны
Теперь с новой фичей:
- Мы читаем сразу 10 страниц одним I/O
- Загружаем всё в shared buffers
- А нужное было уже на первой странице
> Результат — потрачены ресурсы (диск, память) впустую
🔸 Как это сбалансировать
Нужно будет находить баланс:
- Между эффективным I/O
- И избежанием избыточного чтения
🔸 Примечание
PostgreSQL действительно вызывает системный вызов ядра, чтобы читать по 8 КБ за раз.
Но ядро может быть настроено на read-ahead — заранее читать больше и кэшировать это в файловом кэше ОС.
👉 @SQLPortal
Эта новая возможность в PostgreSQL 17 настоящая революция.
PostgreSQL, как и большинство СУБД, работает с страницами фиксированного размера.
Практически всё — таблицы, индексы и т.д. хранится в виде страниц размером 8 КБ.
Каждая страница содержит:
- строки таблицы или кортежи индекса
- фиксированный заголовок
Страницы это просто байты в файлах. Они читаются и кэшируются в буферном пуле
Примеры чтения страниц:
- Страница 0:
read(offset=0, size=8192)
- Страница 1:
read(offset=8193, size=8192)
- Страница 7:
read(offset=57345, size=8192)
Если таблица занимает 100 страниц, то для full table scan придётся выполнить 100 системных вызовов.
А каждый системный вызов имеет накладные расходы.
Добавили возможность объединения I/O:
- Можно указать, сколько страниц читать за один системный вызов
- Теоретически можно просканировать всю таблицу за один системный вызов
Это не всегда хорошая идея, подробнее об этом ниже.
Также добавили поддержку векторизованного I/O:
- Используется системный вызов
preadv
- Он принимает массив оффсетов и длин — удобно для произвольного чтения
Допустим, мы делаем
seq scan
, чтобы найти значение:1. Читаем страницу 0
2. Находим нужное → выходим
3. Остальные страницы не нужны
Теперь с новой фичей:
- Мы читаем сразу 10 страниц одним I/O
- Загружаем всё в shared buffers
- А нужное было уже на первой странице
> Результат — потрачены ресурсы (диск, память) впустую
Нужно будет находить баланс:
- Между эффективным I/O
- И избежанием избыточного чтения
PostgreSQL действительно вызывает системный вызов ядра, чтобы читать по 8 КБ за раз.
Но ядро может быть настроено на read-ahead — заранее читать больше и кэшировать это в файловом кэше ОС.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Media is too big
VIEW IN TELEGRAM
Интерактивная тренировка SQL
Если хочешь прокачать SQL на практике без установки СУБД и настройки окружения заходи на sqltest.online
👉 @SQLPortal
Если хочешь прокачать SQL на практике без установки СУБД и настройки окружения заходи на sqltest.online
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4🌭1
Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает?
Психолог взрослого человека — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам🤗
✓ Как научиться отвлекаться от работы и отдыхать?
✓ Как совместить кучу рабочих задач и время с семьей?
✓ Как справиться с прокрастинацией?
✓ Как не растерять запал, даже если начальник и коллеги💩 и кажется, что ничего не выходит?
Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
Псс. Заходите в закреп — там много полезного, и даже бесплатный мини-курс по выходу из апатии:
👉 https://t.me/+k0OmqMJdwsAxMDM6
Психолог взрослого человека — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам
✓ Как научиться отвлекаться от работы и отдыхать?
✓ Как совместить кучу рабочих задач и время с семьей?
✓ Как справиться с прокрастинацией?
✓ Как не растерять запал, даже если начальник и коллеги
Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни!
Псс. Заходите в закреп — там много полезного, и даже бесплатный мини-курс по выходу из апатии:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1
Amazon Aurora стала первой OLTP базой данных, которая популяризировала разделение хранения данных и вычислительных ресурсов.
Главным новшеством стала переработка слоя хранения с целью минимизировать операции записи (write I/O) для преодоления задержек, связанных с сетью.
Как бы круто это ни было, она всё же не может превзойти локальные NVMe SSD.
Ссылка на статью:
https://pages.cs.wisc.edu/~yxy/cs764-f20/papers/aurora-sigmod-17.pdf
На видео показана PlanetScale Metal на AWS против Aurora. Те же CPU и объем памяти при I/O-насыщенной нагрузке, похожей на TPCC.
Значительно выше QPS при при этом в 3 раза ниже p99 задержка
👉 @SQLPortal
Главным новшеством стала переработка слоя хранения с целью минимизировать операции записи (write I/O) для преодоления задержек, связанных с сетью.
Как бы круто это ни было, она всё же не может превзойти локальные NVMe SSD.
Ссылка на статью:
https://pages.cs.wisc.edu/~yxy/cs764-f20/papers/aurora-sigmod-17.pdf
На видео показана PlanetScale Metal на AWS против Aurora. Те же CPU и объем памяти при I/O-насыщенной нагрузке, похожей на TPCC.
Значительно выше QPS при при этом в 3 раза ниже p99 задержка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2