Стратегия настройки SQL запросов. Новые возможности на основе пакета dbms_sqltune Борчук Леонид.

Презентация:



Advertisements
Похожие презентации
ОПТИМИЗАЦИЯ SQL. Чем дальше от начала разработки обнаруживается неэффективность приложения, тем дороже она обходится Время Стоимость ПроектированиеРазработка.
Advertisements

Язык SQL Последовательности Представления Индексы.
Оптимизация SQL: методы уточнения стоимости в Oracle 11g Борчук Леонид.
Расширенные темы 1. SQL запросы Язык JPQL является абстракцией и «общим знаменателем» всех SQL диалектов. Очевидно, что конкретный диалект обладает бОльшими.
Настройка запроса по образцу: четыре способа корректировки плана запроса без изменения кода Деев Илья, «Иннова-Системс»
Оптимизация запросов в Microsoft SQL Server Дмитрий Костылев Начальник отдела разработки системного ПО ОАО «Нордеа Банк» SQL Server MVP.
Базы данных Язык запросов SQL. Команда SELECT (продолжение)
Базы данных Язык запросов SQL. Команда SELECT. Команда SELECT – выборка данных Общий синтаксис: SELECT [{ ALL | DISTINCT }] { список_вывода | * } FROM.
Поддержка триггеров в системах XML-баз данных Мария Гринева Институт Системного Программирования РАН.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
SQL-injections for dummies. Что это? Способ несанкционированного доступа к данным, хранящимся в БД, основанный на внедрении в запрос произвольного SQL-
Базы данных Язык запросов SQL. Команда SELECT. Дополнительные возможности.
Актуальность работы Необходимость разработки системы дистанционного тестирования профессиональных знаний, устраняющей недостатки существующих систем и.
PL/SQL Триггер блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие.
Базы данных. Введение Базы данных обеспечивают хранение информации. Доступ к базе данных осуществляется через специальную программу - систему управления.
Объединение таблиц Подзапросы. Оператор SELECT дает возможность выборки информации сразу из нескольких таблиц, которые перечислены в списке FROM. Такая.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
Обзор возможностей 11g Новые области для исследования Горбоконенко Евгений.
Выражения унарные (унарный минус) арифметические (+, -, *, /) сравнения (, =, =, , LIKE, BETWEEN...) конкатенации (||) логические (NOT, AND, OR)
Транксрипт:

Стратегия настройки SQL запросов. Новые возможности на основе пакета dbms_sqltune Борчук Леонид

RuOUG:Стратегия настройки SQL запросов Задача: Уменьшить время ответа

RuOUG:Стратегия настройки SQL запросов Методы решения задачи настройки Время ответа = Время обработки + Время ожидания 100% = 75% + 25% Модель времени ответа в системе с разделением ресурсов: ЛокальныеГлобальные Частота и количество процессоров Размер буфера Скорость дисковой подсистемы Увеличение не более 10% Уменьшить количество итераций при выполнении запроса или количество затрат ресурсов за счет изменения способа обработки Уменьшить затраты ресурсов в разы

RuOUG:Стратегия настройки SQL запросов Проблемы локальных методов настройки Методы настройки По классификации К. Миллсапа: Метод R Метод Время ответа Метод C Метод гипотез Как строить временную диаграмму, если отчет выполняется 5 суток? Зачем строить диаграмму, если проблемный запрос итак ясен? Что делать с 25% неизмеренного времени? Как правильно выбрать метрику для настройки? Когда следует прекратить настройку по метрике? Как оценить результаты настройки?

RuOUG:Стратегия настройки SQL запросов Пример. Метрика время выполнения SELECT /*+ INDEX(arc_portfolio ARC_PRT_FINE_IN_CNT_IDX) */ * FROM arc_portfolio WHERE prt_fine_in_vir = ' ' AND prt_fine_res_vir = ' ' SELECT /*+ INDEX(arc_portfolio ARC_PRT_FINE_RES_CNT_IDX) */ * FROM arc_portfolio WHERE prt_fine_in_vir = ' ' AND prt_fine_res_vir = ' ' | Id | Operation | Name | Rows | Cost (%CPU)| | 0 | SELECT STATEMENT | | | 459 (2)| |* 1 | TABLE ACCESS BY INDEX ROWID| ARC_PORTFOLIO | | 459 (2)| |* 2 | INDEX FULL SCAN | ARC_PRT_FINE_RES_CNT_IDX | 469 | 7 (0)| | Id | Operation | Name | Rows | Cost (%CPU)| | 0 | SELECT STATEMENT | | | 354 (2)| |* 1 | TABLE ACCESS BY INDEX ROWID| ARC_PORTFOLIO | | 354 (2)| |* 2 | INDEX SKIP SCAN | ARC_PRT_FINE_IN_CNT_IDX | 622 | 30 (0)| Elapsed: 00:00: consistent gets Elapsed: 00:00: consistent gets 1. Какой из вариантов запроса использовать, если их время выполнения одинаково? 2. Как не учитывать время ожидания на исполнение?

RuOUG:Стратегия настройки SQL запросов Пример. Стоимость SELECT a.*,fin_system.get_value (dpt_bonus, 'dpr_type') AS prt_dpr_type FROM arc_portfolio a, dic_portfolio_type WHERE prt_dt_buh fin_system.get_buh_date AND prt_dpt_id = dpt_id AND prt_deleted = | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | | 0 | SELECT STATEMENT | | 2 | 538 | 73 (16)| 00:00:01 | | 1 | NESTED LOOPS | | 2 | 538 | 73 (16)| 00:00:01 | |* 2 | TABLE ACCESS FULL | ARC_PORTFOLIO | 2 | 426 | 71 (16)| 00:00:01 | | 3 | TABLE ACCESS BY INDEX ROWID| DIC_PORTFOLIO_TYPE | 1 | 56 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | DPT_ID | 1 | | 0 (0)| 00:00:01 | RowsRow Source Operation 160 NESTED LOOPS (cr=281 pr=35 pw=0 time=0.0399s) TABLE ACCESS FULL ARC_PORTFOLIO (cr=109 pr=31 pw=0 time=0.0378s) TABLE ACCESS BY INDEX ROWID DIC_PORTFOLIO_TYPE (cr=172 pr=4 pw=0 time=0.0018s) INDEX UNIQUE SCAN DPT_ID (cr=12 pr=0 pw=0 time=0.0006s)

RuOUG:Стратегия настройки SQL запросов Стратегия Метрики Способы настройки Методы оценки результатов Неоднозначности Универсального метода настройки не существует Стратегия настройки – общий, недетализированный план настройки, охватывающий длительный период времени, способ достижения сложной цели, являющейся неопределённой и в дальнейшем корректируемой под изменившиеся условия.

RuOUG:Стратегия настройки SQL запросов Проблемы стратегий настройки Проблема: В большинстве случаев стратегия настройки определена неявно, в результате в процессе настройки происходит подмена цели. Примеры: Метод время ответа: Цель - построить временную диаграмму. Средство – трассировка Недостатки – требует полного выполнения операции, занимает большие объемы данных, содержит ошибки измерения. Настройка на основе правил: Цель – добиться красивого плана выполнения. Средство – избавиться от полного сканирования таблиц, hash и merge join. Настройка на основе метрик. Цель – минимизировать количество логических чтений. Средство – анализ статистики выполнения.

RuOUG:Стратегия настройки SQL запросов Стратегия локальной настройки Частная задача – настройка плана выполнения запроса. Стратегия: Локальная цель – получить любой план выполнения запроса, отвечающий требованиям производительности. Средство – добиться адекватности оценок стоимостного оптимизатора. Получить требуемое время выполнения не всегда возможно. Адекватные оценки – необходимое условие выбора оптимального способа выполнения. Преимущества предлагаемой стратегии – минимизация времени выполнения настройки. Wolfgang Breitling SQL Tuning with Statistics

RuOUG:Стратегия настройки SQL запросов План действий локальной настройки Определить текущий план выполнения Получить актуальную статистику плана выполнения Определить момент возникновения ошибки оценки Определить предикаты, вызывающие неправильную оценку Исправить статистику

RuOUG:Стратегия настройки SQL запросов Пример. История изменений SELECT a.*,fin_system.get_value (dpt_bonus, 'dpr_type') AS prt_dpr_type FROM arc_portfolio a, dic_portfolio_type WHERE prt_dt_buh fin_system.get_buh_date AND prt_dpt_id = dpt_id AND prt_deleted = 0 SELECT * FROM curr_portfolio

RuOUG:Стратегия настройки SQL запросов Пример. Представление с версионностью SELECT * FROM curr_portfolio СоотношениеСтрокОценкаОперация SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL ARC_PORTFOLIO TABLE ACCESS BY INDEX ROWID DIC_PORTFOLIO_TYPE INDEX UNIQUE SCAN DPT_ID PRT_DELETED=0 AND PRT_DT_BUH FIN_SYSTEM.GET_BUH_DATE() ПредикатСелективность PRT_DT_BUH 0,0500 PRT_DT_NEXT 0,0500 PRT_DELETED 0,9764

RuOUG:Стратегия настройки SQL запросов Пример. Настройка представления SELECT * FROM v$sql WHERE UPPER (sql_text) LIKE '%CURR_PORTFOLIO%'; variable stmt_task VARCHAR2(64); EXEC :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id =>'94j7a7adr62jd'); EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task); EXEC DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(:stmt_task); OperationNameRowsCost SELECT STATEMENT MERGE JOIN TABLE ACCESS BY INDEX ROWIDDIC_PORTFOLIO_TYPE 148 INDEX FULL SCANDPT_ID 141 SORT JOIN TABLE ACCESS FULLARC_PORTFOLIO Note - SQL profile "SYS_SQLPROF_01492e8d033f0001" used for this statement

RuOUG:Стратегия настройки SQL запросов SQL Profile Tom Kyte Jonathan Lewis Wolfgang Breitling Christian Antognini Деев Илья

RuOUG:Стратегия настройки SQL запросов Уточнение статистики по таблице TABLE, SCALE_ROWS= ) Table: ARC_PORTFOLIO Alias: A Card: Original: 934 >> Single Tab Card adjusted from: 2.28 to: Rounded: 160 Computed: Non Adjusted: 2.28 EXEC DBMS_STATS.SET_TABLE_STATS(ownname=>'ABSMAIN',tabname => 'ARC_PORTFOLIO', numrows => 18000); OperationNameRowsCost SELECT STATEMENT HASH JOIN TABLE ACCESS FULL DIC_PORTFOLIO_TYPE1415 TABLE ACCESS FULL ARC_PORTFOLIO

RuOUG:Стратегия настройки SQL запросов Уточнение статистики по соединению JOIN, SCALE_ROWS= ) Join order[294]: ARC_PORTFOLIO[A]#1 ARC_CREDIT[A]#4 DIC_PORTFOLIO_TYPE[DIC_PORTFOLIO_TYPE]#0 ARC_CONTRACT[T]#2 DAT_CREDITCOUNTS[DAT_CREDITCOUNTS]#5 ARC_COUNT3[A]#3 ARC_COUNT1[A]#6 *************** Now joining: ARC_CREDIT[A]#4 *************** NL Join Outer table: Card: Cost: Resp: Degree: 1 Bytes: 57 Inner table: ARC_CREDIT Alias: A Join Card: = outer (161.58) * inner ( ) * sel ( ) >> Join Card adjusted from to: , prelen=2 Adjusted Join Cards: adjRatio=0.27 cardHjSmj= cardHjSmjNPF= cardNlj= cardNSQ= cardNSQ_na= Join Card - Rounded: Computed:

RuOUG:Стратегия настройки SQL запросов Другие способы уточнения статистики OPT_ESTIMATE(, INDEX_FILTER,,, SCALE_ROWS= ) Уточнение статистики по индексу: Уточнение отсутствующей или устаревшей статистики по объектам : TABLE_STATS(, scale, blocks=405 rows=6116) COLUMN_STATS(,, scale, length=8) INDEX_STATS(,, scale, blocks=56 index_rows=6116)

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

RuOUG:Стратегия настройки SQL запросов Модернизация статистик профиля EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF (table_name,schema_name); EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name, staging_schema_owner, profile_name); EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF(replace => TRUE, staging_table_name, staging_schema_owner); OperationNameRowsCost SELECT STATEMENT MERGE JOIN TABLE ACCESS BY INDEX ROWIDDIC_PORTFOLIO_TYPE 148 INDEX FULL SCANDPT_ID 141 SORT JOIN TABLE ACCESS FULLARC_PORTFOLIO 11471

RuOUG:Стратегия настройки SQL запросов Cost-based transformation Разбор грамматики Эвристическое преобразование Преобразование, основанное на стоимости Физическая оптимизация VLDB Sep 06 Cost-based query transformation in Oracle ahmed.pdf?key1= &key2= &coll=&dl= ACM&CFID= &CFTOKEN= VLDB 1994 Query Optimization by Predicate Move-Around

RuOUG:Стратегия настройки SQL запросов Query block SELECT e1.employee_name, j.job_title FROM employees e1, job_history j WHERE e1.emp_id = j.emp_id and j.start_date > ' ' and e1.salary > (SELECT AVG (e2.salary) FROM employees e2 WHERE e2.dept_id = e1.dept_id) and e1.dept_id IN (SELECT dept_id FROM departments d, locations l WHERE d.loc_id = l.loc_id and l.country_id = 'US'); SELECT e1.employee_name, j.job_title FROM employees e1, job_history j, (SELECT AVG(e2.salary) avg_sal, dept_id FROM employees e2 GROUP BY dept_id) V WHERE e1.emp_id = j.emp_id and j.start_date > ' ' and e1.dept_id = V.dept_id and e1.salary > V.avg_sal and e1.dept_id IN (SELECT dept_id FROM departments d, locations l WHERE d.loc_id = l.loc_id and l.country_id = 'US'); SUBQUERY UNNESTING SELECT e1.employee_name, j.job_title FROM employees e1, job_history j, (SELECT DISTINCT dept_id FROM departments d, locations l WHERE d.loc_id = l.loc_id and l.country_id IN ('US')) VD WHERE e1.emp_id = j.emp_id and j.start_date > ' ' and e1.salary > (SELECT AVG (e2.salary) FROM employees e2 WHERE e2.dept_id = e1.dept_id) and e1.dept_id = VD.dept_id; DISTINCT VIEW СостояниеQuery blocks "(0,0)"Qs1 Qs2 Qo "(1,0)"T(Qs1) Qs2 Qo "(0,1)"Qs1 T(Qs2) Qo "(1,1)"T(Qs1) T(Qs2) Qo

RuOUG:Стратегия настройки SQL запросов QB_NAME SELECT /*+ QB_NAME(qb) e) */ employee_id, last_name FROM employees e WHERE last_name = 'Smith'; Query block name изменяется при трансформации запроса: JPPD - join predicate push-down FPD - filter push-down PM - predicate move-around CVM - complex view merging SPJ - select-project-join SJC - set join conversion SU - subquery unnesting OBYE - order by elimination ST - star transformation EVENT 10053: ************************** Predicate Move-Around (PM) ************************** PM: Considering predicate move-around in SEL$15 (#0). Query block (c a75658) before join elimination: SQL:******* UNPARSED QUERY IS ******* SELECT … Query block (c a75658) unchanged

RuOUG:Стратегия настройки SQL запросов Пример. Запрос Количество строк запроса: 124 Количество шагов плана выполнения до применения профиля: 82 Количество шагов плана выполнения после применения профиля: 74 Время выполнения до применения профиля: 14 с Время выполнения после применения профиля: 8 c Время построения профиля: 20 мин Процент адекватных оценок кардинальности: 70% Количество блоков запроса; 15 Количество хинтов QB_NAME: 6 Количество оставшихся названий Query Block: 1

RuOUG:Стратегия настройки SQL запросов Резюме 1.Для настройки требуется стратегия. 2.Для задачи настройки плана выполнения конкретного запроса одна из выигрышных стратегий состоит в обеспечении адекватности оценок стоимостного оптимизатора. 3.В последнее время появляются новые средства для реализации стратегии – например, пакет dbms_sqltune. 4.Адекватность оценок стоимостного оптимизатора требуется для реализации других стратегий.

RuOUG:Стратегия настройки SQL запросов Вопросы и ответы ?.?.?. Борчук Леонид Администратор БД, г. Череповец