🗊 Презентация Подсказки для оптимизатора

Категория: Информатика
Нажмите для полного просмотра!
Подсказки для оптимизатора, слайд №1 Подсказки для оптимизатора, слайд №2 Подсказки для оптимизатора, слайд №3 Подсказки для оптимизатора, слайд №4 Подсказки для оптимизатора, слайд №5 Подсказки для оптимизатора, слайд №6 Подсказки для оптимизатора, слайд №7 Подсказки для оптимизатора, слайд №8 Подсказки для оптимизатора, слайд №9 Подсказки для оптимизатора, слайд №10 Подсказки для оптимизатора, слайд №11 Подсказки для оптимизатора, слайд №12 Подсказки для оптимизатора, слайд №13 Подсказки для оптимизатора, слайд №14 Подсказки для оптимизатора, слайд №15 Подсказки для оптимизатора, слайд №16 Подсказки для оптимизатора, слайд №17 Подсказки для оптимизатора, слайд №18 Подсказки для оптимизатора, слайд №19 Подсказки для оптимизатора, слайд №20 Подсказки для оптимизатора, слайд №21 Подсказки для оптимизатора, слайд №22 Подсказки для оптимизатора, слайд №23 Подсказки для оптимизатора, слайд №24 Подсказки для оптимизатора, слайд №25 Подсказки для оптимизатора, слайд №26 Подсказки для оптимизатора, слайд №27 Подсказки для оптимизатора, слайд №28 Подсказки для оптимизатора, слайд №29 Подсказки для оптимизатора, слайд №30 Подсказки для оптимизатора, слайд №31 Подсказки для оптимизатора, слайд №32 Подсказки для оптимизатора, слайд №33 Подсказки для оптимизатора, слайд №34 Подсказки для оптимизатора, слайд №35 Подсказки для оптимизатора, слайд №36 Подсказки для оптимизатора, слайд №37 Подсказки для оптимизатора, слайд №38 Подсказки для оптимизатора, слайд №39 Подсказки для оптимизатора, слайд №40 Подсказки для оптимизатора, слайд №41 Подсказки для оптимизатора, слайд №42

Содержание

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

Слайды и текст этой презентации


Слайд 1


Подсказки для оптимизатора Графеева Н.Г. 2017
Описание слайда:
Подсказки для оптимизатора Графеева Н.Г. 2017

Слайд 2


План запроса Практически любую задачу по получению каких-либо результатов из базы данных можно решить несколькими способами, т.е. написать несколько...
Описание слайда:
План запроса Практически любую задачу по получению каких-либо результатов из базы данных можно решить несколькими способами, т.е. написать несколько разных запросов, которые дадут один и тот же результат. Это, однако не означает, что база данных эти запросы будет выполнять по-разному. Также неверно мнение о том, что структура запроса может повлиять на то, как Oracle будет его выполнять (это касается порядка временных таблиц, JOINS и условий отбора в WHERE). Решение о том, как построить запрос принимает оптимизатор Oracle. Алгоритм получения сервером данных для конкретного запроса называют планом запроса. Практически все продукты для работы с базой данных Oracle позволяют просмотреть план конкретного запроса. ORACLE Apex также не является исключением.

Слайд 3


Как это выглядит в ORACLE APEX?
Описание слайда:
Как это выглядит в ORACLE APEX?

Слайд 4


Некоторые термины в плане запроса TABLE ACCESS FULL — сервер просмотрит все записи таблицы. TABLE ACCESS BY INDEX ROWID — таблица будет просмотрена...
Описание слайда:
Некоторые термины в плане запроса TABLE ACCESS FULL — сервер просмотрит все записи таблицы. TABLE ACCESS BY INDEX ROWID — таблица будет просмотрена частично с помощью индекса. INDEX RANGE SCAN — для получения выборки нужных значений будет использован индекс таблицы. HASH JOIN — для получения выборки нужных значений будет построена хэш-таблица. NESTED LOOPS — нужные значения будут получены путем полного просмотра основной таблицы и поиском записей во вспомогательной. Это реализация схемы доступа «один — ко многим», т.е. в качестве основной таблицы будет выбрана та в которой наименьшее количество записей, на основе этих записей будет производиться поиск во вспомогательной таблице.

Слайд 5


Некоторые термины в плане запроса SORT MERGE JOIN — используется для соединения записей нескольких независимых источников. Сначала оба источника...
Описание слайда:
Некоторые термины в плане запроса SORT MERGE JOIN — используется для соединения записей нескольких независимых источников. Сначала оба источника сортируются по объединяющему ключу, а затем происходит из слияние. BUFFER SORT — в некоторых случаях Oracle может определить, что при выполнении запроса обращение к некоторому блоку данных может быть выполнено несколько раз, в этом случае Oracle помещает этот блок в специальную область, чтобы ускорить к нему доступ. Запрос может не иметь ключевого слова SORT, но при его выполнении будет вызвана эта операция. MERGE JOIN CARTESIAN — для получения выборки нужных значений будет организовано перемножение записей в двух таблицах (для каждой записи основной таблицы будут просмотрены все записи вспомогательной). Это очень плохая операция, ее наличие в плане запроса говорит о том, что скорей всего упущена какая-то связка в JOIN.

Слайд 6


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

Слайд 7


Full Table Scan (Table Access Full). Может показаться, что доступ к данным таблицы быстрее осуществлять через индекс, но это не так. Иногда дешевле...
Описание слайда:
Full Table Scan (Table Access Full). Может показаться, что доступ к данным таблицы быстрее осуществлять через индекс, но это не так. Иногда дешевле прочитать всю таблицу целиком, чем прочитать, например, 80% записей таблицы через индекс, так как чтение индекса тоже требует ресурсов. Очень нежелательна ситуация, когда эта операция стоит первой в объединении наборов записей и таблица, которая читается полностью, большая. Еще хуже ситуация с большой таблицей на второй позиции в объединении, это означает, что она также будет прочитана полностью, а если объединение производится через NESTED LOOPS, то таблица будет читаться несколько раз, поэтому запрос будет работать очень долго.

Слайд 8


Nested Loops Такое соединение может использоваться оптимизатором, когда небольшой основной набор записей (стоит первым в плане запроса) объединяется...
Описание слайда:
Nested Loops Такое соединение может использоваться оптимизатором, когда небольшой основной набор записей (стоит первым в плане запроса) объединяется с помощью условия, позволяющего эффективно выбрать записи из второго набора. Важным условием успешного использования такого соединения является наличие связи между основным и второстепенным набором записей. Если такой связи нет, то для каждой записи в первом наборе, из второго набора будут извлекаться одни и те же записи, что может привести к значительному увеличению времени запроса. Если вы видите, что в плане запроса применен NESTED LOOPS, а соединяемые наборы не удовлетворяют этому условию, то это плохой запрос.

Слайд 9


Hash Joins Используется при соединении больших наборов данных. Оптимизатор использует наименьший из наборов данных для построения в памяти...
Описание слайда:
Hash Joins Используется при соединении больших наборов данных. Оптимизатор использует наименьший из наборов данных для построения в памяти хэш-таблицы по ключу соединения. Затем он сканирует большую таблицу, используя хэш-таблицу для нахождения записей, которые удовлетворяют условию объединения. Оптимизатор использует HASH JOIN, если наборы данных соединяются с помощью операторов и ключевых слов эквивалентности (=, AND) и если присутствует одно из условий: ■ Необходимо соединить наборы данных большого объема. ■ Большая часть небольшого набора данных должна быть использована в соединении.

Слайд 10


Sort Merge Join Данное соединение может быть применено для независимых наборов данных. Обычно Oracle выбирает такую стратегию, если наборы данных уже...
Описание слайда:
Sort Merge Join Данное соединение может быть применено для независимых наборов данных. Обычно Oracle выбирает такую стратегию, если наборы данных уже отсортированы ранее, и если дальнейшая сортировка результата соединения не требуется. Обычно это имеет место для наборов, которые соединяются с помощью операторов =. Для этого типа соединения нет понятия главного и вспомогательного набора данных, сначала оба набора сортируются по общему ключу, а затем сливаются в одно целое. Если какой-то из наборов уже отсортирован, то повторная сортировка для него не производится.

Слайд 11


Cartesian Joins Это соединение используется, когда одна и более таблиц не имеют никаких условий соединения с какой-либо другой таблицей в запросе. В...
Описание слайда:
Cartesian Joins Это соединение используется, когда одна и более таблиц не имеют никаких условий соединения с какой-либо другой таблицей в запросе. В этом случае произойдет объединение каждой записи из одного набора данных с каждой записью в другом. Наличие такого соединения может (но не обязательно) означать присутствие серьезных проблем в запросе. В этом случае, возможно, упущены дополнительные условия соединения наборов данных.

Слайд 12


Определение Подсказка (hint) – это указание оптимизатору на необходимость исполнения определенной формы доступа к данным на некотором шаге построения...
Описание слайда:
Определение Подсказка (hint) – это указание оптимизатору на необходимость исполнения определенной формы доступа к данным на некотором шаге построения плана исполняемого запроса.

Слайд 13


Синтаксис {DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */... or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...
Описание слайда:
Синтаксис {DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */... or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...

Слайд 14


Примеры ====================================================== SELECT /*+ ALL_ROWS */ empno, ename, sal, job FROM emp WHERE ename = ‘CAT’;...
Описание слайда:
Примеры ====================================================== SELECT /*+ ALL_ROWS */ empno, ename, sal, job FROM emp WHERE ename = ‘CAT’; ======================================================= SELECT --+ RULE empno, ename, sal, job FROM emp WHERE empno > 7566; =======================================================

Слайд 15


Что будет, если подсказка написана неправильно… ORACLE игнорирует подсказки, которые не следуют за ключевыми словами DELETE, INSERT, SELECT or UPDATE...
Описание слайда:
Что будет, если подсказка написана неправильно… ORACLE игнорирует подсказки, которые не следуют за ключевыми словами DELETE, INSERT, SELECT or UPDATE (рассматривает, как простые комментарии). ORACLE игнорирует подсказки, написанные с синтаксическими ошибками , но при этом учитывает правильные подсказки, написанные в этом же операторе. ORACLE игнорирует конфликтующие подсказки, но при этом учитывает правильные подсказки, написанные в этом же операторе.

Слайд 16


Группы подсказок Подсказки можно разделить на следующие группы: подсказки задающие цели оптимизации подсказки задающие методы доступа подсказки для...
Описание слайда:
Группы подсказок Подсказки можно разделить на следующие группы: подсказки задающие цели оптимизации подсказки задающие методы доступа подсказки для операций соединения другие подсказки

Слайд 17


Подсказки, задающие цели оптимизации ALL_ROWS FIRST_ROWS(n) CHOOSE RULE
Описание слайда:
Подсказки, задающие цели оптимизации ALL_ROWS FIRST_ROWS(n) CHOOSE RULE

Слайд 18


Пример (ALL_ROWS) SELECT /*+ ALL_ROWS */ employee_id, last_name, salary, job_id FROM employees
Описание слайда:
Пример (ALL_ROWS) SELECT /*+ ALL_ROWS */ employee_id, last_name, salary, job_id FROM employees

Слайд 19


Пример (FIRST_ROWS(n)) SELECT /*+ FIRST_ROWS(10) */ empno, ename, sal, job FROM emp
Описание слайда:
Пример (FIRST_ROWS(n)) SELECT /*+ FIRST_ROWS(10) */ empno, ename, sal, job FROM emp

Слайд 20


Пример (CHOOSE) SELECT /*+ CHOOSE */ empno, ename, sal, job FROM emp WHERE empno = 7566;
Описание слайда:
Пример (CHOOSE) SELECT /*+ CHOOSE */ empno, ename, sal, job FROM emp WHERE empno = 7566;

Слайд 21


Пример (RULE) SELECT --+ RULE empno, ename, sal, job FROM emp WHERE empno = 7566;
Описание слайда:
Пример (RULE) SELECT --+ RULE empno, ename, sal, job FROM emp WHERE empno = 7566;

Слайд 22


Подсказки, задающие методы доступа FULL ROWID INDEX INDEX_ASC INDEX_DESC INDEX_FFS NO_INDEX INDEX_COMBINE INDEX_JOIN ….
Описание слайда:
Подсказки, задающие методы доступа FULL ROWID INDEX INDEX_ASC INDEX_DESC INDEX_FFS NO_INDEX INDEX_COMBINE INDEX_JOIN ….

Слайд 23


Пример (FULL) SELECT /*+ FULL(e) */ employee_id, last_name FROM hr.employees e WHERE last_name LIKE ‘%A’;
Описание слайда:
Пример (FULL) SELECT /*+ FULL(e) */ employee_id, last_name FROM hr.employees e WHERE last_name LIKE ‘%A’;

Слайд 24


Пример (ROWID) SELECT /*+ROWID(emp)*/ * FROM emp WHERE rowid > 'AAAAtkAABAAAFNTAAA' AND empno = 155;
Описание слайда:
Пример (ROWID) SELECT /*+ROWID(emp)*/ * FROM emp WHERE rowid > 'AAAAtkAABAAAFNTAAA' AND empno = 155;

Слайд 25


Пример (INDEX) SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id FROM employees WHERE department_id > 50;
Описание слайда:
Пример (INDEX) SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id FROM employees WHERE department_id > 50;

Слайд 26


Пример (INDEX_ASC)
Описание слайда:
Пример (INDEX_ASC)

Слайд 27


Пример (INDEX_ASC)
Описание слайда:
Пример (INDEX_ASC)

Слайд 28


Пример (INDEX_ASC)
Описание слайда:
Пример (INDEX_ASC)

Слайд 29


Пример (INDEX_DESC) SELECT /*+ INDEX_DESC(emp pk_emp) */ empno , ename FROM emp SELECT /*+ INDEX_DESC(emp pk_emp) */ empno , ename FROM emp where...
Описание слайда:
Пример (INDEX_DESC) SELECT /*+ INDEX_DESC(emp pk_emp) */ empno , ename FROM emp SELECT /*+ INDEX_DESC(emp pk_emp) */ empno , ename FROM emp where rownum = 1

Слайд 30


Пример (INDEX_FFS) SELECT /*+INDEX_FFS(emp emp_empno)*/ empno FROM emp WHERE empno > 200;
Описание слайда:
Пример (INDEX_FFS) SELECT /*+INDEX_FFS(emp emp_empno)*/ empno FROM emp WHERE empno > 200;

Слайд 31


Пример (NO_INDEX) SELECT /*+NO_INDEX(emp emp_empno)*/ empno FROM emp WHERE empno > 200;
Описание слайда:
Пример (NO_INDEX) SELECT /*+NO_INDEX(emp emp_empno)*/ empno FROM emp WHERE empno > 200;

Слайд 32


Пример (INDEX_COMBINE) SELECT /*+ INDEX_COMBINE(e emp_manager_ix emp_department_ix) */ * FROM employees e WHERE manager_id = 108 OR department_id =...
Описание слайда:
Пример (INDEX_COMBINE) SELECT /*+ INDEX_COMBINE(e emp_manager_ix emp_department_ix) */ * FROM employees e WHERE manager_id = 108 OR department_id = 110; Примечание: emp_manager_ix, emp_department_ix - bitmap индексы по полям manager_id и department_id. Оптимизатору рекомендовано построить логическое выражение (операция OR) из этих индексов.

Слайд 33


Пример (INDEX_JOIN) SELECT /*+ INDEX_JOIN(e emp_manager_ix emp_department_ix) */ department_id FROM employees e WHERE manager_id < 110 AND...
Описание слайда:
Пример (INDEX_JOIN) SELECT /*+ INDEX_JOIN(e emp_manager_ix emp_department_ix) */ department_id FROM employees e WHERE manager_id < 110 AND department_id < 50; Оптимизатору рекомендовано построить логическое выражение (операция AND) из этих индексов.

Слайд 34


Подсказки для операции соединения (JOIN) USE_NL - использовать вложенные циклы для соединения указанных в подсказке таблиц; USE_MERGE – сначала...
Описание слайда:
Подсказки для операции соединения (JOIN) USE_NL - использовать вложенные циклы для соединения указанных в подсказке таблиц; USE_MERGE – сначала выполнить сортировку, а затем ‘склеивание’ указанных таблиц; USE_HASH – HASH-соединение (сначала строится HASH-таблица, а затем ‘склеиваются’ фрагменты с одинаковыми HASH-значениями) ……..

Слайд 35


Пример (USE_NL) SELECT /*+ USE_NL(customers) to get first row faster */ accounts.balance, customers.last_name, customers.first_name FROM accounts,...
Описание слайда:
Пример (USE_NL) SELECT /*+ USE_NL(customers) to get first row faster */ accounts.balance, customers.last_name, customers.first_name FROM accounts, customers WHERE accounts.custno = customers.custno;

Слайд 36


Пример (USE_MERGE) SELECT /*+USE_MERGE(emp dept)*/ * FROM emp, dept WHERE emp.deptno = dept.deptno;
Описание слайда:
Пример (USE_MERGE) SELECT /*+USE_MERGE(emp dept)*/ * FROM emp, dept WHERE emp.deptno = dept.deptno;

Слайд 37


Другие подсказки MATERIALIZE – материализовать промежуточную таблицу PARALLEL – распараллелить выполнение запроса И др.
Описание слайда:
Другие подсказки MATERIALIZE – материализовать промежуточную таблицу PARALLEL – распараллелить выполнение запроса И др.

Слайд 38


Сбор статистики, полезной для оптимизатора Статистика по таблицам Количество записей Количество блоков Средняя длина записи Статистика по колонкам...
Описание слайда:
Сбор статистики, полезной для оптимизатора Статистика по таблицам Количество записей Количество блоков Средняя длина записи Статистика по колонкам Количество различных значений в колонках Количество null-значений в колонках Статистика по индексам Системная статистика

Слайд 39


Процедуры для сбора статистики (пакет DBMS_STATS) GATHER_INDEX_STATS GATHER_TABLE_STATS GATHER_SCHEMA_STATS GATHER_DATABASE_STATS GATHER_SYSTEM_STATS...
Описание слайда:
Процедуры для сбора статистики (пакет DBMS_STATS) GATHER_INDEX_STATS GATHER_TABLE_STATS GATHER_SCHEMA_STATS GATHER_DATABASE_STATS GATHER_SYSTEM_STATS Примечание: эти процедуры не запускаются автоматически! Необходимо встраивать в приложения регулярный сбор статистики (или создавать отдельные приложения для администрирования).

Слайд 40


Представления словаря для просмотра статистики DBA_TABLES DBA_TAB_COL_STATISTICS DBA_INDEXES
Описание слайда:
Представления словаря для просмотра статистики DBA_TABLES DBA_TAB_COL_STATISTICS DBA_INDEXES

Слайд 41


Пример SELECT TABLE_NAME, NUM_ROWS, BLOCKS, AVG_ROW_LEN, TO_CHAR(LAST_ANALYZED, 'MM/DD/YYYY HH24:MI:SS') FROM DBA_TABLES WHERE TABLE_NAME IN...
Описание слайда:
Пример SELECT TABLE_NAME, NUM_ROWS, BLOCKS, AVG_ROW_LEN, TO_CHAR(LAST_ANALYZED, 'MM/DD/YYYY HH24:MI:SS') FROM DBA_TABLES WHERE TABLE_NAME IN ('SO_LINES_ALL','SO_HEADERS_ALL','SO_LAST_ALL');

Слайд 42


Домашнее задание 8(10 баллов) Загрузите данные о потреблении электроэнергии (XML-файл electric power.xml прилагается к презентации). Проанализируйте...
Описание слайда:
Домашнее задание 8(10 баллов) Загрузите данные о потреблении электроэнергии (XML-файл electric power.xml прилагается к презентации). Проанализируйте среднестатистическое потребление электроэнергии по временам года и дням недели. Результат выдайте в виде таблицы и соответствующих графиков (для времен года). Примерный вид таблицы:



Похожие презентации
Mypresentation.ru
Загрузить презентацию