Студия управления System.OutOfMemoryException


38

Я использую Microsoft SQL Server 2012 и пытаюсь выполнить простой запрос к нему в Management Studio. Я получаю следующую ошибку (в SSMS, работающей на сервере):

Произошла ошибка при выполнении пакета. Сообщение об ошибке: Исключение типа «System.OutOfMemoryException» было сгенерировано.

В системе установлено 24 ГБ ОЗУ, но в диспетчере задач процесс sqlservr.exe использует только 2,9 ГБ.

Есть ли где-то настройка, ограничивающая использование ОЗУ?

Ответы:


39

Эта ошибка означает, что в Management Studio не хватает памяти, а не службы SQL Server. Даже если вы установили 64-битный SQL Server, исполняемый файл SQL Server Management Studio является 32-битным приложением.

Вероятно, это связано с размером набора результатов, который вы возвращаете в Management Studio. Вы выполняете что-то вроде SELECT * FROM действительно_big_table? См. Http://support.microsoft.com/kb/2874903 для получения дополнительной информации.


19

Майк прав, что сообщение об ошибке вы получаете от самого приложения Management Studio, а не от SQL Server. Это память на вашей локальной рабочей станции, которая была исчерпана, вероятно, из-за попытки вытянуть 16 миллиардов строк в клиентское приложение (рендеринг такого количества данных в сетке довольно дорог с точки зрения памяти, поэтому постарайтесь ограничить свои запросы, используя TOPetc - Я не знаю, какие практические действия вы могли бы сделать с достаточным количеством данных, чтобы все равно использовать всю вашу локальную память).

Но я хочу решить еще одну проблему: использование диспетчера задач для оценки объема памяти, используемого SQL Server. Не делай этого; это наглый лжец Копирование из этого ответа (ваш вопрос двоякий, поэтому я не могу закрыть его как дубликат):


Вы НИКОГДА, НИКОГДА не могли доверять диспетчеру задач, чтобы сообщить вам, сколько памяти использует SQL Server. Прекратите использовать диспетчер задач для этого, точка. Используйте счетчик производительности - вы также можете запросить счетчик производительности, используя DMV:

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

Вы можете сохранить его как ярлык запроса в «Инструменты»> «Параметры»> «Среда»> «Клавиатура»> «Ярлыки запроса» и получить точные результаты в окне запроса гораздо быстрее, чем получать неточные результаты из диспетчера задач.

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

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

Вышеуказанные команды предназначены для новых версий SQL. Для серверов SQL 2008 R2 команды там немного отличаются. Я добавлю еще один пост в этот список для этих серверов, так как последующие комментарии не достаточно хорошо отформатированы, чтобы помещать их здесь
— Дэвид Бридж

15

Это было то же самое со мной. Моя SQL Server Management Studio была открыта в течение нескольких дней. Я перезапустил его, и это было решено.


9

Я обнаружил, что отключение IntelliSense помогло. Я также рекомендую проверить любые надстройки, которые у вас есть (такие вещи, как инструменты RedGate и ApexSQL также усугубили проблему для меня).

Эта проблема мучила меня уже несколько дней, и, честно говоря, она довольно слабая из Microsoft. Они должны иметь 64-битные наборы инструментов, поскольку в наши дни мы имеем дело с большими данными, 64-битными серверами и рабочими средами.


1
В моем случае RedGate SQL Prompt боролся с SSMS, встроенной в intellisense. Отключение IntelliSense для SSMS также значительно улучшило работу SQL Prompt.
— TTT

1

Для SQL 2008 R2 команды запроса памяти (из поста Аарона Бертранда) следующие

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

Также обратите внимание, что команда

EXEC sp_configure 'max server memory';

может не работать, если не включены расширенные параметры. например, сделай это первым

EXEC sp_configure 'show advanced options',1
RECONFIGURE

1

Обратите внимание, что существует проблема с подключением Microsoft, связанная с утечкой памяти SSMS. Они думают, что решили это в 16.5

Смотрите проблему на Connect.microsoft.com, нажав здесь

Если вы установили последнюю версию и у вас все еще есть проблема, пожалуйста, проголосуйте за нее, чтобы открыть ее снова.

SSMS v16.5 здесь

Проблема с подключением, указывающая на утечку памяти, исправлена ​​в 16.5 здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.