Налаштування, обслуговування і адміністрування

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

Вимірювання продуктивності виконання запитів і її підвищення

Природно, питання налаштування продуктивності запитів не може вміститися в рамки розгляду цієї глави Водночас практичний досвід експлуатації SQL Everywhere вказує на невеликий набір дієвих засобів підвищення продуктивності

■ Додавайте в таблиці SQL Everywhere індекси, однак підходите до цього питання вибірково У складених індексах ті стовпці, по яких відбір виконується частіше, розміщуйте лівіше

■ Замініть підзапити обєднаннями Процесор запитів SQL Everywhere завжди переписує подзапрос IN за допомогою обєднань JOIN і потім розглядає абсолютно відмінний план виконання

■ Уникайте обєднання більше пяти таблиць

■ Використовуйте параметризрвані запити і готуйте SqlCeCommands для повторюваних завдань, таких як вставка в таблицю сотень рядків

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

■ Для запиту або оновлення більше одного рядка використовуйте, коли це можливо, SqlCeResultSet

■ Денормалізуйте базу даних, коли інші методи не допомагають домогтися достатньої продуктивності

■ Мінімізуйте і по можливості навіть уникайте обмежень в таблицях

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

Детальну інформацію про питання налаштування продуктивності ви можете отримати на сайті SQL Server 2005 Performance за адресою http:/ / msdn microsof t com / sql / learning / perf / defaultaspx

Завдяки інтеграції SQL Everywhere з SQL Server 2005 Management Studio тепер стало можливим переглядати в графічному поданні план виконання будь-якого запиту DML, продуктивність якого ви хочете підвищити в SQL Everywhere Виберіть у меню утиліти пункт Query1^ Display Estimated Execution Plan, і ви побачите графічне представлення плану до того ж при бажанні ви можете його зберегти у форматі XML Це може виявитися корисним, коли в одному регіоні запит виконується вкрай повільно, а в іншому регіоні була виконана його настройка і швидкість стала набагато вище

Обслуговування SQL Everywhere

Ядро сховища SQL Everywhere було повністю перероблено з метою зменшення необхідності обслуговування і вірогідності пошкодження даних, чого так вимагав досвід експлуатації SQL РЄ Файли баз даних SQL Everywhere поділені на логічні одиниці (або сторінки) ємністю в 4 Кбайт Під час зберігання, індексації та видалення даних на сторінках можуть залишатися незаповнені ділянки, а деякі сторінки бази даних можуть виявитися і повністю порожніми Для оптимізації продуктивності і економії простору на пристрої клієнта потрібно перерозподіляти незайнятого простору, періодично перераховувати статистику індексів і очищати буфер транзакцій SQL Everywhere для виконання цих завдань реалізує концепції автосжатія, ущільнення і AutoFlush

Автосжатіе

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

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

Ущільнення

Ущільнення виконується за допомогою методу Compact обєкта SqlCeEngine Він дозволяє перерозподілити простір, а також змінити такі настройки бази даних, як пароль, ідентифікатор регіону і шифрування На відміну від автосжатія ущільнення не тільки перерозподіляє порожні сторінки, а й створює повністю нову базу даних, яка має такі переваги

1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Всі індекси створюються заново, а статистика перераховується

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Сторінки таблиць реорганізуються в послідовні

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Стовпці ідентичності переустановлюються так, щоб наступне доступне значення було на один крок більше максимального поточного

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp До новій базі даних застосовуються всі зміни пароля, шифрування і / або ідентифікатора регіону

Наведемо приклад використання методу Compact в базі даних SQL Everywhere

Приклад на мові C #

string originalDB = &quotAWMobilesdf" string compactedDB = &quotAWMobilesdftmpM

SqlCeEngine engine = new SqlCeEngine(&quotData Source = &quot + originalDE)

{

engineCompact(&quotData Source = &quot + compactedDB) engineDispose()

FileDelete(originalDB)

FileMove(compactedDB, originalDB)

}

catch(SqlCeException e)

{

DisplaySQLErrors(e)

}

finally

{

engineDispose()

}

За допомогою SQL Everywhere і нового обєкта SqlCeEngine середовища Compact Framework 20 ущільнення може бути виконано безпосередньо у вихідній базі Це означає, що у властивості Data Source не вказується база даних призначення, замість цього переписується вихідна база Таким чином, наведений вище приклад можна перетворити таким чином:

string originalDB = &quotAWMobilesdf"

SqlCeEngine engine = new SqlCeEngine(&quotData Source = &quot + originalDB) try

engineCompact{) engineDispose()

}

catch(SqlCeException e) {} finally {

encrine Dispose ()

}

AutoFlush

SQL Everywhere підтримує транзакції за допомогою інтерфейсів ADONET і OLEDBCE Буфер транзакцій містить зміни, які чекають підтвердження транзакцій і подальшого запису в базу даних SQL Everywhere Цей буфер гарантує, що транзакції завжди будуть записані в базу даних у тому порядку, в якому вони підтверджені Транзакції можуть бути підтверджені, але ще не записані в базу даних, зважаючи ненормального завершення програми або блокувань, встановлених іншими процесами, записуючими власні транзакції Інтервал часу, протягом якої зміни, що зберігаються в буфері, повинні бути записані в базу даних, в SQL Everywhere можна налаштувати за допомогою параметра Flush Interval рядка підключення У цьому параметрі визначається максимальна кількість секунд, які повинні закінчитися, перш ніж підтверджені транзакції будуть записані в базу даних

Відновлення пошкодженої бази даних SQL Everywhere

У ході експлуатації SQL РЄ компанія Microsoft збирала від розробників мобільних додатків відомості про інциденти пошкодження баз даних В результаті вона дійшла висновку, що ядро ​​сховища даних SQL РЄ має фундаментальну пролом Воно не враховувало те, що мобільні пристрої мають короткочасний термін дії акумуляторів і знімні карти памяті Як вже говорилося, ядро ​​сховища даних SQL Everywhere було повністю переписано і тепер забезпечує безпеку мобільних даних Будь-яка операція запису в базу даних залишається в області тіньової копії, так само як застосовується і до самої бази даних Таким чином, в результаті втрати напруги або перезавантаження пристрою SQL Everywhere гарантує, що всі незакінчені операції будуть завершені в потрібному порядку і не будуть загублені У цьому розділі ми розглянемо нові можливості перевірки і відновлення баз даних SQL Everywhere, які розробник може включити в план обслуговування бази даних

Перевірка

Перевірка виконується за допомогою методу Verify обєкта SqlCeEngine, який визначає необхідність виконання відновлення даних Метод Verify обчислює контрольні суми всіх сторінок бази даних SQL Everywhere і порівнює їх з очікуваними Якщо ці значення не збігаються, то метод повертає значення false, вказуючи, що необхідно виконати відновлення даних

Відновлення

Незважаючи на те що ядро ​​сховища даних SQL Everywhere було повністю переписано, щоб максимально зменшити ймовірність пошкодження даних, той фундаментальний факт, що SQL Everywhere все одно працює на мобільних пристроях, вказує на необхідність обробки ситуації, коли пошкодження таки відбулися Уявіть собі ситуацію, в якій база даних SQL Server 2005 запущена на сервері, а користувач має можливість протягом дня просто відключати живлення або витягувати знімні диски, що містять файли даних Бази даних SQL Everywhere часто поміщають на знімні карти памяті мобільних пристроїв, які потенційно можна витягти в процесі виконання транзакції запису Виходячи з цього, рекомендується періодично перевіряти бази даних SQL Everywhere і при отриманні негативного результату викликати метод Repair обєкта SqlCeEngine

До того ж тепер компанія Microsoft пропонує два параметри методу Repair, що визначають, що робити, якщо будуть знайдені пошкоджені дані

1 RepairOptionDeletedCorruptedRows Видалити пошкоджені рядка з бази даних SQL Everywhere

2&nbsp&nbsp&nbsp&nbsp RepairOptionRecoverCorruptedRows Виконати спробу прочитати дані з пошкодженою сторінки, проте успіх операції не гарантований До того ж, навіть якщо вдалося відновити одну або кілька рядків, немає ніякої гарантії, що в базі даних не залишилося логічних ушкоджень Як би там не було, наявність додаткового варіанту дій все одно є кроком у правильному напрямку

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

Приклад на мові 0 #

SqlCeEngine engine = new SqlCeEngine(&quotData Source = AWMobilesdf&quot) if (enaineVerify())

{

CursorCurrent = CursorsWaitCurscr

engineRepair(null, RepairOptionRecoverCoiruptedRows)

CursorCurrent = CursorsDefault

MessageBoxShow (База даних SQL Everywhere Database була відновлена”)

}

Підтримання продуктивності реплікації злиття

Реплікація злиття є хорошим варіантом синхронізації баз даних SQL Everywhere і SQL Server 2000/2005 Незважаючи на те що продуктивність реплікації злиття може бути досліджена в моніторі реплікацій утиліти Management Studio, існує природна необхідність періодично виконувати її обслуговування, щоб підтримувати оптимальну продуктивність На практиці велика кількість корпоративних мобільних реалізацій виявляли швидке й істотне падіння продуктивності реплікацій злиття вже після декількох днів обслуговування 20-30 передплатників

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

1 Як можна частіше дефрагментувати всі індекси таблиць Distribution Msmerse_ * (бажано кожну ніч)

2 Зменшити період збереження знімків (за замовчуванням він становить 14 днів), якщо модель використання програми це дозволяє

3 Збільшити число генерацій в кожному пакеті на сервері

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

Більш детальну інформацію про налаштування та обслуговуванні реплікації злиття ви можете отримати на сайті:

wwwmicrosoftcom/technet/prodtechnol/sql/2 000/maintain/mergperf mspx

Джерело: Нільсен, Пол 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>

*

*