В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

ИСПРАВИТЬ: Частичные результаты запроса также columnstore кластеризованного индекса в SQL Server 2014 г

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 3067257
В данной статье рассматривается проблема, которая происходит во время выполнения запроса также columnstore кластеризованного индекса в 2014 Microsoft SQL Server. Эта статья содержит разрешение для этой проблемы.
Аннотация
При использовании запроса, который проверяет также columnstore кластеризованный индекс в 2014 Microsoft SQL Server в редких случаях появляется частичных результатов.

Эта проблема возникает при выполнении следующей операции.
Шаг 1
Инструкцию Transact-SQL [INSERT или инструкции BULK INSERT] вставляет данные в таблицу, которая кластеризованный индекс также columnstore. Во время этой операции применяются следующие условия.
  • Инструкция Transact-SQL, достигает порога rowgroup, закрывает rowgroup R1, имеющий сегмент S1.
  • Указывает сегмент S1 на локальный словарь D1.
  • Инструкция продолжается для вставки строк в новый rowgroup R2.
  • При закрытии rowgroup R1 локального словаря D1 также не будет закрыт. Если словарь D1 по-прежнему есть свободное место, можно оставить открытым и использовать повторно для нового rowgroup R2.
Шаг 2
Если инструкция языка Transact-SQL аварийное завершение или отменена до ее закрытия новых rowgroup R2, применяются следующие условия.
  • Происходят изменения метаданных также ColumnStore в вложенные операции, зафиксировать независимо от внешней транзакции.
  • На этом этапе rowgroup, R1 сохраняется в системной таблице «в стадии разработки» или НЕВИДИМЫЕ состояния и сегмент S1 ссылается словарь D1.
  • Отсутствует строка создана в системной таблице для словаря D1. Это происходит потому, что инструкция Transact-SQL не может закрыть существующей строки. Таким образом сохраняет существующую строку.
Шаг 3
В типичной ситуации, если фоновая задача mover кортежа начинается после завершения инструкции Transact-SQL, фоновая задача удаляет невидимые rowgroup R1 и сегмент S1. Если новая инструкция Transact-SQL теперь запускается и создает rowgroup R3, имеющий новый сегмент S3, требующий нового локального словаря, не может использовать внутренний идентификатор словаря D1. Это состояние также columnstore в памяти сохраняет список словарь идентификаторов, используемых. Таким образом сегмент S3 будет ссылаться новый словарь D2.

Примечание На этом этапе оно обычное условие. Таким образом происходит повреждение.
Шаг 4
Если SQL Server теряет состояние в памяти словарь D1, прежде чем задача mover кортежа вступает в силу (и работает, как описано в шаге 3), возникает проблема, описанная в данной статье.

Заметки
  • Это событие возникает по одной из следующих причин:
    • SQL Server обнаруживает перегрузки памяти и в памяти содержимое словаря D1 будут исключены из памяти.
    • Перезапуск экземпляра SQL Server.
    • База данных, содержащая также columnstore кластеризованный индекс переходит в автономный режим, а затем снова в оперативный.
  • После любого из этих событий происходит и перезагружает структуры в памяти SQL Server, отсутствует запись, словарь D1 и его внутренний идентификатор существовал. Это происходит потому, что словарь D1 не было сохранено в системных таблицах окончании инструкцию Transact-SQL или conceled.
  • Если на этом этапе начинается фоновая задача mover кортежа, ошибки не возникает, поскольку применяются условия, описанные в шаге 3.
  • Перед запуском задания фона mover кортеж (на предыдущий элемент маркированного списка), созданный новый rowgroup R3, SQL Server присваивает один и тот же внутренний идентификатор нового словаря D1 и она ссылается на словарь D1 для сегмента S3 в rowgroup R3.
  • При запуске фоновой задачи mover кортежа после предыдущего действия, он станет невидимой rowgroup R1 и его сегменты S1, а также новый словарь D1. Это происходит, поскольку mover кортежа рассматривает этот новый словарь D1 и исходном словаре D1 ссылки S1 одинаковы.

    Примечание Когда это происходит, не могут запрашивать содержимое rowgroup R3.
Решение
Проблема была впервые устранена в следующее накопительное обновление для SQL Server:


Исправление этой уязвимости также входит в следующие обновления общего распространения (GDR) выпуска:

Обновление безопасности для SQL Server 2014 QFE
Это обновление включает накопительное обновление 8, важные исправления и необходимые обновления безопасности MS15-058.

Обновление безопасности для SQL Server GDR 2014 г
Это обновление включает важные исправления и накопительные исправления безопасности через MS15-058.

Не связанное с безопасностью обновление GDR 2014 Пакет обновления 1 для SQL Server
Это обновление содержит только важные исправления.

О накопительных пакетах обновления для SQL Server

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и все безопасности исправления, входившие в состав предыдущего накопительного обновления. Просмотреть последние накопительные обновления для SQL Server:
Дополнительная информация

Сообщения об ошибках

В настоящее время баз данных Если после установки данного исправления выполните инструкцию DBCC CHECKDB появляется следующее сообщение об ошибке:
Сообщение 5289, уровень 16, состояние 1, строка 1
Также columnstore кластеризованного индекса «cci» в таблице 't' имеет одно или несколько значений данных, не соответствующих значений в словаре. Восстановите данные из резервной копии.

В настоящее время баз данных при выполнении запроса, который сканирует затронутых таблиц после применения этого исправления, появляется следующее сообщение об ошибке:
Сообщение 5288, уровень 16, состояние 1, строка 1
Также ColumnStore индекс имеет одно или несколько значений данных, не соответствующих значений в словаре. Для получения дополнительных сведений запустите инструкцию DBCC CHECKDB.

Появление этих ошибок, установить для него неповрежденный данные можно сохранить путем массового экспорта данных без изменений столбцов/rowgroups и затем загрузка данных после удаления или создания также columnstore кластеризованного индекса. Следует включить флаг трассировки 10207 подавление ошибок 5288 и вернуться к старому поведению пропуск поврежденного rowgroups.

Примечание Сообщения об ошибках 5288 и 5289 создаются для этого rowgroup R3, имеющий сегмент S3. Флаг трассировки 10207 используется для извлечения сегментов rowgroup R3, которые не подвержены отсутствует словарь D1.

Запрос для соответствующих баз данных

Чтобы определить, является ли база данных, содержащая индексы также columnstore уже подвержены этой проблеме, выполните следующий запрос:
select         object_name(i.object_id) as table_name,        i.name as index_name,        p.partition_number,        count(distinct s.segment_id) as damaged_rowgroups from        sys.indexes i        join sys.partitions p on p.object_id = i.object_id and p.index_id = i.index_id        join sys.column_store_row_groups g on g.object_id = i.object_id and g.index_id = i.index_id and g.partition_number = p.partition_number        join sys.column_store_segments s on s.partition_id = p.partition_id and s.segment_id = g.row_group_id where         i.type in (5, 6)        and s.secondary_dictionary_id <> -1         and g.state_description = 'COMPRESSED'        and s.secondary_dictionary_id not in        (               select dictionary_id from sys.column_store_dictionaries d               where d.hobt_id = p.hobt_id and d.column_id = s.column_id        ) group by         object_name(i.object_id),        i.name,        p.partition_number 

Заметки
  • Необходимо выполнить этот запрос для каждой базы данных, содержащей индексы также columnstore на сервере, на котором выполняется SQL Server. Пустой результирующий набор показывает, что базы данных не влияет.
  • В период выполнения этого запроса при отсутствии активности, создание новых rowgroups или изменение состояния существующих rowgroups. Например, следующие действия могут изменить состояние rowgroups: построение индекса, Реорганизация индекса, инструкции bulk insert, сжатие магазины дельта mover кортежа.

    Перед выполнением запроса можно отключить с помощью флага трассировки 634 mover кортежа в фоновом. Эта команда используется для отключения фоновой задачи: DBCC TRACEON (634, -1). После завершения выполнения запроса, не забудьте снова включить фоновой задачи с помощью команды: DBCC TRACEOFF (634, -1).

    Также убедитесь, что нет команд BULK INSERT/BCP/выбор-в Вставка данных в таблицы, которые используют также columnstore индекс во время выполнения этого запроса.

    Рекомендуется, чтобы предотвратить возвращение ложных срабатываний запроса выполните следующие действия.
Статус
Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 3067257 — последний просмотр: 07/26/2015 07:55:00 — редакция: 3.0

Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbsurveynew kbexpertiseadvanced kbfix kbmt KB3067257 KbMtru
Отзывы и предложения
ateElement("meta"); m.content = guid; m.name = "ms.dqid"; document.getElementsByTagName("head")[0].appendChild(m);