система онлайн-бронирования
г. Донецк, Украина, ул. Артёма, 87
+38 (062) 332 33 32, 332-27-71
ЗАБРОНИРОВАТЬ
НОМЕР

Статьи

ASP NET, NET Framework, MONO, SQL, Visual Studio | Professional Programming | Viacheslav Eremin

  1. ASP NET, NET Framework, MONO, SQL, Visual Studio ( SQL ) SQL (2010 рік) Ця замітка не претендує...
  2. 2.Балансіровка навантаження дискової підсистеми
  3. 3.Управление пам'яттю
  4. 4.Ожіданія в сервері
  5. 5.Построеніе індексів
  6. 6.Оптімізація важких запитів.
  7. 7. Загальне зниження навантаження на SQL
  8. ASP NET, NET Framework, MONO, SQL, Visual Studio
  9. 1.Защіта SQL-сервера
  10. 2.Балансіровка навантаження дискової підсистеми
  11. 3.Управление пам'яттю
  12. 4.Ожіданія в сервері
  13. 5.Построеніе індексів
  14. 6.Оптімізація важких запитів.
  15. 7. Загальне зниження навантаження на SQL
  16. ASP NET, NET Framework, MONO, SQL, Visual Studio
  17. 1.Защіта SQL-сервера
  18. 2.Балансіровка навантаження дискової підсистеми
  19. 3.Управление пам'яттю
  20. 4.Ожіданія в сервері
  21. 5.Построеніе індексів
  22. 6.Оптімізація важких запитів.
  23. 7. Загальне зниження навантаження на SQL

ASP NET, NET Framework, MONO, SQL, Visual Studio

( SQL ) SQL (2010 рік)

Ця замітка не претендує на повноту дослідження теми продуктивності SQL-сервера, в будь-якому випадку добре б прочитати Лічильники продуктивності SQL Server і Windows , Сім найбільш корисних лічильників ефективності , Моніторинг ефективності MS SQL Server. практичні рекомендації , Використання таблиці sysperfinfo для вирішення проблем SQL Server . Ви легко знайдете десятки подібних статей російською мовою і тисячі - на англійському. Є безліч корисних статей в BOL - Оптимізація продуктивності бази даних tempdb

Я просто розповім як я застосував всю цю корисну інформацію на практиці для оптимізації кампутера з SQL-сервером, обслуговуючим портал, на який ходить чверть мільйона посетілей на добу (ймовірно в наступний сезон буде ще рази в два більше). цей кампутер має в основі своїй пекельний SAS-контролер, який обслуговує більше 10 ящиків, набитих дисками. Кожен бачиться як один SCSI-диск. Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.


Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків

1.Защіта SQL-сервера

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


Зробив я це   звичайним для себе способом   - запхав всередину цього кампутера апаратний фаєрвол

2.Балансіровка навантаження дискової підсистеми

Балансування навантаження SAS-контролера я забезпечив сплітірованіем всіх основних баз - цю технологію я описував на своєму хом'як - Cекціонірованіе графіки при SQL-зберіганні. . У підсумку кожна серйозна база у мене лежить на безлічі дисків:


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

Крім того, всі бази рознесені по різних дисках, бекапи, індекси і так далі. Бази із записом працюють навіть не в Simple, а в BulkLogged. У підсумку основний диск, який працює при роботі SQL-сервера - це диск, на якому лежить TempDB. Саме він смикається на цьому відео-ролику - коли різко зростає розмір дискової черзі.


Зрозуміло, що на такому завантаженому диску взагалі більше нічого не повинно бути розміщено. В принципі MS рекомендує створювати один файл TempDB для кожного ЦП на сервер. І оскільки диск з tempdb - це єдиний реально завантажений диск у мене, я створю tempdb на 8 дисках.

3.Управление пам'яттю

SQL-cервер я поставив в режим AWE, незважаючи на те, що у мене все 64-х розрядне - і віндузня і сервер. Перше питання, в якому я хотів переконається, що SQL-серверу досить оперативної пам'яті. На жаль, глюкавий мікрасофт не зміг навіть добится щоб у нього нормально працював Windows Task Manager, який волає по Ctrl-Alt-Del. На жаль, він показує зовсім неадекватні цифри.


На жаль, він показує зовсім неадекватні цифри

Є ще й другий варіант тих же цифр, які показує в'юшки select * from master.dbo.sysperfinfo.


sysperfinfo

Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:


Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:

Якщо повірити лічильників Performance, то можна побачити що сервера у мене є 14GB пам'яті (що логічно в-общем), але побажав він з них зайняти 5,2GB. Це явна неадекватність мікрософтовского алгоритму - мати можливість зайняти ОЗУ кешем з даними, але не користуватись ОЗУ. А постійно підкачувати дані з дисків. У Оракл є версія SQL-сервера, яка взагалі вміє не смикати диски - просто зчитує всю інформацію про в ОЗУ. Зрозуміло ніякі індекси, фактори заповнення, сплітірованіе даних та інші хитрощі просто не потрібні в такому випадку - доступ до даних в ОЗУ відбувається миттєво, не менше ніж у мільйон разів швидше доступу до дисків (навіть прикрученим до ацкому SAS-контролера).

Крім цього незрозумілого трафіку з дисками мене також бентежить в мікрософтовском алгоритмі наявність величезних значень PageFault - цей лічильник означає, що необхідної сторінки з даними не виявилося в ОЗУ. Але в цілому, оскільки я переконався, що пам'яті у мене значно більше, ніж SQL-сервер побажав зайняти - на цьому я порахував і цей етап оптимізації завершеним.

4.Ожіданія в сервері

Крім пам'яті, зазвичай аналізується, що очікує сервер. У моєму випадку видно, що у сервера немає ніяких особливих вузьких місць. Але в цьому треба було переконається, хоча б для того, щоб перейти до наступного етапу оптимізації - побудови індексів . Адже трасу треба писати в мережу (на інший SQL) - щоб не вплинути на оптимізується SQL. Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера.


Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера

5.Построеніе індексів

Ключем до ефективної роботи SQL є нормальні індекси. Вони дозволяють відразу звернутися до потрібного запису, а не шляхом перебору записів на диску. SQL 2005. Іспит 70-431. Стор 121. "Щоб знайти рядок у таблиці, що містить 2,5 мільйона рядків, SQL Server повинен переглянути всього три сторінки даних. І лише коли в таблиці стане більш 300 мільйонів рядків, SQL Server доведеться переглядати чотири сторінки для пошуку потрібної рядки." Тому треба для початку виконати всі рекомендації Tuning Advisor'a.


  Тому треба для початку виконати всі рекомендації Tuning Advisor'a

Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.

Про індекси треба пам'ятати і на етапі SqL-програмування. Наприклад, під час запису індекси уповільнюють роботу (їх треба перебудовувати). Тому на момент масових записів в коді процедур їх треба відключати. А табли куди ведеться всяка статистика порталу - там індекси не потрібні взагалі, адже запис туди йде завжди, а запит зробить один раз в місяць адміністратор. Втім питань ефективного SQL-програмування багато, не тільки індекси - наприклад хинти WITH (NOLOCK) - чим їх більше, тим все спритніше працює.

Індекси потребують і в правильній експлуатації. Про оновлення статистики індексів - можна почитати тут Використання статистики оптимізатором запитів Microsoft SQL Server 2005

6.Оптімізація важких запитів.

Для оптимізації окремих важких запитів можна застосувати вбудовані засоби MS. Але є і окремі пекельні проги для цього, наприклад SQL Shot . Але запити, які не можна оптимізувати, скажімо до декількох секунд - від них треба відмовитися взагалі. Як це зробити?

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

Ось приклад. на збірці Збірка для роботи з даними стандартних ASP.NET-профілів на рівні SQL зроблена ось така процедура, яка викликається в завданні . Таким чином користувач сайту миттєво отримує результат запиту, який вважається годинами.

7. Загальне зниження навантаження на SQL

Ось кілька моїх улюблених методів:

1. Винесення всіх що можна запитів в Application_start і Session_start. Наприклад, ось фрагмент global.asax . Як бачите, потрібні багато разів рекордсети я зробив ще при старті сесії. А на сторінках я просто дістаю рекордсети з пам'яті без звернення до SQL.

2. Коли дуже багато курсорних запитів RS.Movenext є сенс отримати весь рекорсет відразу з FOR XML. Продуктивність тут збільшиться не в кожній ситуації, але це теж може бути виходом зі зниження навантаження на SQL.

3. Ще метод зниження навантаження - згенерувати завданням SQL готові html-фрагменти з комбобоксамі і включити цей готовий фрагмент асповской директивою <! - # include (або літералом).

4. Перенесення всіх типових завдань сайту ( Виконання періодичних завдань в ASP.NET ) На нічний час.


Після настройки продуктивності SQL-сервера ну забудьте налагодити бекапірованіе даних .

ASP NET, NET Framework, MONO, SQL, Visual Studio

( SQL ) SQL (2010 рік)

Ця замітка не претендує на повноту дослідження теми продуктивності SQL-сервера, в будь-якому випадку добре б прочитати Лічильники продуктивності SQL Server і Windows , Сім найбільш корисних лічильників ефективності , Моніторинг ефективності MS SQL Server. практичні рекомендації , Використання таблиці sysperfinfo для вирішення проблем SQL Server . Ви легко знайдете десятки подібних статей російською мовою і тисячі - на англійському. Є безліч корисних статей в BOL - Оптимізація продуктивності бази даних tempdb

Я просто розповім як я застосував всю цю корисну інформацію на практиці для оптимізації кампутера з SQL-сервером, обслуговуючим портал, на який ходить чверть мільйона посетілей на добу (ймовірно в наступний сезон буде ще рази в два більше). цей кампутер має в основі своїй пекельний SAS-контролер, який обслуговує більше 10 ящиків, набитих дисками. Кожен бачиться як один SCSI-диск. Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.


Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків

1.Защіта SQL-сервера

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


Зробив я це   звичайним для себе способом   - запхав всередину цього кампутера апаратний фаєрвол

2.Балансіровка навантаження дискової підсистеми

Балансування навантаження SAS-контролера я забезпечив сплітірованіем всіх основних баз - цю технологію я описував на своєму хом'як - Cекціонірованіе графіки при SQL-зберіганні. . У підсумку кожна серйозна база у мене лежить на безлічі дисків:


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

Крім того, всі бази рознесені по різних дисках, бекапи, індекси і так далі. Бази із записом працюють навіть не в Simple, а в BulkLogged. У підсумку основний диск, який працює при роботі SQL-сервера - це диск, на якому лежить TempDB. Саме він смикається на цьому відео-ролику - коли різко зростає розмір дискової черзі.


Зрозуміло, що на такому завантаженому диску взагалі більше нічого не повинно бути розміщено. В принципі MS рекомендує створювати один файл TempDB для кожного ЦП на сервер. І оскільки диск з tempdb - це єдиний реально завантажений диск у мене, я створю tempdb на 8 дисках.

3.Управление пам'яттю

SQL-cервер я поставив в режим AWE, незважаючи на те, що у мене все 64-х розрядне - і віндузня і сервер. Перше питання, в якому я хотів переконається, що SQL-серверу досить оперативної пам'яті. На жаль, глюкавий мікрасофт не зміг навіть добится щоб у нього нормально працював Windows Task Manager, який волає по Ctrl-Alt-Del. На жаль, він показує зовсім неадекватні цифри.


На жаль, він показує зовсім неадекватні цифри

Є ще й другий варіант тих же цифр, які показує в'юшки select * from master.dbo.sysperfinfo.


sysperfinfo

Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:


Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:

Якщо повірити лічильників Performance, то можна побачити що сервера у мене є 14GB пам'яті (що логічно в-общем), але побажав він з них зайняти 5,2GB. Це явна неадекватність мікрософтовского алгоритму - мати можливість зайняти ОЗУ кешем з даними, але не користуватись ОЗУ. А постійно підкачувати дані з дисків. У Оракл є версія SQL-сервера, яка взагалі вміє не смикати диски - просто зчитує всю інформацію про в ОЗУ. Зрозуміло ніякі індекси, фактори заповнення, сплітірованіе даних та інші хитрощі просто не потрібні в такому випадку - доступ до даних в ОЗУ відбувається миттєво, не менше ніж у мільйон разів швидше доступу до дисків (навіть прикрученим до ацкому SAS-контролера).

Крім цього незрозумілого трафіку з дисками мене також бентежить в мікрософтовском алгоритмі наявність величезних значень PageFault - цей лічильник означає, що необхідної сторінки з даними не виявилося в ОЗУ. Але в цілому, оскільки я переконався, що пам'яті у мене значно більше, ніж SQL-сервер побажав зайняти - на цьому я порахував і цей етап оптимізації завершеним.

4.Ожіданія в сервері

Крім пам'яті, зазвичай аналізується, що очікує сервер. У моєму випадку видно, що у сервера немає ніяких особливих вузьких місць. Але в цьому треба було переконається, хоча б для того, щоб перейти до наступного етапу оптимізації - побудови індексів . Адже трасу треба писати в мережу (на інший SQL) - щоб не вплинути на оптимізується SQL. Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера.


Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера

5.Построеніе індексів

Ключем до ефективної роботи SQL є нормальні індекси. Вони дозволяють відразу звернутися до потрібного запису, а не шляхом перебору записів на диску. SQL 2005. Іспит 70-431. Стор 121. "Щоб знайти рядок у таблиці, що містить 2,5 мільйона рядків, SQL Server повинен переглянути всього три сторінки даних. І лише коли в таблиці стане більш 300 мільйонів рядків, SQL Server доведеться переглядати чотири сторінки для пошуку потрібної рядки." Тому треба для початку виконати всі рекомендації Tuning Advisor'a.


  Тому треба для початку виконати всі рекомендації Tuning Advisor'a

Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.

Про індекси треба пам'ятати і на етапі SqL-програмування. Наприклад, під час запису індекси уповільнюють роботу (їх треба перебудовувати). Тому на момент масових записів в коді процедур їх треба відключати. А табли куди ведеться всяка статистика порталу - там індекси не потрібні взагалі, адже запис туди йде завжди, а запит зробить один раз в місяць адміністратор. Втім питань ефективного SQL-програмування багато, не тільки індекси - наприклад хинти WITH (NOLOCK) - чим їх більше, тим все спритніше працює.

Індекси потребують і в правильній експлуатації. Про оновлення статистики індексів - можна почитати тут Використання статистики оптимізатором запитів Microsoft SQL Server 2005

6.Оптімізація важких запитів.

Для оптимізації окремих важких запитів можна застосувати вбудовані засоби MS. Але є і окремі пекельні проги для цього, наприклад SQL Shot . Але запити, які не можна оптимізувати, скажімо до декількох секунд - від них треба відмовитися взагалі. Як це зробити?

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

Ось приклад. на збірці Збірка для роботи з даними стандартних ASP.NET-профілів на рівні SQL зроблена ось така процедура, яка викликається в завданні . Таким чином користувач сайту миттєво отримує результат запиту, який вважається годинами.

7. Загальне зниження навантаження на SQL

Ось кілька моїх улюблених методів:

1. Винесення всіх що можна запитів в Application_start і Session_start. Наприклад, ось фрагмент global.asax . Як бачите, потрібні багато разів рекордсети я зробив ще при старті сесії. А на сторінках я просто дістаю рекордсети з пам'яті без звернення до SQL.

2. Коли дуже багато курсорних запитів RS.Movenext є сенс отримати весь рекорсет відразу з FOR XML. Продуктивність тут збільшиться не в кожній ситуації, але це теж може бути виходом зі зниження навантаження на SQL.

3. Ще метод зниження навантаження - згенерувати завданням SQL готові html-фрагменти з комбобоксамі і включити цей готовий фрагмент асповской директивою <! - # include (або літералом).

4. Перенесення всіх типових завдань сайту ( Виконання періодичних завдань в ASP.NET ) На нічний час.


Після настройки продуктивності SQL-сервера ну забудьте налагодити бекапірованіе даних .

ASP NET, NET Framework, MONO, SQL, Visual Studio

( SQL ) SQL (2010 рік)

Ця замітка не претендує на повноту дослідження теми продуктивності SQL-сервера, в будь-якому випадку добре б прочитати Лічильники продуктивності SQL Server і Windows , Сім найбільш корисних лічильників ефективності , Моніторинг ефективності MS SQL Server. практичні рекомендації , Використання таблиці sysperfinfo для вирішення проблем SQL Server . Ви легко знайдете десятки подібних статей російською мовою і тисячі - на англійському. Є безліч корисних статей в BOL - Оптимізація продуктивності бази даних tempdb

Я просто розповім як я застосував всю цю корисну інформацію на практиці для оптимізації кампутера з SQL-сервером, обслуговуючим портал, на який ходить чверть мільйона посетілей на добу (ймовірно в наступний сезон буде ще рази в два більше). цей кампутер має в основі своїй пекельний SAS-контролер, який обслуговує більше 10 ящиків, набитих дисками. Кожен бачиться як один SCSI-диск. Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.


Крім SAS-контролера кампутер має 16Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків

1.Защіта SQL-сервера

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


Зробив я це   звичайним для себе способом   - запхав всередину цього кампутера апаратний фаєрвол

2.Балансіровка навантаження дискової підсистеми

Балансування навантаження SAS-контролера я забезпечив сплітірованіем всіх основних баз - цю технологію я описував на своєму хом'як - Cекціонірованіе графіки при SQL-зберіганні. . У підсумку кожна серйозна база у мене лежить на безлічі дисків:


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

Крім того, всі бази рознесені по різних дисках, бекапи, індекси і так далі. Бази із записом працюють навіть не в Simple, а в BulkLogged. У підсумку основний диск, який працює при роботі SQL-сервера - це диск, на якому лежить TempDB. Саме він смикається на цьому відео-ролику - коли різко зростає розмір дискової черзі.


Зрозуміло, що на такому завантаженому диску взагалі більше нічого не повинно бути розміщено. В принципі MS рекомендує створювати один файл TempDB для кожного ЦП на сервер. І оскільки диск з tempdb - це єдиний реально завантажений диск у мене, я створю tempdb на 8 дисках.

3.Управление пам'яттю

SQL-cервер я поставив в режим AWE, незважаючи на те, що у мене все 64-х розрядне - і віндузня і сервер. Перше питання, в якому я хотів переконається, що SQL-серверу досить оперативної пам'яті. На жаль, глюкавий мікрасофт не зміг навіть добится щоб у нього нормально працював Windows Task Manager, який волає по Ctrl-Alt-Del. На жаль, він показує зовсім неадекватні цифри.


На жаль, він показує зовсім неадекватні цифри

Є ще й другий варіант тих же цифр, які показує в'юшки select * from master.dbo.sysperfinfo.


sysperfinfo

Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:


Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі Pefomance у них вийшли менш глюкавий, ніж інші:

Якщо повірити лічильників Performance, то можна побачити що сервера у мене є 14GB пам'яті (що логічно в-общем), але побажав він з них зайняти 5,2GB. Це явна неадекватність мікрософтовского алгоритму - мати можливість зайняти ОЗУ кешем з даними, але не користуватись ОЗУ. А постійно підкачувати дані з дисків. У Оракл є версія SQL-сервера, яка взагалі вміє не смикати диски - просто зчитує всю інформацію про в ОЗУ. Зрозуміло ніякі індекси, фактори заповнення, сплітірованіе даних та інші хитрощі просто не потрібні в такому випадку - доступ до даних в ОЗУ відбувається миттєво, не менше ніж у мільйон разів швидше доступу до дисків (навіть прикрученим до ацкому SAS-контролера).

Крім цього незрозумілого трафіку з дисками мене також бентежить в мікрософтовском алгоритмі наявність величезних значень PageFault - цей лічильник означає, що необхідної сторінки з даними не виявилося в ОЗУ. Але в цілому, оскільки я переконався, що пам'яті у мене значно більше, ніж SQL-сервер побажав зайняти - на цьому я порахував і цей етап оптимізації завершеним.

4.Ожіданія в сервері

Крім пам'яті, зазвичай аналізується, що очікує сервер. У моєму випадку видно, що у сервера немає ніяких особливих вузьких місць. Але в цьому треба було переконається, хоча б для того, щоб перейти до наступного етапу оптимізації - побудови індексів . Адже трасу треба писати в мережу (на інший SQL) - щоб не вплинути на оптимізується SQL. Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера.


Для цього, як мінімум треба переконається, що мережа не є найвужчим місцем сервера

5.Построеніе індексів

Ключем до ефективної роботи SQL є нормальні індекси. Вони дозволяють відразу звернутися до потрібного запису, а не шляхом перебору записів на диску. SQL 2005. Іспит 70-431. Стор 121. "Щоб знайти рядок у таблиці, що містить 2,5 мільйона рядків, SQL Server повинен переглянути всього три сторінки даних. І лише коли в таблиці стане більш 300 мільйонів рядків, SQL Server доведеться переглядати чотири сторінки для пошуку потрібної рядки." Тому треба для початку виконати всі рекомендації Tuning Advisor'a.


  Тому треба для початку виконати всі рекомендації Tuning Advisor'a

Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.

Про індекси треба пам'ятати і на етапі SqL-програмування. Наприклад, під час запису індекси уповільнюють роботу (їх треба перебудовувати). Тому на момент масових записів в коді процедур їх треба відключати. А табли куди ведеться всяка статистика порталу - там індекси не потрібні взагалі, адже запис туди йде завжди, а запит зробить один раз в місяць адміністратор. Втім питань ефективного SQL-програмування багато, не тільки індекси - наприклад хинти WITH (NOLOCK) - чим їх більше, тим все спритніше працює.

Індекси потребують і в правильній експлуатації. Про оновлення статистики індексів - можна почитати тут Використання статистики оптимізатором запитів Microsoft SQL Server 2005

6.Оптімізація важких запитів.

Для оптимізації окремих важких запитів можна застосувати вбудовані засоби MS. Але є і окремі пекельні проги для цього, наприклад SQL Shot . Але запити, які не можна оптимізувати, скажімо до декількох секунд - від них треба відмовитися взагалі. Як це зробити?

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

Ось приклад. на збірці Збірка для роботи з даними стандартних ASP.NET-профілів на рівні SQL зроблена ось така процедура, яка викликається в завданні . Таким чином користувач сайту миттєво отримує результат запиту, який вважається годинами.

7. Загальне зниження навантаження на SQL

Ось кілька моїх улюблених методів:

1. Винесення всіх що можна запитів в Application_start і Session_start. Наприклад, ось фрагмент global.asax . Як бачите, потрібні багато разів рекордсети я зробив ще при старті сесії. А на сторінках я просто дістаю рекордсети з пам'яті без звернення до SQL.

2. Коли дуже багато курсорних запитів RS.Movenext є сенс отримати весь рекорсет відразу з FOR XML. Продуктивність тут збільшиться не в кожній ситуації, але це теж може бути виходом зі зниження навантаження на SQL.

3. Ще метод зниження навантаження - згенерувати завданням SQL готові html-фрагменти з комбобоксамі і включити цей готовий фрагмент асповской директивою <! - # include (або літералом).

4. Перенесення всіх типових завдань сайту ( Виконання періодичних завдань в ASP.NET ) На нічний час.


Після настройки продуктивності SQL-сервера ну забудьте налагодити бекапірованіе даних .

Як це зробити?
Як це зробити?
Як це зробити?

Новости

Отель «Централь» Официальный сайт 83001, Украина, г. Донецк, ул. Артема, 87
Тел.: +38 062 332-33-32, 332-27-71
[email protected]
TravelLine: Аналитика


Студия web-дизайна Stoff.in © 2008