2009-09-17 2 views
2

Я вижу огромный успех в нашем корпоративном приложении при изменении коллекции XML-схемы данного столбца на большой таблице. Упрощенно говоря, мы делаем что-то вроде этого:изменение коллекции схем xml - огромный успех.

ALTER TABLE HugeTable ALTER COLUMN CustomFields XML 

(примечание: CustomFields ранее был связан с XML (CustomFieldsSchemaCollection, но, конечно, нам нужно изменить, что XML-схемы, так что нам нужно это заявление так, что эта схема может быть изменен)

, а затем, после изменения CustomFieldSchemaCollection, мы делаем это:.

ALTER TABLE HugeTable ALTER COLUMN CustomFields XML(CustomFieldSchemaCollection) 

Первое утверждение занимает 8 минут, а второй оператор занимает 10 минут

Мы обнаружили, что может немного оптимизировать первое утверждение (50% прирост производительности), используя следующий:

ALTER TABLE HugeTable ALTER COLUMN CustomFields nvarchar(max) 

Эффекта является то, что первым оператор занимает 4 минуты, а второе утверждение занимает 10 (так, 14 мин, с 18).

линия вопрос Низ ... Есть ли способ сделать это «XML-схемы повторного связывания» (или что один называет его) таким образом, чтобы избежать совершенно ненужной и избыточную проверку в SQL Server каждого значения в колонке? (Примечание: да, мы можем с уверенностью предположить, что существующие XML-данные в этой таблице будут соответствовать новой коллекции схем xml.)

Спасибо всем, кто может помочь!

+0

, если это изменение на один раз, что с ним связано? 15-20 минут? –

+0

KM: отличный вопрос! это часть процесса обновления. к сожалению, на даже полу-больших базах данных это занимает много времени - и приводит к неудачным обновлениям (ошибкам таймаута). Как компания, мы пытаемся отойти от решения «просто увеличить пороговое значение времени ожидания», так как это слишком сильно укусило нас в прошлом. – Garrett

ответ

0

Если время действительно является большой проблемой (которая при однократном обновлении не имеет большого значения), вы могли бы просто удалить базовые данные, выполнить повторную привязку к новой схеме, а затем сделать массовую вставку все проблемы с идентификационной записью и т. д. ...?

Или супер ступенчато, написать скрипт, который выполняет следующие действия в партиях:

  1. Alter таблицу и добавить новый столбец XML с новой схемой
    связывания
  2. Установите новые данные столбца = новые данные старого столбца
  3. Капля старой колонны.
  4. Переименуйте новый столбец в имя старого столбца.
  5. Изменить Ordinality при необходимости (другая тема ... И если все ваши запросы, потребляющие не записывается безопасно, указав имена столбцов, вместо того, чтобы полагаться на
    , лежащие в основе ordinality)
Смежные вопросы