Не удалось выделить место для объекта файловая группа primary переполнена

Обновлено: 10.05.2024

Наша база данных в настоящее время имеет размер 64 ГБ, и одно из наших приложений начало давать сбой со следующей ошибкой:

System.Data.SqlClient.SqlException : не удалось выделить место для объекта 'cnv.LoggedUnpreparedSpos'.'PK_LoggedUnpreparedSpos' в базе данных 'travelgateway' , поскольку файловая группа 'PRIMARY' заполнена. Создайте дисковое пространство, удалив ненужные файлы, отбросив объекты в файловой группе, добавив дополнительные файлы в файловую группу или включив автоматический рост для существующих файлов в файловой группе.

Я перепроверил все: всем файлам в одной файловой группе разрешено автоматически расти с разумными приращениями (100 МБ для файла данных, 10% для файла журнала), более 100 ГБ свободного места доступно для базы данных, tempdb также настроен на автоматический рост с большим количеством свободного места на жестком диске.

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

Где здесь проблема, ребята?

ОК, все заработало. Оказывается, том NTFS, на котором располагались файлы БД, был сильно фрагментирован. Остановил SQL Server, все дефрагментировал, и с тех пор все в порядке.

Рекомендуется не создавать пользовательские объекты в основной файловой группе. Когда у вас есть пропускная способность, создайте новую файловую группу и переместите объекты пользователей, оставив системные объекты первичными.

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

Возникла та же проблема, и сначала показалось, что дефрагментация работает. Но это было ненадолго. Оказывается, на сервере, который использовал клиент, был запущен Express version и на нем установлен лимит лицензирования примерно 10gb .

Таким образом, даже несмотря на то, что размер был установлен на «неограниченный», это не так.

Сделайте одно: перейдите к свойствам файлов выбора базы данных, увеличьте начальный размер базы данных и установите для первичной файловой группы автоматически увеличивающуюся группу. Перезагрузите сервер sql.

Вы сможете использовать базу данных, как раньше.

Я также столкнулся с той же проблемой, когда начальный размер dtabase установлен на 4 Гб, а автоматический рост установлен на 1 Мб. На виртуальном зашифрованном диске TrueCrypt, на котором находилась база данных, казалось, было достаточно места.

Я изменил пару вещей (выше):

  • Я переключил службу Windows для Sql Server Express с автоматического на ручного , поэтому работает только «обычный» сервер Sql. (Несмотря на то, что я использую Sql Server 2008 R2, который должен позволять 10 ГБ.)
  • Я изменил авторастание с 1 Мб на 10%
  • Я изменил размер приращения автоматического увеличения с 10% до 1000 МБ.
  • Я дефрагментировал диск
  • Я уменьшил базу данных:
    • вручную DBCC SHRINKDATABASE('. ')
    • автоматически щелкнуть правой кнопкой мыши по базе данных | "свойства" | «Автоусадка» | «Обрезать журнал на КПП»)

    Все безрезультатно (я мог вставить еще несколько записей, но вскоре столкнулся с той же проблемой). Файл подкачки, упомянутый Тобби, заставил меня попробовать виртуальный диск большего размера. (Хотя на моем диске не должно быть таких системных файлов, поскольку я часто работаю без его монтирования.)

    • Я сделал новый виртуальный диск большего размера с помощью TrueCrypt

    При этом я столкнулся с вопросом TrueCrypt, собираюсь ли я хранить файлы размером более 4 ГБ (, как показано на этот вопрос SuperUser ).

    • Я сказал TrueCrypt, что буду хранить файлы размером более 4 ГБ

    После этих двух последних у меня все было хорошо, и я предполагаю, что последний сработал. Я думаю, что TrueCrypt выбирает файловую систему exfat (, как описано здесь ), что ограничивает размер всех файлов 4 ГБ. (Так что мне, вероятно, не нужно было увеличивать диск, но я все равно это сделал.)

    Вероятно, это очень редкий пограничный случай, но, может быть, он кому-то поможет.

    Я столкнулся с той же проблемой. Причина заключалась в том, что файл виртуальной памяти «pagefile.sys» находился на том же диске, что и наши файлы данных для наших баз данных (диск D:). Он увеличился вдвое и заполнил диск, но окна не забирали его, то есть выглядело так, как будто у нас было 80 ГБ свободного места, хотя на самом деле этого не было.

    Перезапуск SQL-сервера не помог, возможно, дефрагментация даст ОС время, чтобы освободить файл подкачки, но мы просто перезагрузили сервер и вуаля, файл подкачки сжался, и все работало нормально.

    Интересно то, что в течение 30 минут, которые мы исследовали, окна вообще не вычисляли размер pagefile.sys (80 ГБ). После перезапуска окна действительно нашли файл подкачки и включили его размер в общее использование диска (сейчас 40 ГБ, что все еще слишком велико).

    Пожалуйста, проверьте тип роста файла базы данных, если он ограничен, сделайте его неограниченным

    SQL Server освобождает все страницы, которые использует таблица кучи, только при выполнении следующих условий: Произойдет удаление этой таблицы. Удерживается блокировка на уровне таблицы. Примечание. Таблица кучи - это любая таблица, не связанная с кластеризованным индексом.

    Если страницы не освобождены, другие объекты в базе данных не могут повторно использовать страницы.

    Однако при включении уровня изоляции на основе управления версиями строк в базе данных SQL Server 2005 страницы не могут быть освобождены, даже если удерживается блокировка на уровне таблицы.

    Чтобы обойти эту проблему, используйте один из следующих методов: Включите подсказку TABLOCK в оператор DELETE, если уровень изоляции на основе управления версиями строк не включен. Например, используйте оператор, подобный следующему:

    УДАЛИТЬ ИЗ TableName С (TABLOCK)

    Примечание представляет имя таблицы. Используйте оператор TRUNCATE TABLE, если вы хотите удалить все записи в таблице. Например, используйте оператор, подобный следующему:

    TRUNCATE TABLE имя таблицы

    Создайте кластерный индекс по столбцу таблицы. Дополнительные сведения о том, как создать кластеризованный индекс для таблицы, см. В разделе «Создание кластеризованного индекса» в SQL.

    Внизу ссылки вы заметите, что НЕ указано, что это применимо к SQL Server 2008, но я думаю, что это действительно так.

    Освободите место в файле, и команды снова заработают. Это все, наслаждайтесь

    Наша проблема заключалась в том, что на жестком диске не хватало свободного места.

    наша база данных в настоящее время находится на 64 Гб, и одно из наших приложений начало терпеть неудачу со следующей ошибкой:

    System.Data.SqlClient.SqlException : не удалось выделить место для объекта 'cnv.LoggedUnpreparedSpos'.'PK_LoggedUnpreparedSpos' в базе 'travelgateway' , потому что 'PRIMARY' файловая группа находится в полном объеме. Создайте на диске путем удаления ненужных файлов, удалив объекты в файловой группе, добавив дополнительные файлы в файловую группу или указав параметр автоматического увеличения размера для существующих файлов в файловой группе.

    Я дважды проверил все: все файлы в одной файловой группе могут автоматически расширяться с разумным шагом (100 Мб для файла данных, 10% для файла журнала), для базы данных доступно более 100 Гб свободного места, tempdb настроен на автозапуск, а также с большим количеством свободного места на жестком диске.

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

    где здесь проблема, ребята?

    хорошо, он работает. Оказывается, что Том NTFS, где находились файлы БД, получил сильно фрагментирован. Остановил SQL Server, дефрагментировал все это, и с тех пор все было в порядке.

    рекомендуется не создавать пользовательские объекты в основной файловой группе. При наличии полосы пропускания создайте новую файловую группу, переместите пользовательские объекты и оставьте системные объекты в основном.

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

    столкнулся с той же проблемой, и сначала дефрагментация, казалось, работала. Но это ненадолго. Получается сервер клиент использовал, управлял Express version и это имеет предел лицензирования около 10gb .

    поэтому, хотя размер был установлен на "неограниченный", это не было.

    Я также столкнулся с той же проблемой, где начальный размер dtabase установлен в 4Gb, а autogrowth установлен на 1Mb. Виртуальный зашифрованный диск TrueCrypt, на котором находилась база данных, казалось, имел много места.

    Я изменил пару (выше) вещи:

    • Я превратил службу Windows для Sql Server Express из автоматическая to руководство, таким образом, работает только "обычный" Sql Server. (Несмотря на то, что я запускаю Sql Server 2008 R2, который должен позволить 10 ГБ.)
    • Я изменил авторасширение от 1 МБ до 10%
    • Я изменил увеличение размера авторасширение от 10% до 1000 МБ
    • Я дефрагментировал диск
    • я сократил базу данных:
      • вручную DBCC SHRINKDATABASE('. ')
      • автоматически щелкните правой кнопкой мыши на базе данных | "свойства" | "автоматическая усадка" | "усечь журнал на контрольной точке")

      все безрезультатно (я мог бы вставить еще несколько записи, но вскоре столкнулись с той же проблемой). Файл подкачки, упомянутый Тобби, заставил меня попробовать больший виртуальный диск. (Хотя мой диск не должен содержать таких системных файлов, так как я работаю без его монтирования много времени.)

      • Я сделал новый большой виртуальный диск с TrueCrypt

      при создании этого я столкнулся с TrueCrypt-вопросом, если я собираюсь хранить файлы размером больше 4 ГБ (как показано в этом суперпользователя вопрос).

      • Я сказал TrueCrypt, что буду хранить файлы размером больше 4 ГБ

      после этих последних двух я был в порядке, и я предполагаю, что этот последний сделал свое дело. Я думаю, что TrueCrypt выбирает exfat файловой системы (как описано здесь), которая ограничивает все файлы до 4 ГБ. (Так что мне, вероятно, не нужно было увеличивать диск в конце концов, но я все равно сделал.)

      Это, вероятно, очень редкий случай границы, но, возможно, это это кому-то помогает.

      сделать одну вещь, перейти к свойствам базы данных выберите файлы и увеличьте начальный размер базы данных и установите первичную файловую группу как autoincremented. перезапустить SQL Server.

      вы сможете использовать базу как и раньше.

      Я только что столкнулся с той же проблемой. Причина в том, что файл виртуальной памяти " - файл подкачки.sys " был расположен на том же диске, что и наши файлы данных для наших баз данных (D: drive). Он удвоился в размере и заполнил диск, но windows не собирала его, т. е. казалось, что у нас было 80 ГБ бесплатно, когда мы на самом деле этого не делали.

      перезапуск SQL server не помог, возможно, дефрагментация даст ОС время, чтобы освободить файл подкачки, но мы просто перезагрузили сервер и вуаля, файл подкачки сократилась и все работало нормально.

      интересно то, что в течение 30 минут, которые мы исследовали, windows не рассчитала размер файла подкачки.представление SYS на всех (80Гб). После перезагрузки windows нашла файл подкачки и включила его размер в общее использование диска (Теперь 40gb - который все еще слишком большой).

      пожалуйста, проверьте тип роста файла базы данных, если его ограничение делает его неограниченным

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

      Если страницы не освобождены, другие объекты в базе данных не могут использовать страницы.

      однако при включении уровня изоляции на основе управления версиями строк в База данных SQL Server 2005, страницы не могут быть освобождены, даже если блокировка уровня таблицы удерживается.

      чтобы обойти эту проблему, используйте один из следующих методов: Включите подсказку TABLOCK в инструкцию DELETE, если строка уровень изоляции на основе управления версиями не включен. Для например, использовать утверждение, похожее на следующее:

      удалить из TableName с (TABLOCK)

      - Это имя таблицы. Используйте усечь Инструкция TABLE, если вы хотите удалить все записи в таблице. Например, используйте оператор, аналогичный следующему:

      усечь таблицу TableName

      создайте кластеризованный индекс в столбце таблицы. For more сведения о создании кластерный индекс на таблице, см. Раздел" Создание кластеризованного индекса " в SQL

      вы заметите в нижней части ссылки, что не отмечено, что это относится к SQL Server 2008, но я думаю, что это делает

      Описание ошибки:
      Клиент-серверный вариант работы базы конфигурации 1С: Комплексная автоматизация 1.1.58.3 на платформе 1С: Предприятие 8.2. Ошибка при тестировании и исправлении базы возникает в момент обновления конфигурации: В процессе обновления информационной базы произошла критическая ошибка. по причине: Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось выделить место для объекта "dbo._Reference279NG".'PK___Referen__AC8ED0C4B64C2C77' в базе данных "KA2015", поскольку файловая группа "PRIMARY" переполнена. Выделите место на диске, удалив ненужные файлы или объекты в файловой группе, добавив дополнительные файлы в файловую группу или указав параметр автоматического увеличения размера для существующих файлов в файловой группе. HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=2, Severity=11, native=1105, line=1

      Если немного углубиться в анатомию событий, прелшестовавших тестированию. То у клиента внезапно возникла проблема нумерации в документах нескольких видов ("Заказ покуателя", "Заказ поставщику", нетиповой добавленный "Наряд-заказ"). Проблема была в том, что при нумерации программа не отражала в номере префикс организации, выбранной в документе. А просто ставила один и тот же префикс (недавно созданной организации) всем документам, и с таким префиксом продолжала по нему сплошную нумерацию. Хотя проблема возникла не сразу, как новую организацию добавили в справочник "Организации".

      Было выполнено обновление нумерации с помощью штатной обработки "Настройка стратегии редактирования номеров"

      файловая группа PRIMARY переполнена Ошибка СУБД Не удалось выделить место для объекта HRESULT=80040E14

      Но выполненная операция не привела к изменениям в решении проблемы. Было принято решение выполнить "Тестирование и исправление" базы данных.

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

      Обращение к системному администратору с просьбой почистить кэш СУБД не принес ощутимых результвтов. Беглый поиск решения проблемы на форуме сайта infostart. В обсуждении обсуждался вопрос настроек базы на стороне СУБД, связанных с размером системной таблицы tempdb. Потому возник диалог с системным администратором по поводу данной настройки, включено ли у нее "Авторасширение", и какое значение увеличения указано - проценты или мегабайты.

      В разрешениях стоит пользователей, и из всех галочек стоит только одна Соединение dbo

      А у базы WSS_Content вообще в разрешениях нет пользователей

      В разрешениях стоит пользователей, и из всех галочек стоит только одна Соединение dbo

      А у базы WSS_Content вообще в разрешениях нет пользователей

      А как узнать из под какой учетки запущен

      я же писал что. бы Вы проверили:

      2. проверили, разрешено ли увеличение файлов лога и БД

      Cannot alter the user 'dbo'. (Microsoft SQL Server, Error: 15150)

      Cannot alter the user 'dbo'. (Microsoft SQL Server, Error: 15150)

      А вот это что значит. В инете ничего толкового не нашел

      Место на сервере 300Гб

      Увеличение файлов логов и баз разрешено

      О, избавился от кучи ошибок. У баз слетел владелец.

      И вот что я увидел в событиях:

      Стоит НЕ express

      Странно то, что словно действует ограничение базы в 4гб как на экспресе. Куда копать теперь, подскажите

      Код внутри файла

      USE WSS_Content
      UPDATE [SBSMONITORING].[dbo].[Settings] SET [Value] = 30 WHERE [Name] = 'CleanupPeriod'
      EXECUTE [SBSMONITORING].[dbo].[CleanupDatabase]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_WMICollectedData_5_K4_K1_K5_2] ON [dbo].[WMICollectedData] ([WMIPropertyID] ASC,[ID] ASC, [WMIInstanceID] ASC) INCLUDE ( [DateCollected]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_Reports_5_K2_K3_1_4] ON [dbo].[Reports] ([ConfigurationID] ASC, [DateGenerated] ASC) INCLUDE ([ID], [Data]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE NONCLUSTERED INDEX [_SBS_BLOG_index_WMICollectedData_5_K2D_K4_K5] ON [dbo].[WMICollectedData] ([DateCollected] DESC, [WMIPropertyID] ASC, [WMIInstanceID] ASC) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
      CREATE INDEX [_SBS_BLOG_index_Alerts_8_7_] ON [SBSMonitoring].[dbo].[Alerts] ([DefinitionID], [ComputerID]) INCLUDE ([DateOccured])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_5_1_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [WMIPropertyID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_4_1_5_2_3] ON [dbo].[WMICollectedData]([WMIPropertyID], [ID], [WMIInstanceID], [DateCollected], [StatusID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_1_3_4] ON [dbo].[WMICollectedData]([WMIInstanceID], [ID], [StatusID], [WMIPropertyID])
      CREATE STATISTICS [_SBS_BLOG_dta_stat_WMICollectedData_5_4_2] ON [dbo].[WMICollectedData]([WMIInstanceID], [WMIPropertyID], [DateCollected])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_2_1_5] ON [dbo].[WMICollectedData]([DateCollected], [ID], [WMIInstanceID])
      CREATE STATISTICS [_SBS_BLOG_stat_WMICollectedData_1_3_5_2] ON [dbo].[WMICollectedData]([ID], [StatusID], [WMIInstanceID], [DateCollected])

      Читайте также: