Есть несколько вещей, которые, я думаю, должны быть рассмотрены одновременно здесь.Во-первых, и это самое важное, я настоятельно рекомендую вам взглянуть на эту транзакцию, чтобы увидеть, что вы можете сделать, чтобы уменьшить нагрузку на вашу систему.Можно ли его разбить на несколько небольших транзакций?Поможет ли добавление лучших индексов?Будет ли захват подмножества данных и помещение их во временную таблицу уменьшать количество SELECTS, запускаемых по основной таблице?Список вопросов может продолжаться некоторое время.
Далее, посмотрите на «приложение», которое запускает транзакцию.Это проходит даты в?Если да, то как он это делает?Если он просто передает GetDate()
, значит, SQL Server выполняет всю работу.Однако, если приложение передает значение даты, я бы удостоверился, что это значение даты ВСЕГДА допустимо.Если это так, посмотрите на таблицу, чтобы убедиться, что форматирование даты установлено правильно.Например, если ваше приложение было передано в европейском формате даты 14-05-2011
, ваше приложение может подавиться, если оно ожидает месяц-день-год, поскольку 14 не конвертируется в месяц.
В-третьих, просмотритеваши таблицы, чтобы увидеть, если на них установлены какие-либо триггеры.Если вы это сделаете, посмотрите на каждый триггер очень внимательно.Вполне возможно, что триггер вызывает конфликт в вашей транзакции.Возможно, вы пишете данные, и ваш триггер возвращается и обновляет данные (или оценивает дату и говорит, что она недействительна - см. Пример выше).
В-четвертых, проверьте данные, прежде чем они покинут транзакцию.Прочитайте его, когда он войдет, и прочитайте его после выполнения INSERT
.Возможно, после завершения транзакции выполняется клиентская операция, которая уничтожает значение даты.
Наконец, вам нужно взглянуть на свою тестовую среду.Если это работает в тесте, но не в производстве, между двумя системами есть что-то отличное.Это причина, прямо или косвенно.Может быть, это связано с аппаратным обеспечением (плохая оперативная память?) Или может быть что-то другое в настройках (блокировка, тот факт, что клиенты пытаются выполнить действия с данными и т. Д.)
Помимо этого, здесьссылка на форум с некоторыми другими потенциальными ответами для вас:
http://groups.google.com/group/comp.databases.ms-sqlserver/browse_thread/thread/1063b65df1f97492/8649bee2002646a2