Друзья, всем привет! 👋🏻
На этой неделе у нас пройдёт особенный эфир. Сегодня мы рады представить нашего гостя — Игоря Мельникова.
👨💼 Игорь — один из наиболее авторитетных экспертов в области Oracle и PostgreSQL в русскоязычном сообществе.
До 2022 года он занимал позицию главного консультанта в Oracle СНГ, затем стал ведущим экспертом в Postgres Pro . В настоящий момент Игорь - независимый консультант, он помогает крупным компаниям в проектах, связанных с диагностикой, оптимизацией и миграцией баз данных.
🎙 Его имя хорошо известно тем, кто следит за индустрией: он выступал на PGConf.SPB, PGMeetup и других профильных конференциях и вебинарах. Игорь умеет доносить технически сложные темы ясно, точно и доступным языком.
📌 Что будет в эфире:
🔶 Переключение контекста: как работает и на что влияет
🔶 Как и для чего использовать
🔶 Технология
🔶 Расширенная статистика: как передать информацию оптимизатору при работе с табличными функциями
🔶 подходы к внедрению этих практик с минимальными издержками
📍 Эфир будет особенно полезен тем, кто:
✅ пишет или ревьюит PL/SQL-код
✅ оптимизирует производительность БД
✅ хочет «выжать» максимум из существующего кода без его переписывания
📅 Эфир: четверг, 24 апреля
🕖 Время: 19:00 МСК
🎦 Формат: live-разбор + ответы на вопросы
📬 Ссылка будет опубликована в день эфира — рекомендуем включить уведомления
⚠️ Записи не будет — приходите вовремя. Ограничение в эфире - 100 мест.
Ждём вас!
#oracle #plsql #performance #udf #PLScope #optimizer #производительность #эксперт #анонс #вебинар
Канал Oracle Developer | Чатик💬
На этой неделе у нас пройдёт особенный эфир. Сегодня мы рады представить нашего гостя — Игоря Мельникова.
👨💼 Игорь — один из наиболее авторитетных экспертов в области Oracle и PostgreSQL в русскоязычном сообществе.
До 2022 года он занимал позицию главного консультанта в Oracle СНГ, затем стал ведущим экспертом в Postgres Pro . В настоящий момент Игорь - независимый консультант, он помогает крупным компаниям в проектах, связанных с диагностикой, оптимизацией и миграцией баз данных.
🎙 Его имя хорошо известно тем, кто следит за индустрией: он выступал на PGConf.SPB, PGMeetup и других профильных конференциях и вебинарах. Игорь умеет доносить технически сложные темы ясно, точно и доступным языком.
🔶 Переключение контекста: как работает и на что влияет
🔶 Как и для чего использовать
pragma UDF
🔶 Технология
PL/Scope
и её использование в статическом анализе🔶 Расширенная статистика: как передать информацию оптимизатору при работе с табличными функциями
🔶 подходы к внедрению этих практик с минимальными издержками
📍 Эфир будет особенно полезен тем, кто:
✅ пишет или ревьюит PL/SQL-код
✅ оптимизирует производительность БД
✅ хочет «выжать» максимум из существующего кода без его переписывания
📅 Эфир: четверг, 24 апреля
🕖 Время: 19:00 МСК
🎦 Формат: live-разбор + ответы на вопросы
📬 Ссылка будет опубликована в день эфира — рекомендуем включить уведомления
⚠️ Записи не будет — приходите вовремя. Ограничение в эфире - 100 мест.
Ждём вас!
#oracle #plsql #performance #udf #PLScope #optimizer #производительность #эксперт #анонс #вебинар
Канал Oracle Developer | Чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, всем привет! 👋
Напоминаем, что сегодня в 19:00 по МСК состоится мощный технический эфир в Zoom:
«PL/SQL-функции в SQL-запросах: где теряются миллисекунды?» 🎯
Спикер — Игорь Мельников: экс-главный консультант Oracle и Postgres Pro, эксперт по оптимизации с 20+ годами опыта 👨🏻💻
Поговорим о:
🔶 Переключении контекста между SQL и PL/SQL
🔶 PRAGMA UDF и её применении
🔶 Рефакторинге через PL/Scope
🔶 Табличных функциях и планах выполнения
🔶 Том, как внедрить всё это быстро и без боли.
📌 Подойдёт PL/SQL-разработчикам, архитекторам и всем, кто хочет, чтобы «летало» 🚀
📹 Формат: доклад + вопросы
⚠️ Записи не будет! 100 мест. Только эфир, живое общение и шанс задать свой вопрос.
Ссылку пришлём в канал ближе к началу.
Включай уведомления, чтобы не пропустить.
Увидимся! 😉
#oracle #plsql #performance #оптимизация #анонс #вебинар
Канал Oracle Developer | Чатик 💬
Напоминаем, что сегодня в 19:00 по МСК состоится мощный технический эфир в Zoom:
«PL/SQL-функции в SQL-запросах: где теряются миллисекунды?» 🎯
Спикер — Игорь Мельников: экс-главный консультант Oracle и Postgres Pro, эксперт по оптимизации с 20+ годами опыта 👨🏻💻
Поговорим о:
🔶 Переключении контекста между SQL и PL/SQL
🔶 PRAGMA UDF и её применении
🔶 Рефакторинге через PL/Scope
🔶 Табличных функциях и планах выполнения
🔶 Том, как внедрить всё это быстро и без боли.
📹 Формат: доклад + вопросы
Ссылку пришлём в канал ближе к началу.
Включай уведомления, чтобы не пропустить.
Увидимся! 😉
#oracle #plsql #performance #оптимизация #анонс #вебинар
Канал Oracle Developer | Чатик 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, всем привет! 👋
Сегодня понедельник — самое время для технической задачки 🔥
Один из наших подписчиков прислал интересный кейс, и мы решили им поделиться с вами.
Итак, ситуация:
На проекте по импортозамещению выполнили миграцию с одной из западных CRM-систем на продукт собственной разработки.
В качестве СУБД используется Oracle 19c (Standard Edition).
Во время переноса:
🔶 для истории действий пользователей была создана таблица
🔶 Объём — 3 миллиарда строк 🔥
🔶 По требованиям законодательства данные должны храниться не менее 5 лет.
🔶 Таблица НЕ секционирована (ограничения редакции SE).
Периодически нужно получать все события (event_type) по клиенту (client_id) за последние N дней.
Пример запроса:
❗️ Проблемка:
🔶 Запрос к одному клиенту выполняется 20–30 секунд.
🔶 Если клиент активный (около 100 000 событий за 3 месяца) — всё становится совсем грустно 🐌
- В плане видно Index Range Scan по индексу (client_id, event_date), но нагрузки на I/O всё равно большие 🤷♂️
Условия:
1️⃣ Materialized View не вариант — нет места под дублирование данных.
2️⃣ Переехать на Enterprise Edition в ближайшие месяцы нет возможности 🤷♂️
Вопрос: как ускорить выполнение запроса без секционирования❓
Кто решит — плюсик в карму и +100 к уважению в нашем чате Oracle-разработчиков 🚀
Разбор задачи, как всегда, в четверг 🎓
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик💬
Мини-курс Оптимизация: Быстрый старт 🚀
Сегодня понедельник — самое время для технической задачки 🔥
Один из наших подписчиков прислал интересный кейс, и мы решили им поделиться с вами.
Итак, ситуация:
На проекте по импортозамещению выполнили миграцию с одной из западных CRM-систем на продукт собственной разработки.
В качестве СУБД используется Oracle 19c (Standard Edition).
Во время переноса:
🔶 для истории действий пользователей была создана таблица
user_logs
.🔶 Объём — 3 миллиарда строк 🔥
🔶 По требованиям законодательства данные должны храниться не менее 5 лет.
🔶 Таблица НЕ секционирована (ограничения редакции SE).
Периодически нужно получать все события (event_type) по клиенту (client_id) за последние N дней.
Пример запроса:
SELECT event_type, event_date, description
FROM user_logs
WHERE client_id = :client_id
AND event_date >= SYSDATE - 90
ORDER BY event_date DESC;
❗️ Проблемка:
🔶 Запрос к одному клиенту выполняется 20–30 секунд.
🔶 Если клиент активный (около 100 000 событий за 3 месяца) — всё становится совсем грустно 🐌
- В плане видно Index Range Scan по индексу (client_id, event_date), но нагрузки на I/O всё равно большие 🤷♂️
Условия:
1️⃣ Materialized View не вариант — нет места под дублирование данных.
2️⃣ Переехать на Enterprise Edition в ближайшие месяцы нет возможности 🤷♂️
Вопрос: как ускорить выполнение запроса без секционирования
Кто решит — плюсик в карму и +100 к уважению в нашем чате Oracle-разработчиков 🚀
Разбор задачи, как всегда, в четверг 🎓
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Решение технической задачи
Друзья, всем привет! 👋
В понедельник мы закинули вам техническую задачку про медленный запрос.⏳
Задача вызвала живое обсуждение, за которым мы внимательно следили.
Спасибо всем, кто откликнулся, задавал вопросы, предлагал решения.
Это очень радует! 🔥
Теперь — по делу
Многие писали: «Без плана запроса сложно что-то сказать». Абсолютно верно! 💡
Но есть нюанс — большинство наших читателей подписывали NDA, и делиться подробностями из продакшн-системы, увы, нельзя.
А у кого-то и вовсе названия таблиц такие, что сразу понятно, где они работают 😅
Этот момент мы постараемся обойти в будущем, а пока — как есть.
Что с запросом?
Вы всё правильно поняли — тормоза были из-за сортировки данных.
И вот два простых способа, как это можно обойти:
1️⃣ Либо перестроить индекс, указав обратную сортировку по дате, либо добавить
2️⃣ Посмотреть настройки инстанса:
*
*
Если наберем 20 огонечков, расскажем про нюансы сортировки и тонкую настройку этих параметров в одном из ближайших постов. 👇🏻
Ну а оптимальным решением, конечно же, остается секционирование 🧠
Если задачка показалась вам простой — в понедельник выложим посложнее 💪
И напоминаем: вы тоже можете прислать нам свой кейс, и мы его обязательно разберём в нашем канале! 📩
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик
Мини-курс Оптимизация: Быстрый старт 🚀
Друзья, всем привет! 👋
В понедельник мы закинули вам техническую задачку про медленный запрос.⏳
Задача вызвала живое обсуждение, за которым мы внимательно следили.
Спасибо всем, кто откликнулся, задавал вопросы, предлагал решения.
Это очень радует! 🔥
Теперь — по делу
Многие писали: «Без плана запроса сложно что-то сказать». Абсолютно верно! 💡
Но есть нюанс — большинство наших читателей подписывали NDA, и делиться подробностями из продакшн-системы, увы, нельзя.
А у кого-то и вовсе названия таблиц такие, что сразу понятно, где они работают 😅
Этот момент мы постараемся обойти в будущем, а пока — как есть.
Что с запросом?
Вы всё правильно поняли — тормоза были из-за сортировки данных.
И вот два простых способа, как это можно обойти:
1️⃣ Либо перестроить индекс, указав обратную сортировку по дате, либо добавить
hint index_desc
.2️⃣ Посмотреть настройки инстанса:
*
SORT_AREA_SIZE
и PGA_AGGREGATE_TARGET
— параметры памяти для сортировки.*
TEMP_TABLESPACE
— настройка временного табличного пространства.Если наберем 20 огонечков, расскажем про нюансы сортировки и тонкую настройку этих параметров в одном из ближайших постов. 👇🏻
Ну а оптимальным решением, конечно же, остается секционирование 🧠
Если задачка показалась вам простой — в понедельник выложим посложнее 💪
И напоминаем: вы тоже можете прислать нам свой кейс, и мы его обязательно разберём в нашем канале! 📩
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик
Мини-курс Оптимизация: Быстрый старт 🚀
Еще одна техническая задачка
Друзья, всем привет! 👋🏻
Пока мы готовим серию постов про сортировку, предлагаем поразмять мозги над одной из задачек.
Перед вами план запроса, который создаёт таблицу с архивными данными продаж старше двух последних недель. На основании этого плана нужно понять, как ускорить запрос, не меняя при этом его текст.
Версия Oracle:
Структура индекса из 4 операции: SALE_DT, COSTUMER_ID, RETAILER_ID.
Пишите в комментариях свои вопросы, идеи, предложения 👇🏻
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик💬
Мини-курс Оптимизация: Быстрый старт 🚀
Друзья, всем привет! 👋🏻
Пока мы готовим серию постов про сортировку, предлагаем поразмять мозги над одной из задачек.
Перед вами план запроса, который создаёт таблицу с архивными данными продаж старше двух последних недель. На основании этого плана нужно понять, как ускорить запрос, не меняя при этом его текст.
Версия Oracle:
12.2.0.1
Структура индекса из 4 операции: SALE_DT, COSTUMER_ID, RETAILER_ID.
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("S"."SALE_DT"<=TRUNC(SYSDATE@!)-14)
Пишите в комментариях свои вопросы, идеи, предложения 👇🏻
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Решение технической задачи
Друзья, всем привет! 👋🏻
В понедельник мы выкладывали техническую задачу по оптимизации. Скажу по секрету, такие задачи задают на собеседовании в одном из крупных ритейлеров.
Итак, если посмотреть на план запроса, видно, что узкое место в том, что мы выгребаем из индекса 4 млн. записей, хотя архивная копия по размеру будет очень близка к исходной таблице (разница всего в 2 недели).
Какие можно дать рекомендации❓
1️⃣ Сбор статистики
Смотрим на статистику таблицы sales
Если запрос вернет
2️⃣ Управление индексом
Если статистика актуальна, а оптимизатор все равно считает, что нужен индекс, следует выполнить
3️⃣ SQL Plan Management
Минус подхода с
Ставь лайк, если ответил верно. Делитесь в комментариях, у кого еще
#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик💬
Мини-курс Оптимизация: Быстрый старт 🚀
Друзья, всем привет! 👋🏻
В понедельник мы выкладывали техническую задачу по оптимизации. Скажу по секрету, такие задачи задают на собеседовании в одном из крупных ритейлеров.
Итак, если посмотреть на план запроса, видно, что узкое место в том, что мы выгребаем из индекса 4 млн. записей, хотя архивная копия по размеру будет очень близка к исходной таблице (разница всего в 2 недели).
Какие можно дать рекомендации
1️⃣ Сбор статистики
Смотрим на статистику таблицы sales
SELECT stale_stats FROM user_tab_statistics WHERE table_name = 'SALES'
Если запрос вернет
YES
или <NULL>
- статистика неактуальна, делаемDBMS_STATS.GATHER_TABLE_STATS(OWNNAME => USER, TABNAME => 'SALES');
2️⃣ Управление индексом
Если статистика актуальна, а оптимизатор все равно считает, что нужен индекс, следует выполнить
ALTER INDEX SALES_IDX INVISIBLE
.3️⃣ SQL Plan Management
Минус подхода с
SQL Plan Management
в том, что если вендор доработает запрос, наша «магия» с подменой плана исчезнет :( Но часто он помогает устранить "острую боль", когда нет возможности оперативно выпустить патч или исправить тормозящий запрос. Про этот подход мы более подробно рассказываем на нашем курсе по оптимизации. Там же есть куча вопросов с собеседований и тестовых заданий. Так что если вы хотите к ним лучше подготовиться - welcomeСтавь лайк, если ответил верно. Делитесь в комментариях, у кого еще
Index Range Scan
тормозил прод.#oracle #оптимизация #задача #оптимизация #performance #Pavel_Dolganov
Канал Oracle Developer | Чатик
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM