Когда вы в последний раз проверяли коэффициент попаданий в кэш?
В идеале, большая часть часто запрашиваемых данных должна находиться в буфере кэша. Для транзакционных нагрузок рекомендуется 98–99% попаданий; для аналитических — ниже.
Проверить коэффициент попаданий можно так:
Для клиентов Bridge метрика попаданий в кэш доступна в разделе Insights кластера
👉 @SQLPortal
В идеале, большая часть часто запрашиваемых данных должна находиться в буфере кэша. Для транзакционных нагрузок рекомендуется 98–99% попаданий; для аналитических — ниже.
Проверить коэффициент попаданий можно так:
SELECT
sum(heap_blks_read) as heap_read,
sum(heap_blks_hit) as heap_hit,
sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM
pg_statio_user_tables;
Для клиентов Bridge метрика попаданий в кэш доступна в разделе Insights кластера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Практический вопрос
Выберите дату, товар и цену из таблицы
👉 @SQLPortal
Выберите дату, товар и цену из таблицы
items_ordered
для всех строк, у которых значение цены находится в диапазоне от 10.00 до 80.00.Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Когда вы работаете напрямую в psql (CLI-редактор, поставляемый с Postgres), вы можете настроить автоформатирование результатов запроса в зависимости от размера шрифта и окна терминала.
Хотя это мелочь, она делает работу с данными в терминале гораздо удобнее. Всё управляется командой \x.
Чтобы вручную включить или отключить расширенный вывод, выполните:
\x
Это позволяет вручную переключать формат отображения результатов запроса. Но настоящая магия — в команде:
\x auto
Она автоматически выбирает наиболее подходящий формат в зависимости от текущего размера окна терминала.
(Кстати, вы можете прописать это в .psqlrc, чтобы настройка применялась автоматически при каждом подключении к Postgres)🪄
👉 @SQLPortal
Хотя это мелочь, она делает работу с данными в терминале гораздо удобнее. Всё управляется командой \x.
Чтобы вручную включить или отключить расширенный вывод, выполните:
\x
Это позволяет вручную переключать формат отображения результатов запроса. Но настоящая магия — в команде:
\x auto
Она автоматически выбирает наиболее подходящий формат в зависимости от текущего размера окна терминала.
(Кстати, вы можете прописать это в .psqlrc, чтобы настройка применялась автоматически при каждом подключении к Postgres)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥1
Попрактикуемся в SQL
Напишите запрос, который возвращает студентов, у которых есть хотя бы один предмет с оценкой NULL, используя приведённые выше таблицы
👉 @SQLPortal
Напишите запрос, который возвращает студентов, у которых есть хотя бы один предмет с оценкой NULL, используя приведённые выше таблицы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3
Если вы работаете с JSON в Postgres, вы, вероятно, заметили, что для этого существуют два отдельных типа данных. Так в чём разница между json и jsonb?
> json — лёгкое, необработанное хранение
> jsonb — структурированное, индексируемое и производительное
◘ json сохраняет текст в точности так, как он был введён, без обработки. Это, как правило, более лёгкий и быстрый вариант при записи, поскольку отсутствует дополнительный разбор. Однако операции с ним могут быть медленнее, так как разбор выполняется во время исполнения. Обычный json также не может быть проиндексирован.
◘ jsonb сохраняет данные в бинарном формате, при этом данные разбираются заранее при сохранении. jsonb обладает большей структурой (например, отсутствуют дублирующиеся ключи), может индексироваться и обеспечивает более быструю работу при выполнении запросов. Подавляющее большинство разработчиков, использующих JSON в Postgres, работают именно с jsonb.
👉 @SQLPortal
> json — лёгкое, необработанное хранение
> jsonb — структурированное, индексируемое и производительное
◘ json сохраняет текст в точности так, как он был введён, без обработки. Это, как правило, более лёгкий и быстрый вариант при записи, поскольку отсутствует дополнительный разбор. Однако операции с ним могут быть медленнее, так как разбор выполняется во время исполнения. Обычный json также не может быть проиндексирован.
◘ jsonb сохраняет данные в бинарном формате, при этом данные разбираются заранее при сохранении. jsonb обладает большей структурой (например, отсутствуют дублирующиеся ключи), может индексироваться и обеспечивает более быструю работу при выполнении запросов. Подавляющее большинство разработчиков, использующих JSON в Postgres, работают именно с jsonb.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл ресурс для создания SQL-баз данных:
✓ Генерируй таблицы и данные с помощью ИИ
✓ Визуализируй диаграммы и связи
✓ Деплой в Supabase в один клик
И главное — бесплатно → https://database.build/
👉 @SQLPortal
✓ Генерируй таблицы и данные с помощью ИИ
✓ Визуализируй диаграммы и связи
✓ Деплой в Supabase в один клик
И главное — бесплатно → https://database.build/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🌚4
Что такое векторная база данных?
От базовых понятий, таких как что такое вектор?, до продвинутых возможностей: настройка payload'ов, гибридный поиск, шардинг, мультитенантность, квантизация, RBAC и многое другое.
Эта статья охватывает всё, что нужно знать о векторных базах данных🌹
👉 @SQLPortal
От базовых понятий, таких как что такое вектор?, до продвинутых возможностей: настройка payload'ов, гибридный поиск, шардинг, мультитенантность, квантизация, RBAC и многое другое.
Эта статья охватывает всё, что нужно знать о векторных базах данных
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
В Postgres есть удобные команды psql, начинающиеся на \d, для получения информации о таблицах. Вот полезные примеры:
Таблицы
Индексы
Представления (views)
Эти команды экономят время при анализе схемы БД прямо из psql.
👉 @SQLPortal
Таблицы
\d
— список всех объектов (таблиц, вьюх, индексов и т.п.)\d <table_name>
— описание конкретной таблицы\dt
— список только таблиц\dti+
— таблицы с информацией о размере и типе\dp
— права доступа к таблицамИндексы
\di
— список всех индексов\di <index_name>
— описание конкретного индексаПредставления (views)
\dv
— список всех вьюх\dv <view_name>
— описание конкретной вьюхиЭти команды экономят время при анализе схемы БД прямо из psql.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥2
B-деревья — самая распространённая структура данных для индексов в базах данных.
Но как они работают?
Попробуй этот интерактивный онлайн-инструмент, чтобы увидеть это на практике:
> Дерево остаётся сбалансированным при добавлении новых значений
> Поиск ключей происходит путём обхода дерева
👉 @SQLPortal
Но как они работают?
Попробуй этот интерактивный онлайн-инструмент, чтобы увидеть это на практике:
> Дерево остаётся сбалансированным при добавлении новых значений
> Поиск ключей происходит путём обхода дерева
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥1
Избегай ошибок при приведении значений к другому типу данных в Oracle SQL с помощью:
Если значение не может быть преобразовано, будет возвращено
Это также работает в функциях, специфичных для типов, например
👉 @SQLPortal
CAST ( ... AS <data type> DEFAULT [ NULL | <val> ] ON CONVERSION ERROR )
Если значение не может быть преобразовано, будет возвращено
[ NULL | <val> ]
вместо ошибки.Это также работает в функциях, специфичных для типов, например
TO_DATE
и других.Please open Telegram to view this post
VIEW IN TELEGRAM
Используя приведённые выше таблицы, напишите запрос для получения списка пациентов, прикреплённых к конкретному врачу, и количества приёмов, запланированных на каждый день недели.
👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь меееедленный код для базы данных?
Начни с написания цикла, а внутри него помести SQL-операторы, обрабатывающие по одной строке за итерацию:😂
Чтобы сделать быстро — обрабатывай все данные одним SQL-запросом
👉 @SQLPortal
Начни с написания цикла, а внутри него помести SQL-операторы, обрабатывающие по одной строке за итерацию:
FOR i IN 1 .. n LOOP
[SELECT | UPDATE | DELETE] ... WHERE col = i;
END LOOP;
Чтобы сделать быстро — обрабатывай все данные одним SQL-запросом
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚6❤2
Единственный MCP-сервер, который вам когда-либо понадобится
MindsDB позволяет выполнять запросы к данным из 200+ источников — Slack, Gmail, соцсетей и других — с помощью SQL или естественного языка.
Федеративный движок запросов с встроенным MCP-сервером.
✅ Полностью open-source
⭐️ 31k+ звёзд на GitHub
👉 @SQLPortal
MindsDB позволяет выполнять запросы к данным из 200+ источников — Slack, Gmail, соцсетей и других — с помощью SQL или естественного языка.
Федеративный движок запросов с встроенным MCP-сервером.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2👍2
В PostgreSQL есть специальный параметр для логирования долго выполняющихся запросов —
После установки этого параметра PostgreSQL будет записывать в лог длительность и текст запроса, если он выполняется дольше указанного времени.
Это полезно для того, чтобы:
> определить, какие запросы работают медленно;
> понять, где можно добавить индексы для повышения производительности.
Параметр можно задать и на уровне сессии, если нужно логировать (или, наоборот, исключить из логирования) только конкретные запросы:
👉 @SQLPortal
log_min_duration_statement
.После установки этого параметра PostgreSQL будет записывать в лог длительность и текст запроса, если он выполняется дольше указанного времени.
ALTER DATABASE postgres SET log_min_duration_statement = '500ms';
Это полезно для того, чтобы:
> определить, какие запросы работают медленно;
> понять, где можно добавить индексы для повышения производительности.
Параметр можно задать и на уровне сессии, если нужно логировать (или, наоборот, исключить из логирования) только конкретные запросы:
SET log_min_duration_statement = '20000ms';
log_min_duration_statement
— действительно мощный инструмент, но мы обычно не рекомендуем устанавливать его на очень низкие значения (0, 1 или 5 мс), так как это приведёт к логированию практически всех операций базы данных. Это создаст шум в логах и может занять много места на диске.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥3
Ищешь бесплатную базу данных MongoDB?
✓ Трафик включён
✓ 512 МБ хранилища
✓ 3000 операций в секунду
Без ограничения по времени использования — идеально для практики
> free-mongo-db
👉 @SQLPortal
✓ Трафик включён
✓ 512 МБ хранилища
✓ 3000 операций в секунду
Без ограничения по времени использования — идеально для практики
> free-mongo-db
Please open Telegram to view this post
VIEW IN TELEGRAM
Для фоновых задач, таких как vacuum и создание индексов, Postgres использует специальное выделение памяти под названием
Если требуется ускорить выполнение задач, таких как:
> выполнение vacuum,
> создание индексов,
> создание индексов для материализованных представлений,
используйте:
Установите значение, которое предоставит вашим операциям больше памяти. По умолчанию используется 64MB. Этот параметр можно задать как глобально на уровне системы, так и локально для одной сессии.
👉 @SQLPortal
maintenance_work_mem
. Обычные запросы используют work_mem
, чтобы определить, сколько памяти может быть выделено на одну операцию или соединение.Если требуется ускорить выполнение задач, таких как:
> выполнение vacuum,
> создание индексов,
> создание индексов для материализованных представлений,
используйте:
SET maintenance_work_mem = '8GB';
Установите значение, которое предоставит вашим операциям больше памяти. По умолчанию используется 64MB. Этот параметр можно задать как глобально на уровне системы, так и локально для одной сессии.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Если у вас есть пространственные данные, которые вы хотите визуализировать на карте, этот блог показывает, как подключить QGIS — инструмент с открытым исходным кодом для картографии — к базе данных PostgreSQL/PostGIS
👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
При разработке приложений для бронирования Postgres значительно упрощает задачу предотвращения перекрытия бронирований.
С помощью ограничения
👉 @SQLPortal
С помощью ограничения
EXCLUDE
можно гарантировать, что не будет создано двух бронирований с одинаковым room_id
на пересекающиеся временные интервалы, обеспечивая целостность данных на уровне базы данныхPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤2🤯1
Мониторинг IOPS в Postgres
Для оценки производительности базы данных стоит обращать внимание на iowait как часть метрик CPU.
Iowait — это время, когда процессы ожидают завершения операций ввода-вывода. При этом процессор не загружен, но простаивает, потому что ждет отклика от дисковой подсистемы.
Если это происходит часто — это сигнал, что диск не справляется с нагрузкой, и CPU простаивает, хотя мог бы выполнять задачи.
Iowait можно измерять через большинство инструментов мониторинга CPU, а также прямо в Postgres с помощью расширения
Если вы видите небольшие пики iowait (как на диаграмме), скорее всего, идет бэкап или плановая операция.
Если пики значительные — возможно, база данных недополучает ресурсы, или требуется работа по оптимизации производительности.
👉 @SQLPortal
Для оценки производительности базы данных стоит обращать внимание на iowait как часть метрик CPU.
Iowait — это время, когда процессы ожидают завершения операций ввода-вывода. При этом процессор не загружен, но простаивает, потому что ждет отклика от дисковой подсистемы.
Если это происходит часто — это сигнал, что диск не справляется с нагрузкой, и CPU простаивает, хотя мог бы выполнять задачи.
Iowait можно измерять через большинство инструментов мониторинга CPU, а также прямо в Postgres с помощью расширения
pg_proctab
.Если вы видите небольшие пики iowait (как на диаграмме), скорее всего, идет бэкап или плановая операция.
Если пики значительные — возможно, база данных недополучает ресурсы, или требуется работа по оптимизации производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3🤯1