MS SQL Server 2000
Проблем такой: есть таблица, к ней очень много обращаются за чтением данных (много это где-то 2-3 запроса в секунду). И несколько реже, но тоже часто (раз в 1-2 минуты) в ней делают update 1% строк (тоже примерно).
Основная проблема — возникающие при этом deadlock'и. Читающее приложение переписать нельзя. Изменяющее можно.
При дэдлоке в читающем выдается пустой результат, эксепшн банально скипается
Изменения длятся около 1-2 секунд.
Думал сделать такие варианты:
1. update построчный, а не всех сразу, время увеличивается до 5 секунд, что уже неприятно для пользователя.
2. перед update делаю lock table — соответственно стоят все select. и все другие update (их может быть несколько для разных данных).
Вопрос, как лучше поступить. Просто до этого работал с ораклом, и такой головной болью не страдал
Витает мысль — улучщить подход №2: можно ли заблокировать только строки возвращаемые запросом типа (select id from t where p=x... ), и уже заблокировав их делать update t ... where p=x .
Думаю проблемс стандартный, но как "правильнее" побороть не знаю
Спасибо заранее.