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


38

Я використовую Microsoft SQL Server 2012 і намагаюся запустити простий запит проти нього в програмі Management Studio. Я отримую таку помилку (у SSMS, що працює на сервері):

Під час виконання партії сталася помилка. Повідомлення про помилку: Виключено тип "System.OutOfMemoryException".

У системі встановлено 24 ГБ оперативної пам’яті, але для перегляду в диспетчері завдань процес sqlservr.exe використовує лише 2,9 ГБ.

Чи є десь налаштування, яке обмежує його використання оперативної пам'яті?

Відповіді:


39

Ця помилка вказує на те, що у студії управління не вистачає пам'яті, а не служби SQL Server. Навіть якщо ви встановили 64-бітний сервер SQL, виконувана програма керування студією SQL Server є 32-бітною програмою.

Це, ймовірно, викликано розміром набору результатів, який ви повертаєтеся до студії управління. Ви виконуєте щось на кшталт SELECT * FROM really_big_table? Див. Http://support.microsoft.com/kb/2874903 для отримання додаткової інформації.


19

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

Але я хочу вирішити ще одну проблему: за допомогою диспетчера завдань для оцінки обсягу пам'яті, яку використовує 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 тоді команди дещо відрізняються. Я хочу додати ще одне повідомлення до цього нижнього для тих серверів, оскільки подальші коментарі не форматуються достатньо добре, щоб розмістити тут
David Bridge

15

Так само було і зі мною. Моя студія управління SQL Server була відкрита кілька днів. Я перезапустив це, і він вирішився.


9

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

Це питання мучило мене цілими днями, і якщо чесно, то Microsoft дуже слабкий. У них дійсно має бути 64-бітний набір інструментів, оскільки ми сьогодні маємо справу з великими даними, 64-бітовими серверами та настільними середовищами.


1
У моєму випадку RedGate SQL Prompt вела боротьбу з SSMS, вбудованим у 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. Вони думають, що вирішили це в v16.5

Дивіться проблему на Connect.microsoft.com, натиснувши тут

Якщо ви встановите останню версію і у вас все ще виникають проблеми, будь ласка, проголосуйте за повторне відкриття.

SSMS v16.5 тут

Підключіть проблему із зазначенням витоку пам’яті, зафіксованого тут 16.5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.