Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

L3_NC

.pdf
Скачиваний:
17
Добавлен:
19.04.2015
Размер:
940.03 Кб
Скачать

Техническая поддержка программных решений 3/10 Методы выявления ошибок в SQL приложениях

© 2013 NetCracker Technology Corporation Confidential

Цель лекции

Оптимизация запросов

SQL injection

Выявление ошибок в запросе

Отладка в Oracle SQL Developer

© 2013 NetCracker Technology Corporation Confidential

2

Разминка

SQL> descr

emp

Name

Null?

Type

------

-------- -----------

EMPNO

NOT NULL NUMBER(4)

ENAME

 

VARCHAR2(20)

JOB

 

VARCHAR2(9)

MGR

 

NUMBER(4)

HIREDATE

 

DATE

В следующей SELECT команде четыре ошибки.

SAL

NUMBER(7,2)

COMM

NUMBER(7,2)

DEPTNO

NUMBER(2)

SELECT empno, ename

salary x 12 ANNUAL SALARY FROM emp;

© 2013 NetCracker Technology Corporation Confidential

3

Понимание SQL

Troubleshooting does not depend on magic, mystique, or myth; it depends on understanding, observation, and interpretation

Christian Antognini

По материалам «Troubleshooting SQL queries» Виталий Платонов, NC

4

© 2013 NetCracker Technolo y Corporation Confidential

План

Жизненный цикл запроса

Что такое синтаксический анализ и как он работает

Связанные переменные – преимущества и недостатки

Как Oracle хранит данные

План запроса – как получить, как интерпретировать

Неоптимальные запросы – как идентифицировать

Способы улучшения запросов

© 2013 NetCracker Technology Corporation Confidential

5

Жизненный цикл запроса

© 2013 NetCracker Technology Corporation Confidential

6

Parsing (синтаксический анализ)

Примеры:

SELECT NAME FROM nc_objects WHERE rownum = 1

SELECT NAME FROM nc_OBJECTS WHERE rownum = 1

© 2013 NetCracker Technology Corporation Confidential

7

Bind variables (Cвязанные переменные)

Преимущества:

Нет лишних hard parses

Легче манипулировать данными

Противодействие SQL injections

Bind variable graduation

Недостатки:

Оптимизатор неправильно выбирает план

Bind variable peeking

© 2013 NetCracker Technology Corporation Confidential

8

Bind variable peeking

select name from NC_objects where object_id < 999999999999999999999;

select name from NC_objects where object_id < 1010;

variable id number;

exec :id := 999999999999999999999;

select name from NC_objects where object_id < :id;

exec :id := 1010;

select name from NC_objects where object_id < :id;

© 2013 NetCracker Technology Corporation Confidential

9

План запроса – как получить

EXPLAIN PLAN

explain plan for select name from nc_objects where object_id < 1010;

select * from table(dbms_xplan.display);

Запрос к library cache

v$sql_plan, v$sql_plan_statistics, v$sql_workarea, v$sql_plan_statistics_all statistics level, gather_plan_statistics hint

select /*+ gather_plan_statistics */ select name from NC_objects where object_id < 1010; SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR (NULL, NULL, 'ALLSTATS LAST'));

AWR aka Automatic Workload Repository

Activate tracing

© 2013 NetCracker Technology Corporation Confidential

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]