Для выполнения этого запроса недостаточно системной памяти в пуле ресурсов internal
SQL Server 2008 Linked Server и Ad-hoc вставки вызывают быструю утечку памяти, которая в конечном итоге приводит к тому, что сервер становится не реагирующим и заканчивается следующей ошибкой:
сервер остается не реагирующим до перезапуска SQL Server.
программное обеспечение в использовании:
Windows Vista Ultimate 64 бит построить 6001 SP1
SAOLEDB.11 драйвер из SQL Anywhere 11.0.1.2276
установка max server memory (MB) в 2048 не помогла.
добавление различных значений-g (например, -g256;) к параметрам запуска сервера не помогло.
использование DBCC FREESYSTEMCACHE ('ALL'), DBCC FREESESSIONCACHE и DBCC FREEPROCCACHE не помог.
установка пакета обновления 4 Cumnulative в пакет обновления 1 для SQL Server 2008 не помогла, хотя он содержал исправление симптома утечки памяти, связанного с использованием сервера.
разделение выбора . ROW_NUMBER () OVER . запрос от INSERT не помог. Эксперименты показали, что сложный выбор не вызвал утечку памяти, это сделала вставка.
изменение кода для использования ad-hoc " вставить в Синтаксис OPENROWSET " вместо связанного сервера не помог; приведенный ниже код показывает использование связанного сервера.
обратите внимание, что SQL Anywhere версия связанного сервера (прокси-таблицы) работает нормально, чтобы "вытащить" 1,9 миллиона строк из таблицы SQL Server 2008 в базу данных SQL Anywhere 11 в одной транзакции. Логика, показанная здесь, - это попытка использовать функцию связанного сервера для" выталкивания " строк; то же направление, другой синтаксис.
код следует; 4G ОЗУ исчерпывается после трех или четырех исполнений EXECUTE copy_mss_t2:
вот исходная таблица SQL Server, содержащая около 1G данных в 1,9 миллиона строк:
вот целевая таблица в SQL Anywhere 11:
проблема заключается в использовании связанного сервера через SQL Anywhere 11.0.1 поставщика SAOLEDB.11 для вставки данных в целевой столбец, объявленный как больше VARCHAR (8000 ). Вот упрощенное воспроизводимое:
вы можете попробовать запустить insert в пакетах вместо всего набора данных сразу.
вместо использования временных таблиц вы можете попробовать использовать таблицы переменных?
SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup More. Less
Microsoft distributes Microsoft SQL Server 2008 and Microsoft SQL Server 2008 R2 fixes as one downloadable file. Because the fixes are cumulative, each new release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2008 or SQL Server 2008 fix release.
Cause
This problem occurs for all the following reasons:
There is a bug in the code that is used to evaluate how many rowsets are required to perform a sorting operation. Therefore, the code greatly overestimates the numbers of rowsets. The required grant estimate in full-text is 64 pages for each rowset that is required to sort.
There is a large request that blocks the system from using the memory that is reserved for the full-text query.
Средства диагностики и сбор данных
Средства диагностики, позволяющие собирать данные для устранения неполадок, — это Системный монитор, sys.dm_os_memory_clerks и DBCC MEMORYSTATUS .
Настройте в Системном мониторе сбор данных с помощью следующих счетчиков:
- Память — Доступно МБ
- Процесс — Рабочий набор
- Процесс — Байт исключительного пользования
- SQL Server — Диспетчер памяти (все счетчики)
- SQL Server — Диспетчер буферов (все счетчики)
Собирайте периодические выходные данные следующего запроса на затронутом сервере SQL Server:
Пояснение
Ошибка 701 возникает, когда SQL Server не удается выделить достаточный объем памяти для выполнения запроса. Причиной нехватки памяти могут быть разные факторы, например параметры операционной системы, доступность физической памяти, использование памяти другими компонентами в SQL Server или ограничения памяти для текущей рабочей нагрузки. В большинстве случаев эта ошибка не возникает из-за сбоя транзакции. В целом, причины можно разделить на три группы.
Решение
Проблемы
Дата время код SPID ошибка: 701, степень серьезности: 17, состояние: 123.Дата и времяидентификатор SPID недостаточно системной памяти в пуле ресурсов "internal" для выполнения этого запроса.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Использование памяти внешними компонентами: диагностика и решения
Чтобы продиагностировать нехватку памяти в системе вне процесса SQL Server, используйте счетчики Системного монитора. Проверьте, имеются ли на текущем сервере потребляющие память приложения или службы помимо SQL Server, с помощью следующих счетчиков:
- Память — Доступно МБ
- Процесс — Рабочий набор
- Процесс — Байт исключительного пользования
Проверьте наличие ошибок, связанных с памятью (например, нехватку виртуальной памяти), в журнале системных событий.
Проверьте наличие ошибок памяти, связанных с приложениями, в журнале событий приложений.
Устраните все проблемы с кодом и конфигурацией для неприоритетных приложений и служб, чтобы уменьшить объем используемой ими памяти.
Если какие-то приложения помимо SQL Server потребляют ресурсы, попробуйте остановить эти приложения, изменить расписание их работы или запустить их на другом сервере. Это поможет снизить внешнюю нагрузку на память.
Сведения о накопительном пакете обновления
SQL Server 2008 с пакетом обновления 1
Исправление для этой проблемы впервые выпущено в накопительном обновлении 9 для SQL Server 2008 с пакетом обновления 1 (SP1). Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:
2083921 накопительное обновление 9 для SQL Server 2008 с пакетом обновления 1 (SP1)Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008. Корпорация Microsoft рекомендует установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
970365 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 1 (SP1) для SQL Server 2008 Исправления Microsoft SQL Server 2008 создаются для конкретных пакетов обновления для SQL Server. Вы должны применить исправление для SQL Server 2008 с пакетом обновления 1 (SP1) к установке SQL Server 2008 с пакетом обновления 1. По умолчанию любое исправление, предоставленное в пакете обновления SQL Server, входит в следующий пакет обновления для SQL Server.
SQL Server 2008 с пакетом обновления 2
Исправление для этой проблемы впервые выпущено в накопительном обновлении 1 для SQL Server 2008 с пакетом обновления 2. Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:
2289254 Накопительное обновление 1 для SQL Server 2008 с пакетом обновления 2Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2402659 сборки SQL Server 2008, выпущенные после выпуска пакета обновления 2 (SP2) для SQL Server 2008
SQL Server 2008 R2
Исправление для этой проблемы впервые выпущено в накопительном обновлении 4. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, щелкните следующий номер статьи базы знаний Майкрософт:
2345451 Накопительный пакет обновления 4 для SQL Server 2008 R2 Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2
Cumulative update information
SQL Server 2008 Service Pack 1
The fix for this issue was first released in Cumulative Update 9 for SQL Server 2008 Service Pack 1. For more information about this cumulative update package, click the following article number to view the article in the Microsoft Knowledge Base:
2083921 cumulative update 9 for SQL Server 2008 Service Pack 1Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2008 fix release. Microsoft recommends that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
970365 The SQL Server 2008 builds that were released after SQL Server 2008 Service Pack 1 was released Microsoft SQL Server 2008 hotfixes are created for specific SQL Server service packs. You must apply a SQL Server 2008 Service Pack 1 hotfix to an installation of SQL Server 2008 Service Pack 1. By default, any hotfix that is provided in a SQL Server service pack is included in the next SQL Server service pack.
SQL Server 2008 Service Pack 2
The fix for this issue was first released in Cumulative Update 1 for SQL Server 2008 Service Pack 2. For more information about this cumulative update package, click the following article number to view the article in the Microsoft Knowledge Base:
2289254 Cumulative update 1 for SQL Server 2008 Service Pack 2Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2008 fix release. We recommend that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
2402659 The SQL Server 2008 builds that were released after SQL Server 2008 Service Pack 2 was released
SQL Server 2008 R2
The fix for this issue was first released in Cumulative Update 4. For more information about how to obtain this cumulative update package for SQL Server 2008 R2, click the following article number to view the article in the Microsoft Knowledge Base:
2345451 Cumulative Update package 4 for SQL Server 2008 R2 Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2008 R2 fix release. We recommend that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:
981356 The SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 was released
References
For more information about the Incremental Servicing Model for SQL Server, click the following article number to view the article in the Microsoft Knowledge Base:
935897An Incremental Servicing Model is available from the SQL Server team to deliver hotfixes for reported problems
For more information about the naming schema for SQL Server updates, click the following article number to view the article in the Microsoft Knowledge Base:
822499New naming schema for Microsoft SQL Server software update packagesFor more information about Full-Text Search, visit the following Microsoft Developer Network (MSDN) website:
Full-Text Search (SQL Server)For more information about software update terminology, click the following article number to view the article in the Microsoft Knowledge Base:
824684 Description of the standard terminology that is used to describe Microsoft software updates
SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup Еще. Меньше
Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 и Microsoft SQL Server 2008 R2 как один файл для загрузки. Поскольку исправления носят кумулятивный характер, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 или SQL Server 2008.
PSSDIAG или SQL LogScout
Существует и другой, автоматический способ записи подобных точек данных — это такие инструменты, как PSSDIAG и SQL LogScout.
- Для PSSDIAG настройте сборщики данных Perfmon (Системный монитор) и Custom Diagnostics\SQL Memory Error (Настраиваемая диагностика\Ошибка памяти SQL).
- Для SQL LogScout настройте сбор данных по сценарию Memory (Память).
В следующих разделах приведены более подробные указания для каждого сценария (нехватка памяти по внешним или внутренним причинам).
Symptoms
When you run a Full-Text query that uses compound words in Microsoft SQL Server 2008 or in Microsoft SQL Server 2008 R2, you receive the following error message in the Error log file:
Date Time spidID Error: 701, Severity: 17, State: 123.
Date Time spidID There is insufficient system memory in resource pool 'internal' to run this query.
Additionally, if you run a Full-Text query successfully after this problem occurs, you receive the same error message.
Внутреннее использование памяти компонентами SQL Server
К ошибке 701 также может приводить использование памяти внутренними компонентами ядра SQL Server. В SQL Server имеются сотни компонентов, которые отслеживают и которым выделяют память клерки памяти. Для устранения проблем необходимо определить, какие клерки памяти выделяют наибольший ее объем. Например, если вы обнаружите большой объем выделенной памяти у клерка OBJECTSTORE_LOCK_MANAGER, необходимо далее определить, почему диспетчер блокировки потребляет так много ресурсов. Возможно, какие-то запросы создают множество блокировок и их можно оптимизировать с помощью индексов, сокращения транзакций с длительными блокировками или отключив укрупнение блокировки. Каждый компонент и клерк памяти имеет свой уникальный способ доступа к памяти и ее использования. См. дополнительные сведения о типах клерков памяти и их описания.
Status
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Использование памяти внешними компонентами или ОС
Какой-то внешний по отношению к процессу компонент может использовать большой объем памяти, из-за чего ее может не хватать для SQL Server. Необходимо выяснить, есть ли в системе другие потребляющие память приложения, которые вызывают ее нехватку. SQL Server — одно из немногих приложений, которое при запросе памяти со стороны ОС сокращает свое использование ресурсов. То есть, когда какое-то приложение или драйвер просит выделить себе память, ОС отправляет сигнал освободить память всем приложениям и SQL Server удовлетворяет этот запрос. Мало какие приложения действуют так же, поскольку они не предусматривают ответ на это уведомление. Таким образом, если SQL начинает сокращать свое использование памяти, его пул памяти уменьшается и нуждающиеся компоненты могут ее не получить. В результате начинает возникать ошибка 701 и другие ошибки, связанные с памятью. Дополнительные сведения см. в разделе Архитектура памяти SQL Server
Resolution
Внутреннее использование памяти независимо от SQL Server
Нехватка памяти может быть вызвана факторами внутри процесса SQL Server. В процессе SQL Server могут использоваться компоненты, являющиеся "внешними" по отношению к ядру SQL Server. Это могут быть DLL-библиотеки, например связанные серверы, компоненты SQLCLR, расширенные процедуры (XP) и OLE Automation ( sp_OA* ). Сюда также относятся антивирусы и другие программы безопасности, которые внедряют DLL в процесс с целью мониторинга. При наличии проблем или плохой архитектуре эти компоненты могут вызвать существенное потребление памяти. К примеру, связанный сервер может кэшировать 20 миллионов строк данных, поступающих в память SQL Server из внешнего источника. Никакой клерк памяти в SQL Server не сообщит об использовании большого ее объема, хотя в процессе SQL Server происходит именно это. При росте объема памяти из-за DLL связанного сервера SQL Server начнет сокращать свое потребление памяти (см. выше) и ее станет недостаточно для компонентов внутри решения, из-за чего будут возникнут такие ошибки, как 701.
Ссылки
Чтобы получить дополнительные сведения о модели добавочного обслуживания для SQL Server, щелкните следующий номер статьи базы знаний Майкрософт:
935897Модель обслуживания изменений, используемая рабочей группой SQL Server, предоставляет модель ISM для распространения исправлений обнаруженных проблемЧтобы получить дополнительные сведения о схеме присвоения имен обновлениям SQL Server, щелкните следующий номер статьи базы знаний Майкрософт:
822499Новая схема присвоения имен пакетам обновлений программного обеспечения Microsoft SQL ServerДополнительные сведения о полнотекстовом поиске можно найти на веб-сайте Microsoft Developer Network (MSDN) по следующему адресу:
Поиск по полнотекстовому тексту (SQL Server)Дополнительные сведения о терминах, используемых при описании обновлений программного обеспечения, см. в следующей статье базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт
Эта статья посвящена SQL Server. Сведения об устранении проблем нехватки памяти в Базе данных SQL Azure см. в статье Устранение ошибок нехватки памяти в Базе данных SQL Azure.
Внутреннее использование памяти независимо от SQL Server: диагностика и решения
Для диагностики потребления памяти модулями (DLL-библиотеками) внутри SQL Server используйте следующий подход.
Если SQL Server не* использует Блокировку страниц в памяти (API-интерфейс AWE), то большая часть памяти SQL Server отображается счетчиком Процесс — Байт исключительного пользования (экземпляр SQLServr ) в Системном мониторе. Общее использование памяти внутри SQL Server отражено счетчиком SQL Server — Диспетчер памяти — Общая память сервера (КБ) . Существенная разница между значениями счетчиков Процесс — Байт исключительного пользования и SQL Server — Диспетчер памяти — Общая память сервера (КБ) может с большой вероятностью возникать из-за DLL (связанного сервера, XP, SQLCLR и др.). Например, если счетчик Байт исключительного пользования показывает 300 ГБ, а Общая память сервера — 250 ГБ, то примерно 50 ГБ общей памяти процесса занято чем-то вне ядра SQL Server.
Если SQL Server использует блокировку страниц в памяти (API AWE), определить проблему будет сложнее, так как в Системном мониторе нет счетчиков для AWE, отслеживающих потребление памяти в отдельных процессах. Общее использование памяти внутри SQL Server отражено счетчиком SQL Server — Диспетчер памяти — Общая память сервера (КБ) . Значения счетчика Процесс — Байт исключительного пользования обычно в совокупности составляют от 300 МБ до 1–2 ГБ. Если счетчик Процесс — Байт исключительного пользования показывает существенно большее значение, то, скорее всего, эта разница возникает из-за DLL (связанного сервера, XP, SQLCLR и др.). Например, если счетчик Байт исключительного пользования показывает 4–5 ГБ и SQL Server использует блокировку страниц в памяти (AWE), тогда большая часть этих байт может использоваться чем-то вне ядра SQL Server. Такая методика является приблизительной.
Воспользуйтесь служебной программой tasklist для обнаружения DLL, загруженных в область SQL Server:
Вы также можете проверить загруженные модули (DLL) и посмотреть, есть ли там что-то непредусмотренное, с помощью следующего запроса:
Если вы подозреваете, что значительный объем памяти занят модулем связанного сервера, вы можете настроить для него внепроцессное выполнение, отключив параметр Допускать в ходе процесса. Дополнительные сведения см. в разделе Создание связанных серверов. Не все поставщики OLE DB для связанных серверов могут работать вне процесса. За более подробными сведениями обратитесь к производителю продукта.
В тех редких случаях, когда используются объекты OLE Automation ( sp_OA* ), вы можете настроить запуск объекта в процессе вне SQL Server, установив context = 4 (только для локального сервера OLE, т. е. EXE-файла). Дополнительные сведения: sp_OACreate.
Простые способы быстро освободить память
Чтобы освободить некоторый объем памяти для SQL Server, можно воспользоваться следующими приемами.
Проверьте следующие параметры конфигурации памяти SQL Server и попробуйте увеличить max server memory (максимальный объем памяти сервера), если это возможно:
max server memory
min server memory
Обратите внимание на нестандартные параметры. При необходимости измените их. Учтите, что требования к объему памяти возросли. Настройки по умолчанию приведены в статье Параметры конфигурации памяти сервера.
Если вы не настроили max server memory, особенно при использовании блокировки страниц в памяти, попробуйте задать конкретное значение, которое оставит некоторый объем памяти для ОС. См. параметр конфигурации сервера Блокировка страниц в памяти.
Проверьте рабочую нагрузку запросов (число параллельных сеансов и текущие выполняемые запросы) и посмотрите, имеются ли неприоритетные приложения, которые можно временно приостановить или перенести в другой экземпляр SQL Server.
Если вы запускаете SQL Server на виртуальной машине, убедитесь в отсутствии на ней избыточного выделения памяти. Некоторые принципы настройки памяти для виртуальных машин см. в статьях Virtualization – Overcommitting memory and how to detect it within the VM (Виртуализация — избыточное выделение памяти и обнаружение его на виртуальной машине) и Troubleshooting ESX/ESXi virtual machine performance issues (memory overcommitment) (Устранение неполадок с производительностью виртуальных машин ESX/ESXi (избыточное выделение памяти)).
Следующие команды DBCC позволяют освободить несколько кэшей памяти SQL Server.
Если вы используете Resource Governor, рекомендуем проверить параметры пула ресурсов или группы рабочей нагрузки и убедиться, что они не ограничивают память слишком сильно.
Если проблема сохраняется, потребуется дополнительный анализ и, возможно, увеличение серверных ресурсов (ОЗУ).
Я использую SQL Server 2014 - 12.0.2269.0 (X64) в Windows Server 2012, и у меня возникают некоторые проблемы с памятью. Когда я запускаю хранимую процедуру, которая выполняет довольно «тяжелые» вычисления, я получаю ошибку примерно через 10 минут:
Недостаточно системной памяти в пуле ресурсов «по умолчанию» для выполнения этого запроса.
Мой SQL Server имеет несколько баз данных (например, 15, но они не всегда используются одновременно). Я посмотрел на файл журнала SQL Server (после того, как получил ошибку), и я увидел много таких строк:
Я также сгенерировал отчет с графиком, который показывает тот же «вывод»:
Вот, может быть, еще один полезный отчет:
Обратите внимание, что я также видел эту ошибку в журнале:
2015-12-17 12: 04: 52.37 spid70 Не удалось выделить страницу из-за нехватки памяти базы данных: FAIL_PAGE_ALLOCATION 8
Вот некоторая информация относительно памяти сервера:
Общий объем памяти на сервере: 16 Гб
Память, выделенная для сервера SQL: 12288 Мб
Используемая физическая память (с sys.dm_os_process_memory ): 9287 Мб
Если это может помочь, на сервере не размещается база данных SharePoint.
Хотя это, вероятно, не является точным ответом на вашу проблему, я все равно опубликую ее, надеясь, что она поможет вам.
То, что вы видите, - это не то, MEMORYCLERK_SQLBUFFERPOOL что MEMORYCLERK_SQLLOGPOOL занимает всю память.
Существует известная проблема с SQL 2012 SQL Server 2012 ошибки из-за нехватки памяти . Даже если вы работаете в 2014 году, есть вероятность, что вы столкнетесь с той же проблемой (хотя я не смог найти элемент подключения в 2014 году).
Также существует известная проблема как для 2014, так и для 2012 года, связанная с перестройкой индекса и always on . Вы не указали, что используете это, но, возможно, у той же ошибки есть и другие триггеры: FIX: кэш-память SQL уменьшается и увеличивается загрузка ЦП, когда вы перестраиваете индекс для таблицы в SQL Server
Поэтому мое лучшее предложение на данный момент - обновить до последней CU и посмотреть, произойдет ли это все еще, поскольку в последнее время было несколько исправлений MEMORYCLERK_SQLLOGPOOL . Поскольку вы работаете с RTM только с двумя исправлениями безопасности, которые могут иметь смысл, в SP1 + доступно несколько CU.
Так как в этой статье MEMORYCLERK_XTP используется довольно высокое использование памяти , in-memory OLTP это может помочь в устранении неполадок: мониторинг и устранение неполадок в использовании памяти
Внутреннее использование памяти ядром SQL Server: диагностика и решения
Начните сбор данных счетчиков Системного монитора SQL Server — Диспетчер буферов и SQL Server — Диспетчер памяти.
Запросите динамическое административное представление клерков памяти SQL Server несколько раз, чтобы узнать, где происходит наибольшее потребление памяти в ядре:
Если вы четко увидите клерк памяти, ответственный за избыточное ее потребление, сосредоточьтесь на особенностях потребления этого компонента. Вот несколько примеров:
- Если память потребляется клерком MEMORYCLERK_SQLQERESERVATIONS, определите, каким запросам выделяется большой временно предоставляемый буфер памяти, а затем оптимизируйте эти запросы с помощью индексов, перепишите их (например, удалите ORDER by) или используйте указания запроса.
- Если кэшируется большое число нерегламентированных планов запросов, то клерк памяти CACHESTORE_SQLCP будет использовать большой ее объем. Определите непараметризованные запросы, у которых планы не могут использоваться многократно, и параметризуйте эти запросы, преобразовав их в хранимые процедуры либо воспользовавшись sp_executesql или принудительной параметризацией.
- Если хранилище кэша планов объектов CACHESTORE_OBJCP потребляет много памяти, определите, какие хранимые процедуры, функции или триггеры используют большой объем памяти и, если возможно, спроектируйте приложение иным образом. Такое обычно происходит при больших объемах баз данных или схем с сотнями процедур в каждой.
- Если клерк памяти OBJECTSTORE_LOCK_MANAGER показывает большие объемы ее выделения, определите, какие запросы применяют множество блокировок, и оптимизируйте эти запросы с помощью индексов. Сократите транзакции, которые создают длительные блокировки на определенных уровнях изоляции, а также проверьте, не включено ли укрупнение блокировки.
Причина
Эта проблема возникает по одной из указанных ниже причин.
Ошибка в коде, который используется для оценки количества наборов строк, необходимых для выполнения операции сортировки. Таким образом, код значительно переоценивает количество наборов строк. Обязательная оценка предоставления разрешения в полнотекстовом тексте — 64 страниц для каждого набора строк, который требуется отсортировать.
Существует большой запрос, который блокирует использование памяти, зарезервированной для полнотекстового запроса, в системе.
Рекомендуемые действия
Если ошибка 701 возникает лишь иногда или длится короткое время, возможно, речь идет о краткосрочной проблеме с памятью, которая решается сама собой. В таких случаях предпринимать какие-либо действия может быть не нужно. Однако если эта ошибка возникает многократно, на разных подключениях и длится несколько секунд или дольше, для ее устранения действуйте предложенным ниже образом.
Далее перечислены основные шаги, которые помогут в устранении ошибок памяти.
Читайте также: