У нас есть индексированный вид, который проходит через три большие таблицы. Две из этих таблиц (A & B) постоянно обновляются с помощью пользовательских транзакций, а другая таблица (C) содержит информацию о продукте данных, которую необходимо обновлять один раз в неделю. Эта таблица продуктов содержит более 6 миллионов записей.Выполнение больших обновлений с индексированным представлением
Нам нужен этот вид через эти три таблицы для нашего основного бизнес-процесса, и, к сожалению, мы не можем изменить этот аспект. У нас даже был MVP-сервер sql, который помогает тестировать под нагрузкой, чтобы убедиться, что у нас самая эффективная конфигурация. В таблице продуктов есть один столбец, который используется в представлении и должен обновляться каждую неделю.
Проблема, с которой мы сталкиваемся сейчас, заключается в том, что по мере увеличения объема транзакций по сравнению с таблицами A & B обновление таблицы C вызывает взаимоблокировки.
Я пробовал несколько разных методов безрезультатно: 1) Я надеялся, что мы сможем изменить представление, чтобы таблица C могла быть грязной, прочитав «WITH (NOLOCK)», но, по-видимому, эта функция недоступна с индексами Просмотры.
2) Я подумал об обновлении нового столбца в таблице C, а затем просто переименовал его, когда процесс завершен, но вы не можете этого сделать из-за зависимости в представлении.
3) Я также принял идею записать это значение во временную таблицу продуктов, а затем запустил оператор ALTER против представления, чтобы он указывал на мою новую таблицу. однако, когда я сделал это, индексы на моем представлении были отброшены, и для их повторного создания потребовалось довольно много времени.
4) Мы попытались сделать еженедельное обновление в небольших кусках (как минимум, 100 записей за раз), но мы все еще сталкиваемся с мертвыми замками.
вопросы:
а) мы используем SQL Server 2005. Есть ли SQL Server 2008 появилась новая функциональность с их индексированных представлений, которые помогли бы нам? Есть ли способ сделать грязные чтения с индексированным представлением?
b) лучший подход к изменению существующего представления, чтобы указать на новую таблицу?
спасибо!