студент групи ПЗ-07м Гриб В. О.
Державний ВНЗ «Національний гірничий університет»,
Україна
Вплив характеристик СУБД веб –додатку на продуктивність
веб-серверу
Веб-додаток — розподілений додаток, в якому клієнтом
виступає браузер, а сервером — веб-сервер. Логіка веб-додатку зосереджується на
сервері, а функція браузера полягає в основному у відображенні інформації,
завантаженої по мережі з сервера, і передачі назад даних користувача. Як
бачимо, внаслідок того, що веб-додатки використовують ресурси веб-серверу, їх
характеристики мають значний вплив на продуктивність. З метою попередження
перевантаження серверу потрібно приділяти підвищену увагу використанню
кешування, роботі з БД, передачі даних по мережі, оптимізації коду програми.
Оптимізація роботи з файловою системою зводиться до
зниження обсягу даних, які зчитуються та записуються, а також мінімізації
кількості окремих звернень до жорстких дисків. Найчастіше на практиці ці
завдання тим чи іншим чином пов'язані з базами даних.
Одним з найбільш часто виникаючих питань, є наступне: чи
варто в принципі використовувати СУБД для зберігання тих чи інших даних або
обмежитися зберіганням даних у файли? Як правило, основною причиною вибору між
цими підходами є те, як передбачається працювати з даними. Якщо це часто-обновлюваний
контент, або взаємодія з даними припускає складну логіку (наприклад,
використання багатопараметричних виборок чи необхідність забезпечення
багатокористувацької підтримки), має сенс використовувати готову СУБД. В іншому
випадку, доведеться самостійно реалізовувати безліч функцій, які виконувалися б
засобами БД, і витрачати на це додатковий час.
Безпосередньо файлову систему розумно використовувати для
зберігання статичного контенту. Хороший тому приклад - графічні файли, які більшість
CMS зберігають окремо від текстів статей. Самі ж статті при цьому розміщуються
в таблицях БД, де їх легше редагувати та індексувати – це обгрунтований вибір
між двома крайнощами.
Хибною думкою є те, що для підвищення продуктивності при
розробці баз даних достатньо проіндексувати всі можливі стовпці. Ці дії не
тільки марні, але й загрожують зниженням продуктивності в кілька разів. Суть
проблеми вибору індексів в тому, що SQL-сервер повинен змінювати їх при
будь-яких "реформах" в таблицях (INSERT, UPDATE, DELETE). Якщо
індексів один або два, великих втрат продуктивності не буде, але якщо їх
набагато більше, SQL-сервер піддається великим навантаженням при роботі з
таблицями.
Один і той же результат може бути отриманий СУБД різними
способами, які істотно відрізняються як за витратами ресурсів, так і за часом
виконання. Оптимізовані запити значно покращують показник продуктивності. Після
оптимізації запиту індекс може стати невживаним. Іноді SQL-серверу потрібно менше часу на перебір таблиці, ніж на
використання індексу. Такі індекси служать баластом і повинні бути
вилучені. Їх можна відловити аналізатором SQL-запитів, який дасть повну
картину обробки запитів.
В ідеалі весь код Transact-SQL, використовуваний в
додатках, повинен перебувати в збережених процедурах, а не запускатися у
вигляді динамічного SQL або скриптів. Це зменшує мережний трафік і
прискорює виконання самого коду Transact-SQL, так як код в збережених
процедурах являється перекомпільованим. Коли процедура, що зберігається
виконується в перший раз (і в неї не визначена опція WITH RECOMPILE), вона
оптимізується, для неї створюється план виконання запиту, який кешується
SQL-сервером. Якщо та ж сама процедура, що зберігається викликається
знову, вона буде використовувати кеш-план виконання запиту, що заощадить час і
збільшить продуктивність. Але якщо запит динамічний (змінюється від одного
виконання збереженої процедури до іншого), оптимізації не буде, а
продуктивність тільки постраждає. Якщо відомо, що запит буде мінятися
кожен раз при виконанні процедури, потрібно додати опцію WITH RECOMPILE, яка
змусить перекомпілювати збережену процедуру заново і оптимізувати запит.
Інша неприємна особливість, з якою можна зіткнутися, -
блокування (deadLock). Це той випадок, коли два процеси намагаються
заблокувати два об'єкти, причому кожен процес намагається заблокувати об'єкт,
який належить іншому процесу. У цьому випадку SQL-сервер перериває один з
процесів, відкатує його транзакцію, тим самим дозволяючи другого процесу
продовжити роботу. Цього можна уникнути, якщо отримувати доступ до
об'єктів в одному і тому ж порядку і не допускати користувача введення під час
транзакцій. Тобто отримати всі необхідні дані до початку транзакції.
Причиною падіння продуктивності можуть стати і
тригери. При їх використанні треба дотримуватися простих правил, а саме:
· чим менше
код тригера, тим краще і тим швидше виконуються операції;
· не
використовувати тригери для задач, які можуть бути реалізовані іншими, більш
ефективними способами;
· проводити перевірку
помилок робити до спрацьовування тригера. Так споживається менше ресурсів,
ніж при відкаті транзакцій тригером.
Висновок
Таким чином в результаті дослідження ми дійшли висновку, що одним з основних
факторів, які впливають продуктивність веб-серверу, є структура СУБД. Для
забезпечення ефективної роботи з СУБД необхідно, щоб таблиці були коректно
проіндексовані і використовувалися оптимізовані запити.
Література
1. Поль Дюбуа «Применение MySQL и Perl в
Web-приложениях», видавництво Вільямс, 2002р. 480 стр.
2. Берон Шварц «MySQL. Оптимизация производительности»,
видавництво
Символ-Плюс, 2010р., 832стр.
3. Деніел Менаске, Віргіліо Алмейда «Производительность Web-служб.
Анализ, оценка и планирование», видавництво ДиаСофтЮП, 2003р., 480стр.
4. Нільсен, Пол. «Microsoft SQL Server 2005. Библия
пользователя.»,
Пер. с англ. — М. : ООО “Вільямс”, 2008р. — 1232 стр.