У меня есть экземпляр SQL Server 2000, который выполняет несколько параллельных операторов выбора для группы из 4 или 5 таблиц. Часто производительность сервера во время этих запросов резко снижается. Запросы могут занимать до 10 раз больше времени, чем другие запуски того же запроса, и доходит до того, что простые операции, такие как получение списка таблиц в проводнике объектов или запуск sp_who, могут занять несколько минут.
Я приложил все усилия, чтобы определить причину этих проблем, и единственный показатель производительности, который, как я обнаружил, не соответствует базовому уровню, - это Среднее время ожидания блокировки. Я читал, что время ожидания более 1 секунды - это плохо, а у меня колеблется от 20 до 75 секунд при интенсивном использовании.
Итак, мой вопрос, в чем может быть проблема? Разве SQL не должен иметь возможность обрабатывать несколько выборок в одной таблице без такой потери производительности? Может ли кто-нибудь предложить куда-нибудь пойти отсюда, чтобы исследовать эту проблему?
Спасибо за помощь.
Зависит от блокировки. Большинство людей полностью забывают заботу о замках. Стандартные соединения устанавливают полную блокировку чтения (повторяющиеся чтения), которые могут использовать ресурсы.
Если вы ТОЛЬКО читаете, ТОЛЬКО читаете один раз, используйте соединение, помеченное способом, и оператор sql, помеченный таким образом, чтобы НЕ оставлять НИКАКИХ блокировок.
Было бы применимо для большинства страниц asp.net - вы читаете, представляете страницу ... нет необходимости держать блокировки для этой операции, только когда вы начинаете писать.
Если приложение действительно выполняет только чтение этой таблицы, блокировка не должна быть проблемой. Я буду:
SQL Server 2000 использует механизм блокировки это обновляет замки чтобы охватить все больше и больше схемы - то есть вы можете начать блокировать страницу таблицы, но по мере того, как вы блокируете больше строк, эта блокировка быстро будет повышена до полной блокировки таблицы. Для некоторых типов запросов это может полностью убить производительность.
Настолько, что MS изменила механизм блокировки в более поздних версиях, чтобы он больше походил на блокировку на уровне строк Oracles.