Причина помилки Timeout expired при завантаженні файлу, база на SQL Server 2008, Книги та статті, Різне, статті

База даних внутрішнього сервера DocsVision переводилася на нову машину. З Microsoft SQL Server 2005 32bit на Microsoft SQL Sever 2008 64 bit.
Після переведення виявлено наступне поведінку. При додаванні файлу будь-якого розміру в картку виникає помилка Timeout expired.


В журналі StorageServer фіксувалася наступна помилка:

StorageServerRuntime Error: 0 : Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. Method name: StorageServer.FileWrite

Більше ніяких помилок у журналах DocsVision, і в системних журналах ОС не було. З продуктивністю сервера так само було все в порядку.

Детальне дослідження нашим розробником показало, що виклик команди, яка виконує завантаження бінарних даних в таблицю dvsys_binaries виконується дуже довго (кілька хвилин).






Впроваджуйте СЕД DocsVision з меншими витратами! Компанія “Інтерфейс” спільно з DocsVision пропонує спеціальні умови по впровадженню системи електронного документообігу (СЕД) DocsVision. Детальніше “


За допомогою адміністративних уявлень (Dynamic Management Views) sys.dm_tran_active_transactions, sys.dm_exec_requests і sys.dm_exec_sql_text було виявлено, що SQL Server додатково запускає наступний запит:

SELECT StatMan([SC0], [LC0]) FROM ( SELECT TOP 100 PERCENT CONVERT([varbinary](200), SUBSTRING([Data], 1, 100)++ SUBSTRING([Data], CASE WHEN LEN([Data])<=200 THEN 101 ELSE LEN([Data])-99 END, 100) ) AS [SC0] ,DATALENGTH([Data]) AS [LC0] FROM [dbo].[dvsys_binaries] WITH (READUNCOMMITTED) ORDER BY [SC0] ) AS _MS_UPDSTATS_TBL

Ця команда отримує перші і останні 100 байт з Data в колонку SC0, довжину Data в колонку LC0 для кожного запису в dvsys_binaries, потім направляє отримані дані у функцію StatMan. Це вкрай неефективний запит, він призводить до перечитування великої кількості даних (у нашому випадку це 11Гб). Залишилося незрозумілим, чому SQL Server 2008, при виконанні команди часткового оновлення даних в BLOB-колонці для одного запису (вказана по первинному ключу), запускає такий тривалий запит для аналізу статистики.

Щоб обійти проблему була виконана команда:

EXEC sp_dboption “MyBase”, “auto create statistics”, “false”

В результаті відключено автоматичне створення статистики для нашої бази даних MyBase.

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

1. Вказано FILEGROWTH = 100Mb – був 1 Мб. Настільки малий показник призводить до частих операціях по збільшенню об’єму бази (дорога операція) і підвищує загальну фрагментованість даних.

2. Вказано режим сумісності COMPATIBILITY_LEVEL = 100 – сумісність з форматом SQL Server 2008

Результат. Якщо після переведення бази на SQL Server 2008 з’являється помилка перевищення таймауту при завантаженні файлу (створення картки файлу), то спробуйте відключити ведення статистики.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*