SQL сервер время от времени возвращает данные от часов до недель, используя как SSMS, так и соединения приложений. Проблема сохраняется достаточно долго, чтобы я мог проверить ее как в приложениях, так и в SSMS, а также выполнить слегка измененные запросы, которые возвращают последние данные. Это происходит по нескольким таблицам в базе данных. Но, кажется, изолирован в несколько рядов одновременно. ПРИМЕЧАНИЕ. Для номера элемента ie в некластеризованном индексе имеется 1 строка.
SELECT tableA.itemnumber, tableA.location, tableB.itemtype
from tableA left join tableB on tableA.itemnumber=tableB.itemnumber
where tableA.warehouse = @warehouse and tableA.itemnumber in (@item1, @item2, ...)
, но если я выберу из tableA
напрямую или с другим запросом, присоединенным к большему количеству таблиц, то и SSMS, и приложения вернут 1 Ряд текущих данных. Также я подтвердил это поведение, используя изоляцию моментальных снимков, отсутствие изоляции и даже nolock
, работающий под разными пользователями.
Я хотел бы понять, как это может произойти и возможные пути решения этой проблемы.
База данных изначально принадлежит нашей ERP.
Все таблицы являются кучами (без кластеризованного индекса).
Работает на 2012 SQL Сервер.
Реализует снимок, но не RCSI.
Индексы якобы перестраиваются каждую неделю (но не могу подтвердить, я видел фрагментацию индекса на уровне 90).
Ошибки возникают, может быть, 10 раз / 10000 в день, но их трудно отследить, поскольку данные постоянно меняются в этих таблицах в течение дня. На данный момент я делаю перекрестные ссылки на 2 запроса, и когда они не совпадают, я выдаю ошибку и говорю попробовать позже.