Автоматизація настройки запитів у версії Oracle 10g: деякі додаткові можливості, Інші СУБД, Бази даних, статті

“Вже ми його – і сяк і раз-сяк, –
Буржуя ентого … якого … в Криму … “
І клени морщаться вухами довгих гілок,
І баби охають в німу напівтемряву.
С. Єсенін. Русь радянська.

Уж я до неї і так, і сяк,
Зі словами і без слів!
Обламав чимало гілок,
Наламав чимало дров!
М. Таніч. Страждання.

Зміст



Анотація


Стаття є продовженням статті “Версія Oracle 10g: фахівці з налаштування запитів більше не потрібні” і розглядає деякі додаткові можливості пакета DBMS_SQLTUNE з виконання поглибленого аналізу окремих запитів і груп запитів.

Отримання рекомендацій у вигляді готового сценарію


Замість подання до оповідної формі (за допомогою функції REPORT_TUNUNG_TASK) рекомендації можна отримати у вигляді готового сценарію для SQL * Plus:

SELECT
DBMS_SQLTUNE.SCRIPT_TUNING_TASK ( “my_sql_tuning_task” )
FROM dual;

Отримаємо приблизно такий результат:

DBMS_SQLTUNE.SCRIPT_TUNING_TASK(“MY_SQL_TUNING_TASK”)
————————————————————————————-
—————————————————————–
— Script generated by DBMS_SQLTUNE package, advisor framework —
— Use this script to implement some of the recommendations —
— made by the SQL tuning advisor. —
— —
— NOTE: this script may need to be edited for your system —
— (index names, privileges, etc) before it is executed. —
—————————————————————–
execute dbms_stats.gather_table_stats(ownname => “SCOTT”, tabname =>
“DEPT”, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => “FOR ALL COLUMNS SIZE AUTO”, cascade => TRUE);
execute dbms_sqltune.accept_sql_profile(task_name => “my_sql_tuning_task”, replace => TRUE);

(Тут наведено дві команди EXECUTE, занадто довгі, щоб кожній поміститися в одному рядку екрану).

Можлива і більш обмежена видача, наприклад:

SELECT
DBMS_SQLTUNE.SCRIPT_TUNING_TASK
( “my_sql_tuning_task”, “STATISTICS, INDEXES” )
FROM dual
;

Налаштування запиту за посиланням у робочій області SQL в SGA


Поглиблений аналіз запиту можна виконати, пославшись на його ідентифікатор у робочій області SQL в SGA, на SQL_ID (V $ SQLAREA). Наприклад, в нашому випадку можна було б створити завдання так:

DECLARE
my_task_name VARCHAR2 ( 30 );
BEGIN
my_task_name :=
DBMS_SQLTUNE.CREATE_TUNING_TASK (
sql_id => “3dcfttkf1kwmn”
, task_name => “a_very_hard_sql_task”
);
END;
/

Групова настройка запитів


Засобами DBMS_SQLTUNE можна провести поглиблений аналіз (з побудовою, якщо можливо, профілю) відразу для груп запитів – наприклад, що надходять із заданого додатка, або обраних з робочої області SQL в SGA СУБД. Нижче наводиться приклад другого.

Побудуємо набір запитів, які надходили від користувача SCOTT:

EXECUTE DBMS_SQLTUNE.CREATE_SQLSET ( “my_workload” )
DECLARE
cur DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
OPEN cur FOR
SELECT VALUE ( P )
FROM TABLE (
DBMS_SQLTUNE.SELECT_CURSOR_CACHE (
basic_filter => “parsing_schema_name = “”SCOTT”””
, attribute_list => “ALL”
)
) P
;

DBMS_SQLTUNE.LOAD_SQLSET (
sqlset_name => “my_workload”
, populate_cursor => cur
);
END;
/


Таблична функція SELECT_CURSOR_CACHE повертає вкладену таблицю об’єктів типу DBMS_SQLTUNE.SQLSET_ROW, кожен з яких містить відомості про запити, відібраних з робочої області SQL в SGA. Завантаження “Набору запитів” виконується процедурою LOAD_SQLSET через посилання на курсор, сформований після перетворення вкладеної таблиці в список об’єктів функцією TABLE. Фільтр для відбору рядків в набір запитів з області SQL будується як умовне вираження по полях таблиці V $ SQLAREA і може бути набагато більш складним. Тип SQLSET_CURSOR є просто тип нестрогой посилання на курсор, то ж, що SYS_REFCURSOR, проте навіщось визначений самостійно в пакеті DBMS_SQLTUNE і тут вжито по інерції.

Побудуємо завдання для поглибленого аналізу створеного набору запитів:

VARIABLE ttask VARCHAR2 ( 100 )
BEGIN
:ttask := DBMS_SQLTUNE.CREATE_TUNING_TASK (
sqlset_name => “my_workload”
, task_name => “my_sqlset_task”
);
END;
/

Виконаємо аналіз:

EXECUTE DBMS_SQLTUNE.EXECUTE_TUNING_TASK ( :ttask )

Засобами пакету можна формувати набори запитів для аналізу і інакше, наприклад, за даними сховища робочого навантаження (Automatic Workload Repository).

Висновок

Начебто – гляну – все в порядку,
А виходить нісенітниця!
М. Таніч. Страждання.

У світлому минулому батьки-засновники реляційного підходу до моделювання баз даних (“моделювання за допомогою відносин”) вважали, що в реляційної системі для розробника програми немає поняття “настройка запиту “. Вважалося, що розробник буде формулювати запити так, як йому зручніше їх читати, а оптимізацією виконання запиту займеться СУБД.

Так само як і всі інші розробники СУБД, що використали прикметник “реляційна” для своїх систем, фірма Oracle назвалася грибом, а в кузов лізь не поспішала. Налаштуванням запитів в Oracle займатися доводилося з самого початку цієї СУБД. Перший оптимізатор запитів (частина СУБД, що відповідає за вироблення плану обробки запиту), rule-based, був простий, швидкий і … неадекватний. Часті погані плани вимагали ручної роботи з аналізу переформуліровке. Поки навантаження на БД були невеликі, це можна було терпіти, але з часом треба було розробити новий варіант оптимізатора – cost-based. Він вирішив багато проблем оптимізатора доступу, але ручної роботи навряд чи збавив, породивши цілий клас фахівців з “підказками” оптимізатору. Тим не менш, з’явившись в останніх випусках версії 7, він все-таки удосконалювався від версії до версії.

Нарешті, третій суттєвий крок з відпрацювання довгострокового кредиту, що отримується протягом багатьох років від покупців своєї системи, фірма Oracle зробила якраз у версії 10. Поглиблений аналіз дійсно дозволяє робити багато нового, наприклад виявляти декартові твори, що надходять від додатків (перевірте!), за що йому вже можна ставити пам’ятник. Однак не треба забувати, що він, подібно збору статистики для об’єктів запиту (таблиць, …) здійснюється вручну і вимагає своєчасного (коли? …) повторення.

Треба сподіватися, що в наступних версіях фірма ще більше наблизиться до того, що замишлялося творцями реляційного підходу 30 років тому. Для цього буде потрібно зовсім небагато: зробити ручне виконання поглибленого аналізу запиту автоматичним і основним!

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*