pl sql developer история запросов

Старая история SQL в Oracle SQL Developer

в SQL Developer я нашел некоторые команды SQL предыдущего месяца, но не смог найти это, поскольку он показывает только записи последних 4-5 дней.

есть ли способ найти старые команды SQL, которые не отображаются на вкладке Истории SQL.

5 ответов

как Oracle документировала, есть папка истории SQL, и она больше (имеет больше SQL-запросов, которые возвращаются около года), чем панель инструментов истории SQL (несколько месяцев).

вот содержимое моей панели инструментов истории SQL:

b7aabc73cd88402baf387358f8ea887f

Что касается папки истории SQL, примечания к выпуску цитируют это место в Windows 7:

пока эта папка содержит историю SQL, а также содержит: пользовательские отчеты и пользовательские файлы фрагментов (например, см. 3.1 примечания к выпуску SQL Developer) Вот моя папка истории SQL:

0a575113682513543bf8d6abdedc82e2

Я не вижу никакой документации для регулировки размера либо.

внутри этого перейдите в меню:

измените его на то, что вы хотите. (В 4.0.1.14, Макс был 999999999.)

надеюсь, что это помогает.

С наилучшими пожеланиями.

вы можете попробовать

просмотр > история SQL

например, посмотрите эту картину: 21d5c66f7c6a5afa28f5a4e988adfebd

Ну, я думаю, есть еще вариант такой:

в SQL Developer> меню Вид: View menu» src=»https://askdev.ru/images/content/25807835/455ef82761b529cb1944b9301be91f4e.png»>

затем перейдите к опции file: 9817d7a4a18a846fb6109ee7e2a8238d

и у вас есть вкладка » последние файлы: 32ede710456d0fffadb7e065691b7528

Источник

Эволюция моих SQL запросов

Всем привет! Я тимлид и Senior Oracle Developer, 12 лет работаю с OeBS и в основном пишу SQL запросы. Хотел бы рассказать, как за это время менялся мой подход в написании SQL запросов.

Вначале было слово, а точнее запрос. Скажем

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

Так что же произошло? Проблемы начались, когда таблиц стало две:

букв стало немного больше, но я намного лучше стал понимать, как связаны таблицы в моих SQL выражениях. Мир запросов расцвёл для меня новыми красками, и я больше не писал запросы как-то иначе. А ещё распространял эту весть среди других джунов. Это был мой первый шаг в эволюции SQL. Я вырвался от привычных шаблонов легаси кода и сделал что-то своё. Но была одна проблема. Когда используется скажем левостороннее соединение ANSI синтаксис заставляет переносить в связки, и все прочие ограничения для таблицы.

Это меня жутко бесило, так как опять связи и параметры сливались в одну кучу. Помимо этого, наступал момент, когда запрос разрастался до гигантских размеров и становился практически не читаемым. К тому времени я уже дорос до мидла и хотел рассказывать истории своими селектами. И это подтолкнуло меня на второй шаг эволюции. И имя ему with.

Но чего-то не хватало. По своей природе я люблю кодить, но, когда приходит время тестировать, весь мой энтузиазм куда-то пропадает. Как итог, я часто отдавал не до конца протестированный код. Мне регулярно приходилось слышать про unit тесты, автотесты и прочее. Но сложно было это применить к БД. Сегодня сумма за период равна 100р, а завтра 120р. И как ты тут напишешь тест? Так и жил… Но, уже став тимлидом, мне попалась задача, в которой надо было найти отмененные документы. Условие отмены было достаточно сложным и собиралось из множества нюансов (спрятал под функцию).

У меня было порядка 10 примеров документов. И завершая условие для одного документа, что-то ломалось в другом. А так как тестировал руками и глазами, времени уходило просто море. Я уже думал этому не будет конца. Пока не понял, что вокруг моего запроса можно написать обертку, которая будет за меня проверять все мои кейсы и говорить какие документы прошли проверку, а какие нет. Потратив на обертку несколько минут, я сократил время тестирования с 5-7 минут, до нескольких секунд.

После правки функции, я просто запускал тест-запрос и смотрел сколько документов прошло тестирование, а сколько нет. В процессе тестирования я накидывал туда ещё кейсов, при том что про старые тесты тоже не забывались. И тогда я понял, как же это здорово! Как можно легко тестировать свой запрос, повышать надёжность и при этом не нужно ничего делать руками. Это может показаться элементарным, но до этого мне не встречались подобные конструкции. Обычно я видел конструкции типа and id = 5—6 7 10 135 1345 в которой просто перебором подставлялись разные значения и руками смотрелось что и как оно должно возвращать. С того дня я написал несколько разработок, и к каждой из них я уже готовил свой тестовый скрипт. Данный стиль мне очень понравился и теперь я пытаюсь привить его и своим разработчикам. Чтобы им не пришлось проделать путь в 12 лет, чтобы писать красивые SQL запросы.

По итогу в мире SQL не происходит почти ничего нового уже много лет, тем не менее всегда приятно найти возможность улучшить свои запросы.

Читайте также:  откуда появилась россия история создания

Источник

ноя. 26, 2013

Начнём с мультиварки.

Пару недель назад мы приобрели девайс, такой же, как на картинке, Redmond RMC-01. Специально выбрали маленькую модель, всего два литра. Пользуемся каждый день, варим кашу для малыша, для себя суп, рис и компот, пару раз испекли бисквит. По-моему, весьма удобно, тем более, что стоит эта машинка меньше двух тысяч. Не надо заботиться ни о пригорании, ни о том, что суп/каша сбежит, не надо мыть плиту, пар при готовке не валит, вытяжку можно не включать. Чаша съёмная, хорошо отмывается в посудомойке. К мультиварке прилагается книга из 160 рецептов, пока что все опробованные рецепты оказались вполне рабочими.

Также стоит отметить, что некоторое время назад наш начальник отдела принёс в офис четырёхлитровую мультиварку, и всякий желающий может ей пользоваться. Достаточно продвинутых для этого сотрудников в нашем отделе двое, у меня есть шанс стать третьим. Если я принесу на работу пачку геркулеса, то в любое время рабочего дня смогу сварить себе хоть четыре литра свежей каши, и не надо будет носить еду из дома.

Теперь настало время рассказать о некоторых любопытных мелочах в PL/SQL Developer. Уверен, что вы все часто используете PL/SQL Developer как в работе, так и в повседневной жизни. У меня стоит версия 10.0.5.1710. Мини-опрос разработчиков нашего отдела показал, что об этих возможностях никто не знает.

Результаты заполнения можно получить в виде SQL-скрипта (средняя из трёх жёлтых кнопок в нижнем левом углу окна).

Если попытаться с помощью Data Generator вставить очень много записей, то выходит очень долго. Скорее, он пригодится, если надо наскоро заполнить таблицу с большим количеством разнородных полей, это будет быстрее, чем писать руками скрипт для всех полей.

Источник

Часть 1. Логирование событий в Oracle PL/SQL

Добрый день! Работая разработчиком Oracle PL/SQL, часто ли вам приходилось видеть в коде dbms_output.put_line в качестве средства debug-а? Стоит признать, что к сожалению, большинство (по моему личному мнению и опыту) разработчиков Oracle PL/SQL не уделяет должного внимания логированию как к «спасательному кругу» в случае возникновения ошибок. Более того, большая часть разработчиков не совсем понимает зачем нужно логировать информацию об ошибках и самое главное, не совсем понимают что делать и как использовать эту информацию в будущем.

Предисловие

Данным постом хотел бы начать цикл статей посвященных «Логированию ошибок» в Oracle PL/SQL. В первую очередь донести мысль до многих разработчиков, о том как можно построить функционал фиксации, хранения логов в БД. На своем опыте продемонстрировать поэтапный процесс создания полноценного логирования в БД. Рассказать как нам удалось создать логирование ошибок, разработать единую нумерацию событий для их дальнейшей идентификации, как поверх логирования «натянуть» мониторинг событий, создать функционал позволяющий увидеть все текущие ошибки в БД в виде таблиц (с указанием частоты возникновения ошибок и кол-ва и т.д.), графиков (отразить динамику роста кол-ва ошибок) и правильно распределить ресурсы для устранения тех или иных ошибок.

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

Введение

Модель логирования позволяет реализовать:

Единый подход в обработке и хранении событий

Собственную нумерацию и идентификацию событий происходящих в БД (статья)

Единый мониторинг событий (статья в разработке)

Анализ событий происходящих в БД (статья в разработке)

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

Единый подход в обработке и хранении событий

Основной идеей «Единого подхода в обработке и хранении событий» заключается в создании одного одновременно простого и в тоже время очень сложного правила: «Все объекты базы данных (функции, процедуры) в обязательном порядке должны завершаться блоком обработки исключений с последующим логированием события». Простота заключается в том, что легко, в команде разработчиков, на словах договориться об исполнении данного правила. Сложность же заключается в том, что данное правило должно быть установлено на ранних этапах создания вашей БД и выполняться обязательно на протяжении всего жизненного цикла. Внедрить функционал логирования в уже существующие и действующие БД очень сложно (практически не возможно).

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

Наверное сейчас кто-то из читателей может возразить: «Зачем в обязательном порядке?». А всё очень просто, если вы разработчик PL/SQL и вы не согласны с этим правилом, то вот вам пример. Посмотрите на свой текущий проект более внимательно. Скорее всего вы найдете какое-нибудь логирование событий реализованное кем-то, когда-то. Вспомните сколько раз вы обращались к этому логированию при решении багов. Именно в таких ситуациях, когда есть срочность по времени в исправлении бага, вы или ваши коллеги начинают использовать dbms_output.put_line в качестве экспресс-дебага (быстрый способ получения значений переменных используемых в коде). Согласитесь, что для исправления бага мало знать в какой процедуре, в каком запросе и на какой строке возникла ошибка, необходимо знать параметры запроса на которых возникает ошибка. И вот тут нам на помощь приходит «Логирование событий», потому что помимо места возникновения ошибки мы узнаем параметры вызова процедуры, в которой возникает ошибка и это очень упрощает исправление бага.

Читайте также:  авиаремонтный завод гатчина история

Первая статья посвящена базовому функционалу «Логирования событий». В простейшей реализации это одна общая таблица и пакет процедур для работы с ней. Для создания и демонстрации логирования, нам необходимо реализовать следующие объекты БД (весь список объектов с их исходными кодами представлен в Git):

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

Также, учитывайте пожалуйста, что создание партиции требует как минимум Oracle EE. Создание партиции вне указанной версии Oracle приведет к нарушению лицензионного соглашения.

Источник

Русские Блоги

план выполнения oracle view

План выполнения: описание процесса выполнения или пути доступа оператора запроса в ORACLE. То есть для задачи запроса составьте подробный план того, как выполнить задачу.

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

1. Просмотрите план выполнения.

1.1 Настроить автотрассировку

Команда autotrace выглядит следующим образом

Это значение по умолчанию, что означает, что автотрассировка отключена.

SET AUTOTRACE ON EXPLAIN

Показать только план выполнения

SET AUTOTRACE ON STATISTICS

Показывать только статистику исполнения

Содержит 2, 3 контента

SET AUTOTRACE TRACEONLY

Аналогично ON, но не отображает результат выполнения оператора.

c117e6fb436141fe75d6cc246bede6b9

1.2 Использование SQL

Добавьте EXPLAIN PLAN FOR перед выполненным sql

48304ba5e6f9fe08f3fa1abda7d326ab

48304ba5e6f9fe08f3fa1abda7d326ab

29e97f4dbcfb58deeac39cfd36b34327

1.3 Использование PL / SQL Developer, Navicat, Toad и других клиентских инструментов

Общие клиентские инструменты, такие как PL / SQL Developer, Navicat, Toad, поддерживают просмотр планов объяснения.

Navicat

2a93428f101c44159d411691f8535d67

48304ba5e6f9fe08f3fa1abda7d326ab

48304ba5e6f9fe08f3fa1abda7d326ab

PL/SQL Developer

90285f557af5ae95f4fc1ccb3958a3f7

2. Как читать план выполнения

2.1 Принцип порядка исполнения

Обычно, судя по длине отступа, сначала выполняется наибольший отступ, если есть2Отступ строки такой же, затем сначала выполните описанное выше.

dfc67901b31bcabb1464bede4f50abb5

На рисунке показан план выполнения, просматриваемый инструментом Toad. В Toad четко показан порядок выполнения.

В качестве примера возьмем следующий SQL (запрос на соединение с городом и страной в базе данных sakila)

a000963513b25d88b637d5c8426f30cb

2.2 Расшифровка полей в плане выполнения

89c1dbb62f2088e43b678ef72d87f3dd

ID: Порядковый номер, но не порядок выполнения. О порядке исполнения судят по отступам.

Operation: Содержание текущей операции.

Rows: Количество элементов текущей операции, Oracle оценивает набор возвращаемых результатов текущей операции.

Cost(CPU):Значение (стоимость), рассчитанное Oracle для иллюстрации стоимости выполнения SQL.

Time: Oracle оценивает текущее время работы.

При просмотре плана выполнения, помимо самого плана выполнения, вам также необходимо посмотреть на предикаты и статистику. Оценивайте эффективность SQL по общей информации.

2.3 Описание предиката

9fd03eb3a6dcc9de689b79209a842e9c

Access :

Filter:

Основное внимание при доступе с предикатом уделяется рассмотрению условий предиката и правильности используемого пути доступа.

2.4 Описание статистики (статистической информации)

38c4a8f25e90d3919b30a91f72f96353

Количество сгенерированных рекурсивных вызовов sql.

Количество блоков, прочитанных из буферного кеша

Количество блоков данных отмены, прочитанных из буферного кеша

Количество блоков, прочитанных с диска

Размер повтора, созданного DML

bytes sent via SQL*Net to client

Количество байтов результатов запроса, отправленных сервером базы данных клиенту запросов через SQL * Net.

bytes received via SQL*Net from client

Количество байтов данных, полученных от клиента через SQL * Net

SQL*Net roundtrips to/from client

Количество сообщений Oracle Net, которые сервер и клиент передают туда и обратно.

Объем сортировки, выполненной в памяти

Объем выполненной сортировки на диске

Количество строк обработанных данных

Recursive CallsNumber of recursive calls generated at both the user and system level.

Oracle Database maintains tables used for internal processing. When it needs to change these tables, Oracle Database generates an internal SQL statement, which in turn generates a recursive call. In short, recursive calls are basically SQL performed on behalf of your SQL. So, if you had to parse the query, for example, you might have had to run some other queries to get data dictionary information. These would be recursive calls. Space management, security checks, calling PL/SQL from SQL—all incur recursive SQL calls。

При выполнении оператора SQL генерируются вызовы других операторов SQL. Эти дополнительные операторы называются «рекурсивными вызовами» или «рекурсивными операторами SQL». Когда мы выполняем вставку, не хватает места для сохранения Для записей строк Oracle динамически выделяет пространство с помощью рекурсивного вызова.

DB Block Gets:Number of times a CURRENT block was requested.

Current mode blocks are retrieved as they exist right now, not in a consistent read fashion. Normally, blocks retrieved for a query are retrieved as they existed when the query began. Current mode blocks are retrieved as they exist right now, not from a previous point in time. During a SELECT, you might see current mode retrievals due to reading the data dictionary to find the extent information for a table to do a full scan (because you need the «right now» information, not the consistent read). During a modification, you will access the blocks in current mode in order to write to them.

Читайте также:  биография пирогова николая ивановича кратко

DB Block Gets: количество запрошенных блоков данных, которые могут быть удовлетворены в буфере.

Consistent Gets: Number of times a consistent read was requested for a block.

This is how many blocks you processed in «consistent read» mode. This will include counts of blocks read from the rollback segment in order to roll back a block. This is the mode you read blocks in with a SELECT, for example. Also, when you do a searched UPDATE/DELETE, you read the blocks in consistent read mode and then get the block in current mode to actually do the modification.

Концепция здесь заключается в том, сколько блоков необходимо обработать в согласованном состоянии чтения при обработке вашей операции. Основная причина этих блоков заключается в том, что в процессе вашего запроса из-за других сеансов, работающих с блоком данных, и Запрашиваемый блок был изменен, но поскольку наш запрос вызывается перед этими изменениями, нам необходимо запросить предварительное изображение блока данных в сегменте отката, чтобы обеспечить согласованность данных. Это обеспечивает последовательные чтения.

Physical Reads:

Total number of data blocks read from disk. This number equals the value of «physical reads direct» plus all reads into buffer cache.

(Физические чтения: после запуска экземпляра количество блоков данных, прочитанных с диска в буферный кэш)

Это количество блоков данных, прочитанных с диска. Основные причины:

(1) Эти блоки не существуют в кеше базы данных

(2) Полное сканирование таблицы

(3) Сортировка дисков

Отношения между этими тремя можно грубо резюмировать следующим образом:

Под логическим чтением понимается количество блоков данных, которые Oracle читает из памяти. Вообще говоря, это «согласованные получает» + «получает блок db». Когда требуемый блок данных не может быть найден в памяти, его необходимо получить с диска, поэтому генерируются «физические чтения».

Обычно мы больше всего заботимся о физических чтениях. Если это значение очень велико, это означает, что необходимо запросить большой объем данных с диска в буферный кэш, что обычно означает, что в системе имеется большое количество операторов SQL для полного сканирования таблицы, что влияет на производительность базы данных. Поэтому старайтесь избегать выполнения оператора полного сканирования таблицы.Для оператора SQL полного сканирования таблицы рекомендуется добавить связанные индексы и оптимизировать оператор SQL для решения этой проблемы.

Что касается физических чтений, существует формула преобразования между тремя параметрами получения блока db и согласованного получения:

Коэффициент использования буфера данных = 1- (физические чтения / (получение блока db + согласованное получение)).

Используйте следующий оператор, чтобы просмотреть частоту попаданий в буфер данных:

Частота совпадений результатов запроса Buffer Cache должна быть выше 90%, в противном случае необходимо увеличить размер буфера данных.

48304ba5e6f9fe08f3fa1abda7d326ab

48304ba5e6f9fe08f3fa1abda7d326ab

bytes sent via SQL*Net to client:

Total number of bytes sent to the client from the foreground processes.

bytes received via SQL*Net from client:

Total number of bytes received from the client over Oracle Net.

SQL*Net roundtrips to/from client:

Total number of Oracle Net messages sent to and received from the client.

sorts (memory): сортировка в памяти.

Number of sort operations that were performed completely in memory and did not require any disk writes

You cannot do much better than memory sorts, except maybe no sorts at all. Sorting is usually caused by selection criteria specifications within table join SQL operations.

Сортировка (диск): Сортировка по диску.

Number of sort operations that required at least one disk write. Sorts that require I/O to disk are quite resource intensive. Try increasing the size of the initialization parameter SORT_AREA_SIZE.

Все сортировки сначала выполняются в памяти. Когда слишком много контента для сортировки и не помещается в области сортировки, требуется временное табличное пространство, что приводит к сортировке (диск)

The number of rows processed

Дополнительные сведения см. В интерактивной документации Oracle:Statistics Descriptions

2.5 Динамический анализ

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

Если в плане выполнения есть следующая подсказка:

Это напоминает пользователю, что текущая технология, используемая CBO, требует от пользователя учитывать эти факторы при анализе плана. Появление этого запроса означает, что в текущей таблице используется динамическая выборка. Таким образом, мы делаем вывод, что эта таблица не анализировалась.

Здесь будут две ситуации:

(1) Если таблица не была проанализирована, то CBO может получить данные анализа с помощью динамической выборки или правильно выполнить план.

(2) Если таблица была проанализирована, но аналитическая информация слишком старая, то CBO не будет использовать динамическую выборку, а будет использовать эти старые данные анализа, что может привести к неправильному плану выполнения.

три,JOINспособ

3.1 hash join

3.2 merge join

3.3 nested loop

Четыре, метод доступа к таблице

4.3 Индексное сканирование

Источник

Поделиться с друзьями
Моря и океаны
Adblock
detector