SQL Compact Edition 3.5 SP 1 - LockTimeOutException - как отлаживать? - PullRequest
1 голос
/ 18 сентября 2008

Периодически в нашем приложении мы сталкиваемся с исключениями LockTimeoutException, возникающими из SQL CE. Недавно мы обновили до 3.5 SP 1, и некоторые из них, похоже, исчезли, но мы все еще время от времени видим их. Я уверен, что это ошибка в нашем коде (которая является многопоточной), но я не смог точно ее определить. У кого-нибудь есть хорошие методы для устранения этой проблемы? Журнал исключений выглядит так (для этих исключений никогда не может быть трассировка стека):

Тайм-аут SQL Server Compact в ожидании блокировки. Время блокировки по умолчанию составляет 2000 мс для устройств и 5000 мс для настольных компьютеров. Время ожидания блокировки по умолчанию можно увеличить в строке подключения с помощью свойства ssce: default timeout. [Идентификатор сеанса = 6, Идентификатор потока = 7856, Идентификатор процесса = 10116, Имя таблицы = Продукт, Тип конфликта = блокировка (х блоков), Ресурс = DDL]

Наша база данных тяжелая для чтения, но редко пишет, и я думаю У меня все защищено там, где и должно быть.

РЕДАКТИРОВАТЬ: SQL CE уже автоматически использует NOLOCK http://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

В случае, если кто-то еще наткнется на эту страницу, я обнаружил другую причину, по которой это может произойти. Я создал SqlCeTransaction, чтобы обернуть различные операторы, и случайно не использовал эту транзакцию в одном из операторов. Это стало причиной моего сообщения о тайм-ауте блокировки.

1 голос
/ 18 сентября 2008

Я только что понял, что 3.5 SP1 включает новую информацию в исключение, которое позволяет мне закрепить.

Тайм-аут SQL Server Compact в ожидании блокировки. Время блокировки по умолчанию составляет 2000 мс для устройств и 5000 мс для настольных компьютеров. Время ожидания блокировки по умолчанию можно увеличить в строке подключения с помощью свойства ssce: default timeout. [Идентификатор сеанса = 6, Идентификатор потока = 7856, Идентификатор процесса = 10116, Имя таблицы = Продукт , Тип конфликта = блокировка s (блоки x), Ресурс = DDL ]

Мне удалось определить, что это происходило, когда я пытался удалить существующую таблицу, которая должна иметь открытые соединения с ней.

...