На системном диске недостаточно места при выполнении тяжелых запросов SQL на SQL Server 2012


14

Я довольно новичок в SQL Server 2012, я был бы признателен, если кто-то может помочь. Я восстановил копию огромной базы данных в SQL Server 2012 и попытался выполнить несколько простых запросов к ней.

Я пытаюсь выполнить запрос SELECT к таблице 136898115строк в базе данных . Этот SELECTзапрос имеет только простое WHEREпредложение. Каждый раз, когда я запускаю этот запрос, он терпит неудачу, потому что на системном диске (в разделе, где установлена ​​Windows C:\) не хватает места (в этом разделе только 6 ГБ свободного места), и я не понимаю, почему. Я определил, что моя база данных tempdb находится на другом диске, на котором имеется более 14 терабайт свободного места. Конечно, моя база данных тоже находится на другом диске.

Что заставляет мой системный раздел исчерпывать пространство? Это файл подкачки?


2
Я исчерпал пространство из системы Я использую SSMS, но это тот же компьютер. Я использую SSMS на реальном сервере SQL.
Ройв

2
Как правило, рекомендуется не запускать какие-либо другие приложения на Windows- сервере SQL Server ( не SSMS) или убедиться, что параметр max memory достаточно низок, чтобы обеспечить достаточно свободной оперативной памяти. Смотрите мой ответ здесь: dba.stackexchange.com/a/19776/2718
Джон Зигель

Ответы:


12

По умолчанию кэш результатов SSMS кешируется на диск C :. Перейдите в Инструмент \ Параметры. Смотри приложение. Измените это на другой том с большим объемом памяти, и все будет в порядке.

введите описание изображения здесь


1
Если вы выберете «Результаты в файл», то по умолчанию откроется диалоговое окно «Сохранить как». Я не думаю, что SSMS сохраняет результаты на диск по умолчанию, но я могу ошибаться.
Джон Зигель

1
Результаты, которые вы получаете в окне запроса, кэшируются в соответствии с моим постом. Проверьте свой диск, выполните большой запрос в SSMS и проверьте снова. Вы увидите потерю памяти на диске C: если не указано иное.
Эрик Хиггинс

1
это правда. это не связано с моим файлом подкачки. я переместил файл подкачки на другой диск, но на диске C: не осталось места.
Ройв

11

Хорошо, я понял это: мы с Эриком оба были правы!

  • Путь в диалоге, как я уже сказал, просто путь по умолчанию для сохранения результатов запроса.
  • Результаты запроса будут кэшируется на диск (я был неправ), но в локальном профиле временной папки ( C:\Users\<UserName>\AppData\Local\Tempв моем случае здесь). Я проверил, и, похоже, нет очевидного способа отключить это кэширование.

Итак, вынос:

  • Избегайте запуска SSMS непосредственно в окне SQL
  • Не SELECT *из огромной таблицы в SSMS, если набор результатов не может поместиться в папке профиля
  • Убедитесь, что параметр максимальной памяти SQL Server настроен правильно (это может или не может способствовать этой проблеме в отношении роста файла подкачки)

7

Я только что перенес ту же проблему. Прочитав ответы выше, я обнаружил следующее.

Инструменты | Варианты это не ответ. У меня был установлен диск Y: пока я наблюдал, как мой запрос выполнялся, а пространство на диске C: уменьшилось с 2,9 ГБ до 5,04 МБ (до того, как я убил запрос).

Поэтому я подумал, что это, вероятно, результаты кэширования (так как они очень большие, когда каждая строка, содержащая большой кусок XML) возвращается в каталог Temp, как сказал Джон, однако он не был уверен, как вы это измените.

Чтобы изменить место записи временных файлов, я открыл мои переменные окружения и отредактировал пользовательские переменные TEMP и TMP (которые оба были установлены в C: \ Temp) для записи в Z: \ Temp.

Я могу подтвердить, что после этого изменения я наблюдал, как запрос создает очень большой файл в моей папке Z: \ Temp.


Отличная информация, когда есть процесс, через который вам нужно пройти, чтобы модернизировать HD-пространство вашего vm и иметь достаточно сетевого хранилища. Мне любопытно, хотя, если у вас есть проблемы с сетью, связанные с частотой передачи файлов, может ли выйти за пределы вашей скорости запроса c: \ slow?
GibralterTop

Это 3 года назад, и я не могу точно вспомнить, как сложились обстоятельства в то время. Теперь у меня есть ноутбук с жалким количеством оперативной памяти и вычислительной мощностью, что является другой историей. Я почти уверен, что диск Z: был просто еще одним "локальным" диском на моей виртуальной машине. Не уверен, почему они не назвали его D: или E: но эта часть была вне моего контроля. Так что для меня не было проблем с сетью.
Ник Райан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.