|
|
Опубліковано 21.05.2018 13:55:48
|
|
|

За останні два дні я зіткнувся з досить розчаровуючою проблемою: у аналізаторі запитів SQL Server 2012 виконується збережена процедура приблизно з 120 рядків, Швидкість дуже ідеальна, і близько 500 записів даних можна відфільтрувати та зафіксувати менш ніж за 1 секунду. Однак при виклику в програмному коді C# з'являється тайм-аут з'єднання. Встановіть CommandTimeout на 300, і відображення займе близько 3 хвилин. Я перевірив код кілька разів і не знайшов жодних помилок. Проблема залишається.
Аналіз причин: 1. Оскільки швидкість виконання в аналізаторі запитів висока і обсяг даних невеликий. 2. Програму лише виклик — це повільно. 3. Встановіть параметр CommandTimeout, і результат можна буде відобразити, але це займе багато часу.
Підсумовуючи, попередньо зроблено висновок, що проблема полягає в коді C#. Але після огляду не було жодної вигоди.
Перевірте цю інформацію на Baidu. Нарешті знайшов подібний інформаційний пост на форумі CSDN. Один із користувачів у відповіді написав: «Можливо, план впровадження вже закінчився». Це справді розбудило мене у сні.
Виконайте негайно на аналізаторі запитів:
Тестував програму ще раз — цього разу вона нарешті спрацювала. Швидкість дуже задовільна.
Аналіз причин: Оскільки збережені процедури попередньо компільовані, план виконання генерується при першому виконанні, який використовується при наступних виконаннях (якщо не вказано перекомпіляцію), а не генерувати план виконання щоразу. Коли структура об'єкта, що задіяна у збереженій процедурі, коригується або пов'язані дані суттєво змінюються, що може зробити початковий план непридатним для поточного статус-кво (закінчення плану виконання), збережену процедуру слід перекомпіллювати.
Нарешті, додайте код збереженої процедури:
|
Попередній:Подяжуйте один вихідний код промо-сторінки APP, адаптивний, дуже красивий і щедрий!Наступний:C# Фреймворк з відкритим кодом (перевидання)
|