Оптимізація

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

Перевага автоматичної оптимізації полягає в тому, що користувач може не замислюватися над найкращим способом вираження своїх запитів (тобто над тим, як слід сформулювати запит, щоб система виконала його з максимальною продуктивністю) Але і це далеко не все Цілком імовірно, що оптимізатор сформулює запит краще, ніж сам користувач Для подібного твердження є кілька вагомих причин Нижче наведено лише деякі з них

1 Хороший оптимізатор має великий обсяг корисної інформації, кото раю для користувача звичайно недоступна Говорячи конкретніше, оптимізатор владе ет певними статистичними даними (зокрема про кардинальності пе ремінних відносини і тд), у тому числі наступними:

■ кількість різних значень кожного типу

■ поточну кількість кортежів у кожної базової змінної відносини

■ поточну кількість розрізняються значень для кожного атрибута в кожної базової змінної відносини

■ кількість входжень кожного значення в кожному з атрибутів і тп

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

2 Якщо з часом статистичні показники бази даних значно зміняться (наприклад, в результаті її фізичної реорганізації), то при реалізації запиту може виявитися доцільніше використовувати іншу стратегію, відмінну від при менявшейся раніше Іншими словами, виникне необхідність у повторній оп тимізації, або реоптімізаціі У реляційних системах процес реоптімізаціі цілком тривіальний і зводиться до простої повторній обробці початкового запиту системним оптимізатором У нереляційних же системах виконання реоптімі зації, як правило, вимагає коректування програми і, цілком можливо, мо же виявитися взагалі нездійсненним

3 Оптимізатор – це програма, яка за визначенням завжди доводить розпочату роботу до кінця, на відміну від людини Оптимізатор здатний розглядати буквально сотні різних стратегій реалізації конкретного запиту, в той час як програміст навряд чи проаналізує більше трьох-чотирьох можливих страте гій (принаймні, досить глибоко)

4 У оптимізаторі реалізовані знання і досвід кращих з кращих програмістів, в результаті чого ці знання і досвід стають доступними для всіх Це дозволяє застосовувати обмежений набір ресурсів, наданий широкому колу користувачів, найбільш ефективно і економічно

Наведені вище міркування служать переконливим доказом зробленого на початку даного розділу заяви про те, що оптимізується (тобто можливість оптимізації запитів) є сильною стороною реляційних систем

Загальне призначення оптимізатора полягає у виборі найбільш ефективної стратегії обчислення реляційного вираження У цьому розділі описані деякі фундаментальні

принципи і методи, що застосовуються в процесі оптимізації Після обговорення вступного прикладу, наведеного в розділі 182, в розділі 183 запропонований огляд принципів роботи оптимізатора Потім у розділі 184 обговорюється один з найважливіших аспектів процедури оптимізації – перетворення виразів (Або перезапис запиту) Далі в розділі 185 коротко викладається питання простатистичних показниках бази данихУ розділі 186 дається більш докладний опис одного з конкретних методів оптимізації, відомого як декомпозиція запитів Потім у розділі 187 обговорюється питання про те, як насправді реалізуються деякі реляційні оператори (наприклад оператор зєднання та ін), і коротко описується використання розглядалися в розділі 185 статистичних показників для обчислення вартісних оцінок Нарешті, в розділі 188 наводиться короткий резюме по всьому матеріалу даної глави

Ще одне вступне зауваження Досить часто дану тему повязують з оптимізацією запитів Проте подібний термін кілька неточний, оскільки вираз, який потрібно оптимізувати (Запит), насправді може формуватися в контексті, відмінному від інтерактивної вибірки інформації з бази даних Зокрема, воно може бути частиною операції оновлення, а не операції вибірки, що розуміється під запитом Більше того, сам по собі термін оптимізація є дещо перебільшеним, оскільки зазвичай не існує гарантій, що обрана стратегія реалізації дійсно оптимальна в деякому обєктивному сенсі На практиці під оптимізованої стратегією реалізації зазвичай розуміється просто покращений варіант вихідного неоптимізованого вираження (Тим не менш, в деяких нечисленних випадках можна цілком обгрунтовано стверджувати, що обрана стратегія реалізації буде дійсно оптимальної в певному сенсі [1830] Див також додаток А)

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

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


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

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

Ваш отзыв

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

*

*