- ASP NET, NET Framework, MONO, SQL, Visual Studio ( SQL ) SQL (2010 рік) Ця замітка не претендує...
- 2.Балансіровка навантаження дискової підсистеми
- 3.Управление пам'яттю
- 4.Ожіданія в сервері
- 5.Построеніе індексів
- 6.Оптімізація важких запитів.
- 7. Загальне зниження навантаження на SQL
- ASP NET, NET Framework, MONO, SQL, Visual Studio
- 1.Защіта SQL-сервера
- 2.Балансіровка навантаження дискової підсистеми
- 3.Управление пам'яттю
- 4.Ожіданія в сервері
- 5.Построеніе індексів
- 6.Оптімізація важких запитів.
- 7. Загальне зниження навантаження на SQL
- ASP NET, NET Framework, MONO, SQL, Visual Studio
- 1.Защіта SQL-сервера
- 2.Балансіровка навантаження дискової підсистеми
- 3.Управление пам'яттю
- 4.Ожіданія в сервері
- 5.Построеніе індексів
- 6.Оптімізація важких запитів.
- 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Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.
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.
Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі 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.
Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.
Про індекси треба пам'ятати і на етапі 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Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.
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.
Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі 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.
Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.
Про індекси треба пам'ятати і на етапі 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Гб пам'яті, два чотириядерних Ксеон і кілька звичайних дисків.
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.
Є і третій варіант тих же цифр - лічильники Perfomance. Всі цифри різні. Яким цифрам вірити - незрозуміло, але начебто мікрософтовци стверджують, що лічильники оснаскі 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.
Щоб добитися ефективної роботи індексів - для початку треба правильно спроектувати базу. Грубо кажучи - максимум посилальних відносин, що дозволяє оптимізатора відразу чіпляти потрібні пов'язані дані. Для сайту, який крутиться на цьому сервері - я зробив десяток таких діаграм.
Про індекси треба пам'ятати і на етапі 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-сервера ну забудьте налагодити бекапірованіе даних .
Як це зробити?
Як це зробити?