Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
snov

Громадное время исполнения "тяжелого" скрипта

05.07.2006, 00:30. Показов 5372. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Dion (19.04.2006)


Неплохая идея, кстати. Правда я нифига в T-SQL не понимаю... А хранимые процедуры пишутся только на этом языке, или это можно как-то сделать на C#, VB.NET?




Хранимки SQL сервера пишутся только на T-SQL.

На шарпе и всем остальном пишутся только клиенты.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2006, 00:30
Ответы с готовыми решениями:

Как увеличить время исполнения скрипта?
Вот дает ошибку Fatal error: Maximum execution time of 30 seconds exceeded in z:homelocalhostwwwpriceadd_foto.php on line 11

Влияет ли канал связи на время исполнения скрипта
Здравствуйте... Есть "домашний" сервер, на котором хранится сайт: - Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8q DAV/2...

Как задать программе время исполнения и время закрытия?
Подскажите пожалуйста как можно задать время исполнения и время закрытия программы допустим нужно запустить файл start 1.txt и через...

11
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
05.07.2006, 14:23
snov (04.07.2006)
Хранимки SQL сервера пишутся только на T-SQL.
На шарпе и всем остальном пишутся только клиенты.
В MSSQL 2005 можно писать хранимые процедуры в управляемом коде.
0
Dion
25.06.2012, 02:52
Всем добрый день (впрочем, сейчас ночь...)!
У меня очередная непонятная проблема...
Значит так. Есть одна из задач некоего сайта - апдейт БД
Делается это так:
Скачиваются несколько XML-файлов, обновляемые ID прописываются в специальную таблицу, разные данные заносятся в соответствующие таблицы (структура имеет аж 3 уровня "наследования", всякие внешние ключи и т.д.).

Вносится 16000 записей по объектам такого рода, как недвижимость. Кроме основных записей вносятся где-то на 200 более записей в другие 4 таблицы и по-мелочи в таблицы всяких городов, типов, названий и т.п.

Я в отчаянии. Проект уже сегодня-завтра сдавать, всё вылизано, но апдейт на удалённом сервере тормозит несщадно, хотя у меня всё в пределах нормы. [bold]ПОЧЕМУ???[/bold]

Расклад по серверам такой.
Дома: Pentium IV 2.8 GHz, 512RAM DDR-400, ATA-133 диск, Windows XP Professional, MS SQL Server 2000 Desktop Engine, IIS 5 и .NET (но он не используется). + к этому работают всякие обычные бытовые программы, клиенты и т.п. Замечу, что базы SQL хранятся на том же диске и даже разделе, что и система, а подкачка (1Гб, постоянный) - на другом.
Время выполнения скрипта (без учёта загрузки картинок) - 3 минуты. (+ ещё 3 минуты предполагается на загрузку тормозных XML)

У заказчика: Xeon 3.2 GHz, 256 RAM (не знаю какого), какие-то виртуальные драйвы, базы и система находятся на разных разделах. Подкачка - на системном, 384-768 переменный.

Время выполнения скрипта (с загрузкой этих самых картинок) - предполагается час- полтара, ибо он всё ещё делается и работу где-то на половину/треть он сделал за полчаса.

Я понимаю, картинки - это ресурсоёмко, но картинок там на 500 МБ, скрипт оптимизирован как это только возможно вообще при работе с XML и SQL Server. Скорость соединения там высокая - около 16 МБит, хотя я так до конца её и не вычислил.

Надо опустить время полного апдейта хотя-бы до получаса - быстрый апдейт будет делаться, конечно, меньше, т.к. будут вносится только новые за день записи и удаляться старые.

Плохо ещё то, что в администрировании _серверов_ я мало что понимаю...
Собственные эмперические подозрения такие:
1. Может тормозить тот сервак, с которого забираются картинки, ибо XML, например, он выдаёт с тормозами. Если это вероятно, то это хорошо, ибо с меня ответственность слетает.
2. Может тормозить из-за каких-нибудь настроек или особенностей железа SQL Server, потому что одну из операций (которая не связана с удаленными соединениями) заполнения новых АйДишников скрипт выполняет у меня дома секунд за 20, а на том сервере - минуты за 2. Это хуже, т.к. неясно, что дальше делать кроме смены сервака.
3. Сервер ограничивает расход ресурсов.

Если смотреть на Task Manager, то он выдаёт интересные подсказки:
ВО время выполнения скрипта.
CPU Usage Av: 10%, Peak:42% в одно время и Av: 30%, Peak: 97% в другое
Networkork usage Av: 3-4%, Peak:13%
PF: 360 MB где-то.
RAM: во время выполнения достаточно быстро падает (10 МБ за 18 сек) и иногда доходит до 8 МБ и там остаётся.

Вижу, что какие-то параметры неоптимизированы, но какие? У заказчиков есть какой-то администратор, но, видимо, он этим сервером не занимался...
1 / 1 / 2
Регистрация: 05.11.2008
Сообщений: 164
25.06.2012, 12:52
16000 записей + 200 - это для сервака ерунда. Тормоза связаны не с числом записей, а как мне видится с средством, с помощью которого Вы запускаете скрипт, и которое, собственно, взаимодействует с сервером БД. Кстати, интересно узнать что за скрипт? VBS? SQL? С помощью чего Вы запускаете скрипт? wscript или еще как-то?

0
Dion
25.06.2012, 13:45
Цитата Сообщение от daarg
16000 записей + 200 - это для сервака ерунда. Тормоза связаны не с числом записей, а как мне видится с средством, с помощью которого Вы запускаете скрипт, и которое, собственно, взаимодействует с сервером БД. Кстати, интересно узнать что за скрипт? VBS? SQL? С помощью чего Вы запускаете скрипт? wscript или еще как-то?
Скрипт - это ASP (VBScript), использует adodb.connection с провайдером olesqldb. В него методом execute вносятся SQL-комманды. Буферизовать этот процесс и прогнать по одной транзакции не представляется возможным, т.к. в разные таблицы вносятся зависимые друг от друга данные и скрипт следит за IDENTITY.

То, что 16000 записей для сервака должно быть ерундой, я догадываюсь. Дома то всё быстро. Запуск обычный, через вызов по URL.
1 / 1 / 2
Регистрация: 05.11.2008
Сообщений: 164
25.06.2012, 16:04
Лучше такие задачи делать без ASP. Из-за него и тормозит. Потому что через IIS пытаетесь выполнить на SQL довольно тяжелую задачу.
Да и зачем тут ASP? Показать девочке-менеджеру, что БД проапдейтилась успешно и вывести в браузере "все OK"?
Представьте, что Ваша БД увеличилась раз так в 5. И что тогда? Полное зависание задачи?
Я б всю эту задачу сделал вообще через консольное приложение, например на VB.NET (или C#) и запускал его по расписанию - шедулером Windows - самый лучший вариант.
Еще вариант - реализовать логику в ХП на SQL и запускать эти ХП через утилитку isql через батник. Это если у вас нет обработки внешних ресурсов, например каких-нибудь файлов.
VBS+wscript.exe - не советую. Очень быстро нарветесь на те же тормоза.
0
Dion
26.06.2012, 00:45
Цитата Сообщение от daarg
Лучше такие задачи делать без ASP. Из-за него и тормозит. Потому что через IIS пытаетесь выполнить на SQL довольно тяжелую задачу.
Да и зачем тут ASP? Показать девочке-менеджеру, что БД проапдейтилась успешно и вывести в браузере "все OK"?
Представьте, что Ваша БД увеличилась раз так в 5. И что тогда? Полное зависание задачи?
Я б всю эту задачу сделал вообще через консольное приложение, например на VB.NET (или C#) и запускал его по расписанию - шедулером Windows - самый лучший вариант.
Еще вариант - реализовать логику в ХП на SQL и запускать эти ХП через утилитку isql через батник. Это если у вас нет обработки внешних ресурсов, например каких-нибудь файлов.
VBS+wscript.exe - не советую. Очень быстро нарветесь на те же тормоза.
Хмм... Ну консольное приложение на VB.NET - это интересный вариант, наверное стоит подумать... Правда ещё не факт, что я это осилю - с нормальным Visual Basic стал ознакамливаться совсе надвано и опя-таки больше в парадигме ASP.NET

Ну тогда всё равно неясно, что-ж оно у меня дома то так шустренько исполняется. Я бы не сказал, что у меня дико профессиональная машина и уж тем более, система, хотя она и затачивалась под прожорливый музыкальный софт
Dion
26.06.2012, 00:54
Увы, не нашёл редактирования...
По поводу масштабируемости - тут уже всё чуть-чуть лучше, т.к. во время планового апдейта скрипт исполняется минут за 10, т.к. происходит только удаление старья и добавление новья. Хотя и это должно быть быстрее, особенно странно то, что минуты 2 уходит на примерно такую фигню:

for each item in xml_document.childNodes
'Заполнить простую табличку id-шниками из свежего xml
sql.exec("insert into id_list value(" & item.getSingleNode("id").Text & ")")
next
'Удалить все неактуальное - может запросы у меня плохие?
sql.exec("delete from main where id not in (select id from id_list)")
1 / 1 / 2
Регистрация: 05.11.2008
Сообщений: 164
26.06.2012, 10:10
Потому что вы в цикле для каждого итема из XML вызываете БД (command.execute). Вдвойне нагружаете сервак - действуете с XML и SQL - в одном месте программы.
Не проще ли сформировать строку из Node("id").Text через запятую, закрыть XML, а потом написать одну(!) ХП и в нее (без каких-либо циклов) совать эту строку как параметр и в этой же ХП потом удалять все неактуальное.
А отличие в производительности на боевом сервере и дома только в том, что боевой загружен видимо еще какими-то процессами.
0
1 / 1 / 2
Регистрация: 05.11.2008
Сообщений: 164
26.06.2012, 10:20
еще...такие вещи как <<sql.exec("delete from main where id not in (select id from id_list)")>>
делать не совсем корректно опять же с точки зрения производительности. Пишите такие запросы через хранимые процедуры. Отличие в том , что ХП уже скомпилированы на SQL, и соответственно выполняются быстрее.
0
Dion
26.06.2012, 19:19
Цитата Сообщение от daarg
Потому что вы в цикле для каждого итема из XML вызываете БД (command.execute). Вдвойне нагружаете сервак - действуете с XML и SQL - в одном месте программы.
Не проще ли сформировать строку из Node("id").Text через запятую, закрыть XML, а потом написать одну(!) ХП и в нее (без каких-либо циклов) совать эту строку как параметр и в этой же ХП потом удалять все неактуальное.
А отличие в производительности на боевом сервере и дома только в том, что боевой загружен видимо еще какими-то процессами.
Неплохая идея, кстати. Правда я нифига в T-SQL не понимаю... А хранимые процедуры пишутся только на этом языке, или это можно как-то сделать на C#, VB.NET?
1 / 1 / 2
Регистрация: 05.11.2008
Сообщений: 164
27.06.2012, 15:25
RTFM
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2012, 15:25
Помогаю со студенческими работами здесь

Прелоада (смена курсора) во время выполнения тяжелого SQL-запроса
Здравствуйте, есть SQL-запрос, который обрабатывается довольно долго, может 10 секунд и более. В это время программа...

Ошибка во время исполнения
Добрый день. Написал программу. Когда запускаю на своем компиляторе то все работает исправно, а если загружаю на сайт, то выдает ошибку ...

Время исполнения алгоритмов
Дали задание &quot;Экспериментально сравнить реализации этих двух алгоритмов по времени исполнения на различных наборах данных, различных по...

Ошибка во время исполнения
При попытке запустить программу Visual Studio пишет: Unhandled exception at 0x011027ce in GLTore.exe: 0xC0000005: Access violation...

Ошибка во время исполнения
Здравствуйте, вылазит ошибка: Debug Assertion Failed! Expression: string subscript out of range while(getline(ffc, bffc)) { int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru