Oracle Developer👨🏻‍💻
3.17K subscribers
583 photos
64 videos
2 files
470 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Решение технической задачи

Друзья, всем привет! 👋

В понедельник мы закинули вам техническую задачку про медленный запрос.
Задача вызвала живое обсуждение, за которым мы внимательно следили.
Спасибо всем, кто откликнулся, задавал вопросы, предлагал решения.
Это очень радует! 🔥

Теперь — по делу
Многие писали: «Без плана запроса сложно что-то сказать». Абсолютно верно! 💡
Но есть нюанс — большинство наших читателей подписывали NDA, и делиться подробностями из продакшн-системы, увы, нельзя.
А у кого-то и вовсе названия таблиц такие, что сразу понятно, где они работают 😅
Этот момент мы постараемся обойти в будущем, а пока — как есть.

Что с запросом?
Вы всё правильно поняли — тормоза были из-за сортировки данных.

И вот два простых способа, как это можно обойти:

1️⃣ Либо перестроить индекс, указав обратную сортировку по дате, либо добавить hint index_desc.

2️⃣ Посмотреть настройки инстанса:

* SORT_AREA_SIZE и PGA_AGGREGATE_TARGET — параметры памяти для сортировки.
* TEMP_TABLESPACE — настройка временного табличного пространства.

Если наберем 20 огонечков, расскажем про нюансы сортировки и тонкую настройку этих параметров в одном из ближайших постов. 👇🏻

Ну а оптимальным решением, конечно же, остается секционирование 🧠

Если задачка показалась вам простой — в понедельник выложим посложнее 💪
И напоминаем: вы тоже можете прислать нам свой кейс, и мы его обязательно разберём в нашем канале! 📩

#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
Учиться у тех, кто сам не перестаёт учиться

Друзья, всем привет! 👋

Мы продолжаем делиться с вами важными новостями из жизни нашей онлайн-школы! 📚

В январе мы писали пост о получении лицензии Минобразования. Но решили на этом не останавливаться! 😉

Денис и Павел прошли профессиональную переподготовку и получили квалификацию «педагог дополнительного образования»! 🎓🎉

Да-да, теперь мы не только крутые практики с многолетним опытом в разработке, но и дипломированные преподаватели! 🔥
И это не просто «красивая бумажка» — это подтверждение того, что мы умеем и можем обучать на уровне, соответствующем государственным стандартам. 💪

Каждый из нас пришёл в преподавание своей дорогой:
🔶 Денису предложили провести внутреннее обучение в QIWI, где он тогда работал 💼
🔶 Павел ещё в университете больше прислушивался к предпринимателям, которые иногда приезжали читать лекции.

Со временем мечта превратилась в хобби, которое, в свою очередь, выросло в полноценную онлайн-школу. Поэтому получение педагогического образования стало логичным шагом на пути к развитию. Ведь одно дело — объяснять «на пальцах» в узком кругу, а совсем другое — выступать перед широкой аудиторией и подавать материал так, чтобы «понял даже лабрадор», как любит говорить Денис. 😉

Что это даёт онлайн-школе

🔸 Более качественные и гибкие программы с учётом методических стандартов
🔸 Прозрачность и легитимность — особенно важно для корпоративного обучения
🔸 Авторитет. У кого вы предпочтёте учиться:
— у человека, который «и швец, и жнец, и один в поле воин»,
— или у команды, которая постоянно развивается, получает дополнительное образование и привлекает таких же энергичных, объединённых общей идеей инженеров?

А что это даёт вам — нашим студентам

Уверенность в том, что вы учитесь у тех, кто знает не только «как работает», но и как объяснить «так, чтобы дошло».
Эффективные обучающие программы: никакой воды, только то, что действительно помогает развиваться.
Индивидуальный подход: мы знаем, что все студенты индивидуальны, поэтому адаптируем стиль и содержание уроков под ваши способности и потребности. 🎯

Что же дальше

Дальше — ещё интереснее! 🤟🏻

Мы уже работаем над запуском новых курсов, где обязательно применим наши новые знания и навыки. А ещё усиливаем команду и продолжаем делать качественный контент, чтобы вам было ещё легче и увлекательнее учиться. 🌟

Спасибо, что вы с нами! ❤️
Идём дальше 🚀

#oracle #карьера #диплом #сертификация #эксперт #plsql

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Решение технической задачи

Друзья, всем привет! 👋🏻

В понедельник мы выкладывали техническую задачу по оптимизации. Скажу по секрету, такие задачи задают на собеседовании в одном из крупных ритейлеров.

Итак, если посмотреть на план запроса, видно, что узкое место в том, что мы выгребаем из индекса 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
Что быстрее: IN или EXISTS?

Друзья, всем привет! 👋🏻

Сегодня понедельник, самое время немного взбодриться после длинных выходных ☕️
И для разогрева предлагаем вопрос, который любят задавать на технических собесах: что же лучше — IN или EXISTS? 🤔

Итак, перед вами два запроса. Вроде бы делают одно и то же… но есть нюанс👇

-- Not Exists
SELECT /*+ FULL(d) */
d.department_name
FROM hr.departments d
WHERE NOT EXISTS (
SELECT 1
FROM hr.employees e
WHERE e.department_id = d.department_id);

-- Not IN
SELECT /*+ FULL(d) */
d.department_name
FROM hr.departments d
WHERE d.department_id NOT IN (
SELECT e.department_id
FROM hr.employees e);


🔍 На первый взгляд — разницы нет.
Но если присмотреться… 😏

💬 Напишите в комментариях к посту, в чём подвох.

И если вдруг вы не до конца понимаете, в чём отличие между IN и EXISTS, добро пожаловать на наш мини-эфир в четверг 🎙

Разберём по пунктам:

🔶 Сходства и отличия IN и EXISTS 🔄
🔶 Как работают SEMI JOIN и ANTI JOIN под капотом ⚙️
🔶 Какие вопросы по этой теме любят на собеседованиях 🧠
🔶 Примеры из практики 📌

📩 Ссылку на Zoom пришлём утром в четверг — следите за новостями в канале, чтобы не пропустить!

#задача #sql #оптимизация #анонс #вебинар #собеседование #oracle #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Личный бренд Oracle-специалиста: всё начинается с тебя

Друзья, всем привет! 👋🏻

Сегодня немного не про SQL и не про оптимизацию запросов. Сегодня — про тебя и твой личный бренд 🤝

Почему это важно

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

Почему одних зовут «тушить пожары» за 500К, а других — максимум на поддержку

Не из-за случайного везения и не из-за «связей». Просто первый уже собрал вокруг себя мощный образ:

реальные кейсы с продакшена
умение решать нестандартные задачи
понятную миссию и огонь в глазах

А второй… просто «хороший парень, который умеет посмотреть explain-план запроса» 🙈

Из чего же вырастает бренд, который бьёт конкурентов

1️⃣ Навыки уровня решу-любую-боль

Вы не просто знаете 1001 hint, вы уже:

оптимизировали отчёт с 20 мин до 15 сек;
разложил 20 ТБ архива по партициям и сэкономил железо;
подняли SLA, убрав ночные крон-фейлы.

2️⃣ Желание расти и быть лучшим

Ты не ждёшь указаний, ты сам ищешь вызовы. Каждый вызов — это +10% к твоей рыночной стоимости 💹

3️⃣ Цель → миссия → позиционирование

Цель: работать удалённо и жить у океана 🏖️

Миссия: делать системы быстрее и надёжнее 🚀

Позиционирование: Oracle Performance Engineer, который доказывает выгоду цифрами

HR это считывает за 30 секунд 🧠

4️⃣ Непрерывное развитие

Прочитал про SQL Macro? Сразу проверил в тестовом стенде. Узнал про AI Vector Search? Написал pet-проект, выложил на Git. Мир видит не картинку, а динамику.

Что получаешь в итоге

Тебя зовут “спасти проект”, а не "попробовать"
Ты сам называешь цену — и обосновываешь её кейсами
Пока спишь, твой LinkedIn 📱 и репозитории работают на тебя 🖥

Всё начинается с одного вопроса
«Кем я хочу стать через годи чем докажу это рынку

Записал ответ

Тогда:

1️⃣ Вспоминаешь 3 самых мощных кейса
2️⃣ Описываешь: проблема → действия → цифры
3️⃣ Запускаешь рубрику «Performance Friday» в своём блоге
4️⃣ Каждые 2 недели добавляешь новую историю в портфолио

И уже через полгода у тебя будет бренд, мимо которого не пройдёт ни один рекрутер 💼

Хочешь быстрее и системно

На нашем летнем потоке мы:

🔶 собираем твои “сырые” навыки в кейсы 🧱
🔶 настраиваем позиционирование и резюме
🔶 шлифуем 📱, чтобы HR влюбился с первого скролла
🔶 тренируемся проходить собесы с харизмой на максимум 💪

🎯 У нас это уже сработало — а значит, сработает и у тебя.

💬 А теперь — вопрос в лоб: какую задачу, достойную места в витрине твоего бренда, ты решил за последнее время?

Пиши в комментарии, вдохновляй других — будем расти вместе 🙌

#личныйбренд #Oracle #карьера #рост #курс

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Что быстрее: IN или EXISTS? 🤔

Друзья, всем привет! 👋🏻

В понедельник мы показали вам два запроса и спросили, чем они отличаются.

Многие сходу ответили, что NOT IN не вернет данных, если подзапрос содержит Null-значения.
И это правильный ответ

Никакой магии тут на самом деле нет.
Условие id IN (1,2,null) можно развернуть как:
id = 1 OR id = 2 OR id = null
А id NOT IN (1,2,null) — как:
id != 1 AND id != 2 AND id != null

⛔️ Условие id != null никогда не выполнится, поэтому такой запрос ничего не возвращает.

📌 К слову, такой вопрос часто задают на технических собеседованиях.

Если хочется копнуть в сторону IN и EXISTS чуть глубже — ждем вас сегодня в 19:00 МСК на обещанный вебинар 🎓

Что разберем на вебинаре?

🔶 Сходства и отличия IN и EXISTS 🔄
🔶 Как работают SEMI JOIN и ANTI JOIN под капотом ⚙️
🔶 Какие вопросы по этой теме любят на собеседованиях 🧠
🔶 Примеры из практики 📌

Будет возможность задать вопросы и разобрать свои кейсы.

Кому будет полезно?
🔸 Начинающим разработчикам – чтобы не наступать на типичные грабли.
🔸 Мидлам – чтобы писать более эффективный код.
🔸 Всем, кто хочет хорошо проходить собеседования.

🎤 Ведущий — Павел Долганов

🔥 Подключайтесь, будет много полезного. До встречи на вебинаре! 🌐

➡️ Ссылка на ZOOM ⬅️

⚠️ Возможность подключиться ограничена: максимум 100 участников. Успевайте!

⚠️ Записи не будет!

#задача #sql #оптимизация #анонс #вебинар #собеседование #oracle #Pavel_Dolganov

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Переживания из-за подготовки курса
Кивилев Денис
🎙 Почему я спал по 6 часов в сутки и как это связано с мини-курсом по Оптимизации

Друзья, всем привет! 👋🏻

Сегодня произошло неожиданное аудиоподкастоизвержение. На утренней пробежке в 6:15 утра вдруг понял, что как-то рановато 😂
Пришёл домой, решил посмотреть статистику по сну — и слегка удивился. Средняя продолжительность сна — 6 часов. Ложусь спать в 00:30, подъём — в 6:20. WTF! 😱😨

И сразу же родилась идея аудиоподкаста: а что, если немного рассказать о том, о чём обычно никто не говорит?

О той самой изнанке онлайн-школы, где за каждым видеоуроком стоят бессонные ночи, спринты с методологом, альфа-тесты, переработка обратной связи и вечное «А точно ли это поможет студенту на практике?»

В подкасте делюсь, как мы создавали мини-курс «Оптимизация Oracle SQL: Быстрый старт 🚀»

⚠️ Этот подкаст — не жалоба, а честный рассказ. Потому что за каждым качественным образовательным продуктом — человеческий труд, бессонные ночи и внутренняя тревога: «А точно ли зашло?»

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

🎧 Длительность: 7:30 минут. Рекомендую на x1.1

И, как обычно, если зашло — ставьте 👍

#изнанкашколы #образование #oracle_sql #аудиоподкаст
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Пост 1/5. Про вакансию Oracle/Java Developer

Друзья, всем привет!

Решил поделиться с вами серией постов про позицию Oracle/Java Developer на проект распила Ораклового-монолита.

Итак. Предновогодняя суета, я весь в мыле и тут выплывает этот лебедь вакансия.
Начал общение с рекрутёром. В первых же сообщениях, HR кидает ссылку на видос - презентацию ценностей/политики компании.

💬 "Денис, посмотрите пожалуйста"

Да, не вопрос. Чем там могут удивить... Ан, нет - я ошибся 😄
Некоторые перлы из видео:
• «нам не по хуй»
• «мы делаем так, чтобы не хотелось доебаться»

Полный видос — по ссылке выше.

💬 "Скажите, пжл, вам подходит политика?"

Ну что ж… — подумал я. Такое не каждый день увидишь. Стало интересно: к чему это всё может привести? 🤔
Написал, что мне ОК — и марлезонский балет начался 🕺🏻

Вопросы залу
Как вы думаете, какая у такой компании/вакансии может быть зарплатная вилка?
После увиденного - пошли бы на собес? Готовы работать в такой культуре?

Поделитесь в Чатике 💭

Если интересны подробности вакансии, этапы собесов и т.п. ставь любую реакцию 🐳

#Denis_Kivilev #oracle #java #собседования
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
⚙️Одна из ТОП-болей Oracle-разработчика

Друзья, привет! Сохраните пост, чтобы показать тим-лиду и закрыть вечные споры на ревью 😉

БОЛЬ: Отсутствие единой системы стандартов форматирования кода в ORACLE

Как происходит в реальной жизни?
Приходишь в новый проект, открываешь код и получаешь мешанину из запросов.
У одного всё ЗАГЛАВНЫМИ, у другого строчными, третий чередует регистр через слово. Кто-то называет таблицы во множественном числе «Users», кто-то с префиксом tab_ - "tab_users", а где-то всплывает «user_tbl». Запросы форматируются как попало.
Каждый уверен: «Я так привык — значит, правильно». Единого документа нет, ревью превращается в мини-баттл, новичок тратит месяц, чтобы только «раскусить» локальные правила.

СУТЬ ПРОБЛЕМЫ
У Oracle по-прежнему нет официального «ГОСТа» (и не будет) на оформление PL/SQL: нет аналога PEP-8 как в Python или Google-кодстайла как для Java. Всё держится на устных договорённостях и личных привычках. Каждая компания — маленькое «княжество» со своим письмом.

Итог хаоса
• читаемость падает;
• ревью затягиваются;
• баги всплывают на проде, потому что «не заметил в каше»;
• время онбординга увеличивается и т.п.

📉 К чему это приводит

Представьте, что всю жизнь ездили с левым рулём, а потом внезапно пересели на правый.
Первые дни — скорость падает, концентрация уходит в ноль, ошибок становится больше.
То же и с кодом: каждый новый проект — переучивание с нуля.
А бизнес-дедлайны никто не отменял: сроки горят, деньги утекают, команда нервничает.

🛠 Как можно это решить (и заработать очки в карму)🔥

1️⃣ Соберите мини-круг: пару тимлидов + самых заинтересованных разработчиков.

2️⃣ Сделайте короткий чек-лист с описанием:
 – единый регистр для ключевых слов и идентификаторов;
 – общие префиксы/постфиксы для таблиц, индексов и других объектов;
 – правила именования пакетов, процедур и др.;
 – правила написания комментариев и многое другое;

желательно, чтобы правила форматирования можно было задать в IDE.

3️⃣ Автоматизируйте проверку: поставьте любой SQL-formatter/linter в pre-commit.

4️⃣ Зашейте правило в CI: пока линтер красный, код не пройдёт.

5️⃣ Загрузите документ в Confluence и прикрепите ссылку в шаблон PR/MR.

6️⃣ Проведите мит-ап для разработчиков: объясните «зачем» это нужно.

⚠️ Важный момент: переформатирование существующей кодовой базы может выполняться по-разному. Команда выбирает, как лучше сделать.

💡 Фишка для проактивных

Видишь хаос? Предложи драфт-стандарт сам. Так ты:
• ускоряешь ревью;
• качаешь личный бренд «не ноет — решает»;
• чаще всего получаешь плюсик к росту до тимлида.

⚖️ Итог

Кодстайл — это не про «перфекционизм ради перфекционизма».
Это договорённость, которая превращает личные заготовки в командный актив.
Чем раньше вы договоритесь, тем меньше боли, нервов и денег потеряете.

📌 Сохрани себе и отправь тимлиду. Пусть стандарты работают, а люди пишут бизнес-логику, а не расставляют пробелы вручную.

А какие стандарты у вас были при смене работы, пишите в Чатик 💬 посмотрим, что за дичь есть на просторах.

Если пост наберет 100 🔥 расскажу как мы в Qiwi-решали эту проблему c автоматической проверкой PL/SQL-кода в CI. Проблема не простая, в виду того, что разработчики пользовались аж четырьмя разными IDE.

#Oracle #PLSQL #кодстайл #teamlead #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀