2013-05-15 3 views
1

мне нужно запустить «большой» сценарий на SQL Server 2008 R2, экспресс и не удается сБольшой сценарий неудачу на SQL Server 2008 R2 Экспресс

Существует недостаточно системной памяти в пуле ресурсов «внутренний» в выполните этот запрос.

Сценарий вокруг 10MB сохраняется на диске, содержит около 54000 заявлений на высшем уровне (вставка/удаление/обновление) и объявляет о 5000 переменных (типа BIGINT).

Я запускаю SQL Server 2008 R2 Express 64bit 10.5.1746. Для VM выделено 3 ГБ, 1 ГБ выделено SQL Server, минимальная память 512 Кбайт на запрос. Результаты DBCC MEMORYSTATUS можно найти на this link.

Сценарий - это просто восстановление базы данных о производстве (легкая), которая была экспортирована в виде операторов SQL (только для данных, без схемы).

Если это невозможно сделать, я шокирован тем, что SQL Server не может справиться с таким базовым сценарием. Я тестировал этот эквивалентный сценарий на Firebird и Sqlite, и он работал отлично! (и они являются продуктами с открытым исходным кодом).

ПРИМЕЧАНИЕ: невозможно разбить скрипт, поскольку переменные, объявленные в начале, ссылаются в конце скрипта.

УКАЗАНИЕ: Прежде чем спешить, чтобы отметить это как «дубликат», обратите внимание, что другие подобные потоки не затрагивают конкретную проблему «Как запустить очень большой скрипт в SQL Server 2008».

+0

У вас есть пакет обновления 1 (SP1) для SQL Server (см. Http://support.microsoft.com/kb/982854)? – rsbarro

+0

@rsbarro: У меня R2 установлен с исправлением статей. Все еще не удается. –

+1

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

ответ

0

Единственное, что до сих пор работало, - это обновление до SQL Server 2012 Express. Запрос выполнялся несколько минут, но делал это полностью и без ошибок.

0

SQL Server Express ограничен объемом памяти, который он может использовать. Из этой памяти для выполнения запросов может использоваться только часть. Вы можете попробовать установить принудительную параметризацию в базе данных, так как это может уменьшить объем памяти, необходимый для плана, который оставит больше для выполнения запроса (зависит от ваших конкретных запросов).

Лучшим вариантом является использование выпуска SQL Server, который поддерживает больше памяти. Издание разработчика доступно, но не может использоваться для использования в производстве. Стандартная версия будет вашим лучшим выбором.

+0

Принудительная параметризация не работает. Как вы думаете, SQL Server 2012 Express может справиться с этим сценарием? –

+0

Наверное, нет. Вам придется использовать другое издание, чем Express. – StrayCatDBA

+0

Он работает в SQL Server 2012 Express. –

Смежные вопросы