none
Как выполнить очень большой скрипт??? RRS feed

  • Вопрос

  • Пытаюсь выполнить очень большой скрипт в 183653 строчки, содержит 45910 инструкция INSERT, MS SQL Server 2008  от 7 до 20 секунд где то оценивает скрипт а потом выдаёт ошибку:   "Сообщение 701, уровень 17, состояние 123, строка 251497
    There is insufficient system memory in resource pool 'internal' to run this query.
    ", Конечно я понимаю что ему памяти не хватает, разве нельзя выполнить из файла или ещё как нибудь, просто у меня программа пыталась выполнить этот скрипт напрямую, естественно я попробовал и через MS SQL Server Management Studio, выпадает с этой же ошибкой, пробовал и на Express, и на Developer, и на Standart выпадает с той же ошибкой.

    Я уже задавал на этом форуме вопрос по поводу максимального размера скрипта который может выполнить за раз MS Sql Server, у меня размер файла 20 Мб +/- 0,5 Мб, мне тогда ответили что можно до 300 Мб и дали ссылку на  MSDN  "http://social.msdn.microsoft.com/Forums/ru-RU/sqlserverdiscussionsru/thread/0dbde5e9-a6e1-460c-affa-49ee0bbbcaa4"    где если посчитать - то выходит что скрипт может весить до 250 Мб! ну я и поверил, даже почти забыл, но как только мне представилась возможность я сразу же проверил - и был жестоко огорчён!

    ЗАДАЮ ВОПРОС ОПЯТЬ, Есть ли ограничения на размер выполняемого скрипта (ограничения как на размер скрипта так и на число инструкций)

    • Перемещено SachinW 2 октября 2010 г. 0:12 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    24 сентября 2010 г. 12:58

Ответы

Все ответы

  • Попробуйте сперва выполнить:

    DBCC FREESYSTEMCACHE ('ALL') 
    DBCC FREESESSIONCACHE
    DBCC FREEPROCCACHE 
    

    У вас куски кода не делятся через GO ? Больше на глюк похоже =)))

     


    http://www.t-sql.ru
    24 сентября 2010 г. 13:43
    Модератор
  • Вообще по идее, если куски скрипта не разделены словом GO, то возникает совсем другая ошибка. Но разделить столько инструкций INSERT с помощью GO все-таки стоит, как сказал Алексей.

    24 сентября 2010 г. 19:07
  • Да в том то и дело что не могу я разделить с помощью GO т.к. GO это пакетный разделитель самого  Management Studio, если я попытаюсь выполнить скрипт с этой инструкцией из внешних утилит то соответственно MS SQL Server выдаст мне ошибку - неизвестный оператор или что то  в этом роде. Под внешними утилитами я подразумеваю программу свою, которая через DataSet пытается выполнить весь этот скрипт - он заключён в одну транзакцию, т.к. если при последней вставке записи произошла ошибка - то откатить нужно весь скрипт(пакет) (я просто попробовал через Management Studio выполнить тот скрипт - и он выдал ту же ошибку). Аклексей спасибо за идею про очистку кэша, посмотрю можно ли это использовать, но и это тоже не выход из положения, т.к. возникает опять тот же вопрос "сколько инструкций или какой размер скрипта можно выполнить за раз?"
    25 сентября 2010 г. 12:13
  • Все инструкции инсерт отделены друг от друга   ;   , так что не помогло! просто может виной какие нибудь настройки SQL Server, потому что зачем он держит в памяти вставленные записи, но даже если он их и держит - то не понимаю почему так много памяти ест

     

    Да вот о чём забыл упомянуть - если попытался выполнить этот скрипт - то память мгновенно съедается  до 1,5 Гб  (максимальный размер выставленный в настройках) на Нашем сервере где стоит стандарт и выставлены 4 Гб - съедает все 4, НЕУЖЕЛИ ДЛЯ ВЫПОЛНЕНИЯ СКРИПТА РАЗМЕРОМ В 20 Мб нужно расходовать 4 Гб памяти, для того чтобы обработать скрипт размером в 1 Мб тратится свыше 200 Мб памяти - многовато!

    25 сентября 2010 г. 12:46
  • раз мне не кто не может ответить на текущий вопрос то вернусь к первоначальному вопросу: Какой максимальный размер выполняемого SQL скрипта (ограничение и на количество инструкций или на количество символов или на размер скрипта)? Уточняю - скрипт не обязательно должен выполняться из MS SQL Server - в котором можно использовать пакетный разделитель, а из сторонних утилит, в частности меня интересует TADOQuery, компонент  Delphi - конечно понимаю что последний вопрос уже не в здесь нужно задавать - ну вдруг кто  то уже делал, на него не прошу отвечать.

    За любые ответы буду благодарен!

    27 сентября 2010 г. 8:41
  • Смотрите Длина строки, содержащей инструкции SQL в статье:

    Задание максимальной вместимости SQL Server


    Gruß Yury

     

    • Помечено в качестве ответа I.Vorontsov 14 октября 2010 г. 8:32
    27 сентября 2010 г. 10:57