sql server 2005 sp3 недостаточная память для запуска задачи запроса

Я пытаюсь выполнить обширный запрос с близкими к 200 внутренними соединениями в базе данных. Это дает мне следующую ошибку

Msg 701, Level 17, State 123 Line 1 

Я запускаю базу данных на двухъядерном 2,7 ГГц компьютере с 2 ГБ оперативной памяти. Есть ли способ получить этот запрос?

200 соединений на самом деле очень распространены, если вы попадаете в ловушку EAV . Если у вас есть одно лицо с 200 столбцами, для вас 200 штук!

Конечно, SQL Server не имеет проблем с 200 объединениями, но, вполне возможно, он просчитывает объем необходимой памяти. Это особенно вероятно для hash joins , которые используют торговую память для повышения производительности. Таким образом, первым шагом было бы заменить все соединения на объединения циклов, например, inner loop join . Для соединения цикла требуется очень мало памяти.

Если это не сработает, посмотрите на план выполнения. Реальный план, вероятно, не пропустит мимо ошибки памяти, но вы можете увидеть примерный план выполнения:

 SET SHOWPLAN_ALL ON 

Из документации:

Когда SET SHOWPLAN_ALL включен, SQL Server возвращает информацию о выполнении для каждого оператора без его выполнения, а инструкции Transact-SQL не выполняются

Это может дать представление о том, что планирует делать SQL.

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

Спецификации максимальной емкости для SQL Server

 Columns per SELECT statement 4,096 REFERENCES per table 253 Tables per SELECT statement Limited only by available resources 

Просто из любопытства все ваши поля FK индексируются?

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

Interesting Posts

Возврат SQL Server 1 строка за лодку

Считайте тот же столбец идентификатора с другим условием в том же самом выражении select

Можно ли обнаружить курсоры (вложенные курсоры) в коде T-SQL?

Autogenerate GUID, который не является первичным ключом в Entity Framework

Невозможно создать базу данных на удаленном сервере с помощью Entity Framework 5.0

Использование идентификатора GUID FILESTREAM SQL Server в качестве первичного ключа

Возврат нескольких значений XML в SQL с помощью STUFF

Мне нужна совместимая с SQL Server 2000 альтернатива этому запросу CTE

Возвращать несколько результатов в зависимости от поля Quantity

Вставить пустое значение в базу данных SQL Server

Могу ли я использовать ALTER существующую схему таблицы, используя сценарий после развертывания?

выбрать случай, когда выбрать запрос

Производительность вычисляемых столбцов

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

Не удалось получить результат хранимой процедуры в переменной?

Давайте будем гением компьютера.