Несогласованность данных в SQL Server 2000 из-за длительной транзакции

Мы столкнулись с ситуацией на одном из наших производственных серверов. У нас есть особая процедура Store, которая выполняет операцию Insert для одной из самых больших таблиц в БД (у нее более нескольких миллионов строк). Эта таблица является самой загруженной таблицей в БД, и от нее зависит множество операций.

Недавно мы столкнулись с проблемой на одном конкретном производственном сервере.

Мы выполняем Вставку SP вместе с некоторыми другими SP обновлениями в одном одна транзакция, и мы довольно часто сталкиваемся с проблемой «Длительная транзакция» для Insert SP. Когда мы сталкиваемся с этой проблемой, мы обнаруживаем типичное поведение данных, которые вставляются в таблицу. Значение столбца datetime вставляется как «null». Это происходит несколько раз для всех строк и несколько раз для нескольких строк. Значение datetime передается из приложения. Но другие операции обновления, которые выполняются до и после операции вставки, работают хорошо.

Мы выполнили трассировку профилировщика sql в нашей тестовой среде (не на производственном сервере), но обнаружили, что значение datetime каждый раз передавалось правильно.

12137] Также, когда мы сталкиваемся с проблемой в производстве, мы замечаем, что:

  1. @@ trancount равно '0', но DBCC OPENTRAN отображает конкретная открытая сделка.
  2. Тип «Последнее ожидание» имеет значение «NETWORKIO».
  3. Тип ожидания - «0x0000».
  4. Статус «спящий».
  5. УРОВЕНЬ ИЗОЛЯЦИИ READ UNCOMMITTED.

Итак, нас беспокоит

  1. Почему datetime вставляется как «NULL» только в этой конкретной ситуации?
  2. Как избежать этой ситуации, а также длительной транзакции ?
  3. Что может быть причиной возникновения такой ситуации на одном конкретном сервере?

Заранее благодарим за помощь,

Abhijit

6
задан Abhijit 6 April 2011 в 06:32
поделиться