KB3074425 - ИСПРАВЛЕНО: ожидание CMEMTHREAD происходит при выполнении большого количества ad hoc запросов в SQL Server 2012 или SQL Server 2014

Применяется к
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Проблема

Предположим, что в базах данных Microsoft SQL Server 2012 или SQL Server 2014 имеется много статистических данных и таблиц, а таблицы содержат много столбцов. При одновременном выполнении большого числа незапланированных запросов для получения данных из этих таблиц во время выполнения может возникнуть ожидание потока CMEMTHREAD.

Решение

Сведения о накопительном пакете обновления

Эта проблема была впервые исправлена в следующем накопительном пакете обновления SQL Server.

Рекомендация. Установите последний накопительный пакет обновления для SQL Server

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

      

Дополнительные сведения

При компиляции или перекомпиляции запроса в SQL Server 2012 подсистеме необходимо получить входные данные из статистической гистограммы. Нам нужно выполнить сканирование системных таблиц, а затем загрузить определенную гистограмму таблиц, которые задействованы в памяти или кэше. Эти записи системной таблицы (для статистики) хранятся в кэше системной таблицы (CACHESTORE_SYSTEMROWSET). Объект памяти, используемый для создания этих записей в кэше, не секционирован и является глобальным.

Следовательно, если во время этой операции выполняется параллельное выделение памяти, вы столкнетесь с ожиданием CMEMTHREAD для этого объекта памяти. Обычно это происходит при отправке большого количества запросов, требующих компиляции или перекомпиляции.

Это исправление изменяет глобальный объект памяти, который нужно разделить, так что параллельное перераспределение памяти, использующее кэш системной таблицы, не столкнется с конфликтами, и поток CMEMTHREAD будет ждать.

Дополнительные сведения о подобной проблеме см. в статье 3026082 статьи базы знаний. ИСПРАВЛЕНО. Конфликт SOS_CACHESTORE Spinlock в кэше набора строк системной таблицы приводит к высокой загрузке ЦП в SQL Server 2012 или 2014.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».