Теорія оптимізації і SQL Server

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

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

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

Модель схеми

Моєю головною стратегією підвищення продуктивності є ретельна розробка схеми Хороша схема дозволить застосовувати пакетні запити і полегшить планування індексів

Щоб створити ефективну схему, дотримуйтесь наступних порад:

■ уникайте надмірної складності

■ ретельно вибирайте ключі

■ стежте за необовязковими даними

■ використовуйте деякий рівень абстракції

Я впевнений, що погана модель даних – головна причина поганої продуктивності ці проблеми каскадом породжують інші В результаті базу даних можна вважати мертвонародженою.

Рис 13 Теорія оптимізації свідчить, що кожна стратегія залежить від іншої і активізується нею

Запити

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

При прийнятті рішення щодо використання послідовного коду або пакетних запитів ознайомтеся з табл 14 – вона послужить хорошим керівництвом до дії

Таблиця 14 Методи програмування

Завдання

Краще рішення

Складна бізнес-логіка

Запити, підзапити, сте

Динамічне генерування DDL Курсори

Перебудова списку

Змінні або курсор

Перехресна таблиця

Запит з пропозицією pivot або case

Проходження по ієрархії

Користувацька функція або сте

Накопичувальні суми

Курсор

Додаткова У главі 20 ви дізнаєтеся, як істотно підвищити продуктивність, преоб-| інформація утворюючи складні логічні курсори в пакетні запити

Індексація

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

Додаткова Створення кластеризованих, некластерізованних та інших індексів детально інформація описано в главі 50

Конкуренція

Блокування – це більш складна проблема, ніж думають більшість розробників, і більшість адміністраторів баз даних змушені вирішувати її шляхом пониження рівня ізоляції транзакцій до no lock, що дуже небезпечно

Конкуренцію можна порівняти з джерелом води Якщо люди, вальяжно прогулюючись, очікують своєї черги наповнити стаканчики, ситуація стабільна Установка параметра nolock рівносильна заклику: Все кидайтеся до джерела Природно, в цьому випадку ситуація вийде з-під контролю і тиснява неминуча У такій ситуації краще послідовно наливати воду в стаканчики, при цьому скорочуючи час свого перебування у джерела Аналогічна ситуація і в базах даних: краще обмежитися невеликими запитами або скоротити час виконання транзакцій А для створення ефективних транзакцій потрібно розробити ефективну схему, використовувати пакетний код та індекси

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

Розширена масштабованість

Якщо схема, запити, індекси і транзакції працюють на славу, ви можете скористатися поліпшеними засобами масштабованості SQL Server:

■ ізоляцією миттєвих знімків

■ поділом таблиць

■ індексованими уявленнями

■ брокером служб

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

Теорія оптимізації, в якій розкрито залежності між різними технологіями оптимізації, є революційною концепцією Найсвіжішу інформацію про теорії оптимізації, а також мої презентації рішень підвищення продуктивності ви знайдете на сайті www SQLServer Bible com

Резюме

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

Отже, в частині I книги триває виклад основних концепцій баз даних У наступному розділі ми розглянемо структуру реляційних баз даних

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

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


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

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

Ваш отзыв

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

*

*