Ви будете робити 3 типи налаштування, 1 реактивну та 2 проактивні.
Реактивний
Незрозуміло, якийсь запит починає створювати проблеми. Це може бути через помилку програми чи функції, таблицю, що перевищує очікування, стрибок трафіку або оптимізатор запитів, що стає "креативним". Це може бути тип справ у середині ночі о-лайно, або це може бути реакцією на системну повільність некритичного характеру. Так чи інакше, визначальним характером реактивної настройки є те, що у вас вже є проблеми . Зайве говорити, що ви хочете робити якомога менше цього. Що приводить нас до ...
Проактивний
Тип 1: Повсякденне обслуговування
За деяким графіком, кожні кілька місяців або тижнів, залежно від того, як часто змінюється ваша схема та як швидко зростають ваші дані, слід переглянути результати інструментів аналізу продуктивності вашої бази даних (наприклад, звіти AWR для Oracle DBA). Ви шукаєте проблеми, що виникають, тобто речі, які на шляху до вимагають реактивної настройки, а також низько висячі фрукти, предмети, які, швидше за все, не стануть проблемами, але вдосконалюються з невеликими зусиллями з надією запобігти далеко -подальші проблеми. Скільки часу ви повинні витратити на це, буде залежати від того, скільки часу у вас є, і на що б ви могли витратити його, але оптимальна сума ніколи не дорівнює нулю. Однак ви можете легко зменшити суму, яку потрібно витратити, зробивши більше ...
Тип 2: Правильний дизайн
Застереження Кнута проти "передчасної оптимізації" широко відоме і належним чином поважається. Але треба використовувати правильне визначення поняття "передчасний". Деякі розробники додатків, коли їм дозволяється писати власні запити, мають тенденцію приймати перший запит, на який вони звертаються, логічно правильний, і не враховують їх ефективність, теперішню чи майбутню перспективу. Або вони можуть перевірити набір даних про розробку, який просто не є репрезентативним виробничим середовищем (порада: Не робіть цього! Розробники повинні завжди мати доступ до реалістичних даних для тестування.) Справа в тому, що правильний час для налаштування запиту - це коли він вперше розгортається, а не тоді, коли він відображається у списку неякісних SQL, і, безумовно, не тоді, коли він викликає критичну проблему.
Отже, що може бути кваліфікованим як передчасна оптимізація в землі DBA? У верхній частині мого списку було б жертвоприношення нормалізації без продемонстрованої потреби. Впевнені, що ви могли зберегти суму на батьківському рядку, а не обчислювати її під час виконання з дочірніх рядків, але чи справді вам це потрібно? Якщо ви Twitter чи Amazon, стратегічна денормалізація та попередній розрахунок можуть стати вашими найкращими друзями. Якщо ви розробляєте невелику базу даних бухгалтерського обліку для 5 користувачів, належна структура для полегшення цілісності даних має бути головним пріоритетом. Інші передчасні оптимізації також є питанням пріоритетів. Не витрачайте години на виправлення запиту, який запускається раз на день і займає 10 секунд, навіть якщо ви думаєте, що можете скоротити його до 0,1 секунди. Можливо, у вас є звіт, який працює 6 годин щодня, але вивчіть її планування як пакетну роботу, перш ніж вкладати час в її настройку. Не вкладайте гроші в окремий екземпляр реплікаційного звітування в реальному часі, якщо виробниче навантаження ніколи не перевищує 10% (якщо припускати, що ви можете керувати безпекою).
Випробовуючи реалістичні дані, вивчаючи здогадки щодо темпів зростання та трафіку (плюс надбавки до шипів) та застосовуючи свої знання про вигадки оптимізатора вашої платформи, ви зможете розгортати запити, які запускаються (наближаються до) оптимально не просто зараз, а в майбутньому. , і за менш ідеальних умов. Коли ви застосовуєте належні методи, ефективність запитів можна точно передбачити та оптимізувати (у сенсі, коли кожен компонент буде настільки швидким, як це потрібно).
(І поки ти на це, дізнайся статистику! )