Причина помилки Timeout expired при завантаженні файлу

База даних внутрішнього сервера 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>

*

*