#c# #.net #web-crawler #sql-server-express
#c# #.net #веб-сканер #sql-server-express
Вопрос:
У меня есть проект, который мне удалось сохранить с сервера, переданного на аутсорсинг, и мне удалось заставить большую его часть работать на одном из ноутбуков, которые есть у меня дома. Она имеет ОС Win 8.1r, VS 2017, SQL Server Express 2017, и я написал DLL, которую использую в своем приложении, на C # .NET версии 4.6.1.
В настоящее время я каждую ночь в полночь вручную запускаю некоторые сохраненные процедуры, которые заполняют некоторые таблицы статистики из-за отсутствия агента MS в SQL Server Express, затем запускаю процедуру обслуживания индекса, которая либо ПЕРЕСТРАИВАЕТ, либо ДЕФРАГМЕНТИРУЕТ индексы, плюс перестраивает статистику, прежде чем я вручную перезапущу бота из командной строки сразу после полуночи.
Однако я заметил, что если я оставляю ноутбук включенным на 3-5 дней, время, затрачиваемое на каждый запуск (в среднем), 40 гонок и 5-20 бегунов на гонку, проходящих через прокси, становится все медленнее и медленнее. Я только что перезагрузился, так как прошлой ночью сканирование с регулярным выражением для получения информации и сохранения в DB races and runners заняло с 1 до 11 часов ночи.
Однако, если я посмотрю на время создания, которое я сохраняю в каждой новой гонке, я увижу закономерность..
Вчера потребовалось 10 часов, чтобы выполнить 40 гонок и runners, в субботу потребовалось 4 часа, чтобы выполнить 50 гонок и runners, в пятницу 3 часа 49 гонок, в четверг 5 часов 42 гонки, в среду 5 часов 32 гонки, во вторник 1 час 36 гонок
Очевидно, что со временем в БД сохраняется все больше и больше гонок и бегунов, поэтому время извлечения из индексов, хранилища и т.д. Увеличивается, Но после перезагрузки все происходит быстро, Гарри, я только что перезапустил его сегодня вечером, перестроил индексы, затем отпустил, и он уже провел 7 гонок за 7 минут.
Очевидно, что у меня нет сервера для установки этого, последняя попытка привела к тому, что старый босс поместил это на французский сервер, который не разрешает доступ к сайтам онлайн-ставок, а мой бот использует Betfair API.
На моем ноутбуке все работает нормально, за исключением того, что скорость загрузки всех рас и бегунов в базу данных со временем увеличивается. Чем дольше я оставляю ее включенной, тем больше времени это занимает, несмотря на все операции очистки, которые я выполняю по ночам (удаляю старые сообщения журнала, блокировки и перестраиваю таблицы статистики перед выполнением задания переиндексации / дефрагментации).
-По какой-то причине файл журнала, в который я вывожу отладочные сообщения для постфактумной отладки, например, я ищу ошибки SQL, ошибки подключения, проблемы с прокси, ошибки регулярных выражений и я вывожу это через консольное приложение, с которым я использую DLL в данный момент, в файл журнала в C:programdatamyprojlogfile.txt — у него есть разрешения на запись в файл, однако после завершения работы, если я попытаюсь открыть его в моем стандартном редакторе — Editplus, он просто откроет пустой документ. Если я сначала открою ее в блокноте, я смогу увидеть всю отладку, а затем скопировать и вставить ее в пустой документ Editplus.
На моем рабочем КОМПЬЮТЕРЕ такого никогда раньше не было, разрешения в порядке, файл записывается, и я не получаю никаких «отказано в разрешении» или других ошибок ввода-вывода при открытии файла журнала, он просто пустой, если я не открываю его в Блокноте.
Итак, я хотел бы знать, какие действия выполняются, чтобы замедлить эту работу со временем, которое исправляет перезагрузка. Я знаю старую поговорку, которую мы слышали от наших технарей, когда у нас была ошибка или неполадка с нашими компьютерами на работе: «вы пробовали включать и выключать ее снова», — которая по какой-то причине устраняет так много проблем.
Я просто хотел бы знать, какие проблемы могут возникать, чтобы замедлить работу в течение нескольких дней, когда я, возможно, мог бы автоматизировать работу по очистке, чтобы этого не произошло. Раньше я запускал точно такой же код на своем рабочем компьютере, подключенном удаленно к серверу, каждый день в течение нескольких месяцев, прежде чем был вынужден выполнять перезагрузки из-за обновлений Windows. Раньше этого никогда не случалось из-за моей плохой практики на работе постоянно оставлять компьютер включенным.
Фрагментируется ли диск — и почему для решения этой проблемы после перезагрузки не требуется дефрагментация диска. Реестр? Что может со временем становиться все хуже и хуже, что исправляет перезагрузка. Или это тот факт, что я использую MS SQL Express 2017 и есть какая-то проблема ввода-вывода с файлами, в которые он записывает, которая со временем замедляется.
Я просто хотел бы иметь возможность оставлять свой ноутбук включенным, когда этот бот работает в определенное время в течение дня, и не беспокоиться о том, что на выполнение первого задания импорта уйдет 11 часов.
Прошло 37 минут, работает 20 минут, импортировано 15 гонок и бегунов, около четверти от общего количества, так что должно быть закончено примерно через час сегодня вечером, и я ТОЛЬКО что перезапустил свой ноутбук, больше ничего, и это ускорило его с 10 часов вчерашней ночи?
Что может замедлять это во время работы, и могу ли я это вообще исправить?
Комментарии:
1. Сделайте шаг назад, профилируйте свое приложение
2. Это то, что я пытаюсь сделать, единственное отличие в том, что код запускается на моем ноутбуке с помощью MS SQL Express и вручную с консоли в полночь, а не на сервере в качестве службы Windows. Вся статистика, перестройка индекса и т.д. Были автоматизированы на сервере, но обход все еще выполнялся с моего офисного компьютера. Все, что я вижу, это временные метки в моем файле журнала, когда я, наконец, копирую и вставляю из notepad в Editplus (почему?), вокруг вызовов сохраненных процедур — save_race save_runner и т.д., Которые становятся все длиннее и длиннее. Перезагрузка решает все. Эта ночная работа уже завершена. вчера прошло 10 часов.
3. Если я правильно понимаю вашу проблему, вы профилировали свой sql server? знаете ли вы, какие запросы занимают больше всего времени. что происходит, когда вы запускаете эти запросы отдельно и профилируете их, что говорится в плане запроса.
4. Кое-что, о чем следует помнить.. MS SQL Server, как только он получает память, он не освобождает ее. Если вы не ограничили объем, на который она может претендовать, возможно, вам не хватает памяти.
5. На вашем ноутбуке запущено антивирусное программное обеспечение? Это может снизить производительность даже сервера, так что, скорее всего, это виновник.