Есть приложение на VB6 которое объединяет запуск нескольких сторед процедур MS SQL Server 2000.
Работа этих процедур весьма длительна, порядка 2-3 суток. Компьютер на котором это работает используется в рабочее время и для других задач, но когда запущено данное приложение все тормозит. Поэтому вопрос — как программно понизить приоритет моего приложения чтобы он не мешал другим ?
Хм. А зачем собственно приложение? Зачем ему несколько суток висеть в памяти?
В таких случаях чаще всего можно сделать job или аналогичный сугубо серверный процесс. А приложением подсоединиться через трое суток и посмотреть результаты.
PT>Работа этих процедур весьма длительна, порядка 2-3 суток. .........Поэтому вопрос — как программно понизить приоритет моего приложения чтобы он не мешал другим ?
Так кто все-таки тормозит? Само приложение или хранимые процедуры, т.е. MSSQL?
Здравствуйте, Softwarer, Вы писали:
s>В таких случаях чаще всего можно сделать job или аналогичный сугубо серверный процесс. А приложением подсоединиться через трое суток и посмотреть результаты.
Здравствуйте, Igor Trofimov, Вы писали: iT>Само приложение или хранимые процедуры, т.е. MSSQL?
Тормозят именно хранимые процедуры, они занимают примерно 85% всего времени. Приложение делает вспомогательную, хотя и нужную работу. Обрабатывает входные параметры и на основании их выпоняет ряд запросов и некоторую предобработку, достаточно сложную, объединяет вызовы этих хранимых процедур, и выдает конечный результат — ряд текстовых файлов. Многие задачи не получается сделать на чистом SQL в хранимых процедурах.
А что такое job ?
Здравствуйте, PavelT100, Вы писали:
PT>Тормозят именно хранимые процедуры, они занимают примерно 85% всего времени. Приложение делает вспомогательную, хотя и нужную работу. Обрабатывает входные параметры и на основании их выпоняет ряд запросов и некоторую предобработку, достаточно сложную, объединяет вызовы этих хранимых процедур, и выдает конечный результат — ряд текстовых файлов.
Хм. Переформулируя то же самое: сначала приложение формирует некоторую стартовую информацию, потом запускает двухсуточные серверные операции, выступая их координатором, потом берет результаты и записывает их в файлы.
Иначе говоря, приложение если нужно, то только в начале всей процедуры и в конце. В середине оно нафиг не сдалось — хранимый код ничуть не хуже способен выступить координатором.
PT>Многие задачи не получается сделать на чистом SQL в хранимых процедурах.
У меня нет опыта работы на T-SQL, но все же кажется, что "не получается" здесь скорее означает "не пробовали".
Впрочем, насколько я знаю, MSSQL умеет подключать внешние процедуры, что вполне позволяет решить задачи, плохо решаемые собственно SQL-ем.
PT>А что такое job ?
Либо меня подло обманули и MSSQL этого не умеет, либо же в Books Online найдется подробный ответ на этот вопрос.
Здравствуйте, PavelT100, Вы писали:
PT>Есть приложение на VB6 которое объединяет запуск нескольких сторед процедур MS SQL Server 2000. PT>Работа этих процедур весьма длительна, порядка 2-3 суток. Компьютер на котором это работает используется в рабочее время и для других задач, но когда запущено данное приложение все тормозит. Поэтому вопрос — как программно понизить приоритет моего приложения чтобы он не мешал другим ?
если это не военная тайна, раскажите, пожалуйста, какие объемы информации обсчитываются и ТТХ сервера, что у Вас уходит на это 2-3 суток. Или же все это, включая сам сиквел крутиться на одной рабочей станции?
ЗЫ. А на счет джобов (jobs) Softwarer абсолютно прав.
Здравствуйте, pkarklin, Вы писали:
P>какие объемы информации обсчитываются и ТТХ сервера, что у Вас уходит на это 2-3 суток. Или же все это, включая сам сиквел крутиться на одной рабочей станции?
Объемы такие — сама база данных SQL Server если ее бекапить занимает 2.5 GB. Таблиц порядка 50, одна таблица основная с которой идет работа имеет на текущий момент порядка 10 млн. записей по 3 целых числа каждая.(Одна загрузка данных из файлов FOXPRO на SQL Server занимает около часа) Сервер — 512MB оперативной памяти и 800 MГц.Алгоритм который представлен хранимыми процедурами заключается в том чтобы исключить довольно избыточную информацию в этой большой таблице. Мне удается сейчас превратить 10 000 000 записей в ~130 000. Этот алогритм сам по себе мог бы быть предметом обсуждения, но сейчас у меня другие проблемы и не хочется уходить от их сути. Приложение крутится на сервере, то есть на том же компьютере на котором установлен MS SQL Server 2000.
Я сейчас выхожу из положения запуская приложение в пятницу вечером, но не всегда в понедельник утром все заканчивается, хотя иногда заканчивается и к утру воскресенья.
Пытаться переписывать куски которые написаны на VB6 на SQL или вообще что-то кардинально переделывать не хочется. Неужели нет простых решений кроме jobs ? Тогда, конечно, буду их пытаться изучать.
Здравствуйте, PavelT100, Вы писали:
PT>Неужели нет простых решений кроме jobs ? Тогда, конечно, буду их пытаться изучать.
Хм. Знаете... возможно, простым решением детально рассказать тому же pkarklin о Вашей задаче и Ваших таблицах. Довольно велика вероятность того, что в результе трое суток превратятся в три часа, если не в тридцать минут.
Здравствуйте, PavelT100, Вы писали:
PT>Пытаться переписывать куски которые написаны на VB6 на SQL или вообще что-то кардинально переделывать не хочется. Неужели нет простых решений кроме jobs ? Тогда, конечно, буду их пытаться изучать.
Вопрос как понизить приоритет. В описании на sp_add_jobstep есть параметр @os_run_priority, но про него сказано, что он Reserved. В SQL-DMO есть свойство OSRunPriority у объекта JobStep.
Здравствуйте, algol, Вы писали:
A>Вопрос как понизить приоритет.
MSSQL не умеет работать с приоритетами запросов. Да и вообще, в силу ряда причин, игра с приоритетами в БД приносит больше вреда чем пользы, и может быть оправдана только для Read Only транзакций, желательно версионных и только на понижение.
Здравствуйте, PavelT100, Вы писали:
PT>Объемы такие — сама база данных SQL Server если ее бекапить занимает 2.5 GB. Таблиц порядка 50, одна таблица основная с которой идет работа имеет на текущий момент порядка 10 млн. записей по 3 целых числа каждая.(Одна загрузка данных из файлов FOXPRO на SQL Server занимает около часа) Сервер — 512MB оперативной памяти и 800 MГц.Алгоритм который представлен хранимыми процедурами заключается в том чтобы исключить довольно избыточную информацию в этой большой таблице. Мне удается сейчас превратить 10 000 000 записей в ~130 000. Этот алогритм сам по себе мог бы быть предметом обсуждения, но сейчас у меня другие проблемы и не хочется уходить от их сути. Приложение крутится на сервере, то есть на том же компьютере на котором установлен MS SQL Server 2000. PT>Я сейчас выхожу из положения запуская приложение в пятницу вечером, но не всегда в понедельник утром все заканчивается, хотя иногда заканчивается и к утру воскресенья. PT>Пытаться переписывать куски которые написаны на VB6 на SQL или вообще что-то кардинально переделывать не хочется. Неужели нет простых решений кроме jobs ? Тогда, конечно, буду их пытаться изучать.
Сервер, конечно, не слишком силен. Но вот фраза "переписывать куски которые написаны на VB6 на SQL" может говорить о том, что Вы, вместо того, чтобы обрабатывать данные только серверной части (T-SQL), гоняете их между сервером и клиентом да и наверняка используете навигационный подход. Ибо я не представляю чем можно заниматься 3 суток с таблицей из 10 000 000 записей по 3 int поля. Даже на таком слабом оборудовании.
Так что давайте забудем про сабжевые "приоритеты" (с которыми вы уже и на SQL.RU отметились и получили теже самые рекомендации ) и займемся оптимизацией Вашего алгоритма. Если Это конечно для Вас актуально.
Здравствуйте, pkarklin, Вы писали:
P> Вы, вместо того, чтобы обрабатывать данные только серверной части (T-SQL), гоняете их между сервером и клиентом да и наверняка используете навигационный подход.
Нет, конечно, на клиентское приложение VB6 "гоняет" некоторе количество данных с сервера к себе, его слегка обрабатывает и записывает обратно на сервер. Но это делается по необходимому минимуму, не занимает много времении не является предметом обсуждения. Все о чем идет речь, о хранимой процедуре которая запускается из VB6 примерно так:
Dim cmd As New ADODB.Command
cmd.ActiveConnection = cnnPBD
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_GlobalOptimIntercip"
cmd.CommandTimeout = 0
cmd.Execute
выполняется 85% времени и к приложения за это время не обращается. Данные туда сюда не гоняет.
Мой вопрос заключался в том, чтобы как то понизить приоритет выполнения этой самой процедуры.
Здравствуйте, PavelT100, Вы писали:
PT>Здравствуйте, pkarklin, Вы писали:
P>> Вы, вместо того, чтобы обрабатывать данные только серверной части (T-SQL), гоняете их между сервером и клиентом да и наверняка используете навигационный подход.
PT>Нет, конечно, на клиентское приложение VB6 "гоняет" некоторе количество данных с сервера к себе, его слегка обрабатывает и записывает обратно на сервер. Но это делается по необходимому минимуму, не занимает много времении не является предметом обсуждения. Все о чем идет речь, о хранимой процедуре которая запускается из VB6 примерно так: PT>
PT> Dim cmd As New ADODB.Command
PT> cmd.ActiveConnection = cnnPBD
PT> cmd.CommandType = adCmdStoredProc
PT> cmd.CommandText = "sp_GlobalOptimIntercip"
PT> cmd.CommandTimeout = 0
PT> cmd.Execute
PT>
PT>выполняется 85% времени и к приложения за это время не обращается. Данные туда сюда не гоняет. PT>Мой вопрос заключался в том, чтобы как то понизить приоритет выполнения этой самой процедуры.
Вам уже на 2х форумах сказали, что сиквел не имеет возможности понижать приоритеты. Но решить проблему быстродействия Ваше процедуры возможно получиться переписав ее.
Здравствуйте, PavelT100, Вы писали: PT>выполняется 85% времени и к приложения за это время не обращается. Данные туда сюда не гоняет. PT>Мой вопрос заключался в том, чтобы как то понизить приоритет выполнения этой самой процедуры.
Не надо ее приоритет понижать. Надо предоставить текст процедуры в студию. Есть ненулевая вероятность, что первые же рекомендации сократят время ее выполнения до более приемлемого.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, PavelT100, Вы писали:
Может проще дать исходник процедур в студию? Не могу понять
что можно делать так долго с всего со 130 тыс. (судя по Вашим пред. постам) записей.
PT>Есть приложение на VB6 которое объединяет запуск нескольких сторед процедур MS SQL Server 2000. PT>Работа этих процедур весьма длительна, порядка 2-3 суток. Компьютер на котором это