powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зависает sql server при запуске двух разных приложений
21 сообщений из 21, страница 1 из 1
Зависает sql server при запуске двух разных приложений
    #38719328
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структура такая:
есть сервер на нем висит база (MSSQL) и сайт (ASP.Net)
по расписанию запускаются некоторые сервисы по обработке данных в базе - обычные exe-шники, один из которых производит достаточно много операций записи + чтения + обновления, а другой просто читает определенный объем данных и пишет в файл. Объемы: порядка 400 000 - 600 000 строк в таблице в которой около 50 полей.

Первый сервис (который пишет) отрабатывает примерно за 10 часов (так долго потому что еще есть обработка фотографий), и если в этот интервал запускается второй, то sql-сервер перестает отвечать на запросы из asp-приложения.

очень неприятно когда твой сайт зависает на несколько часов в день.

Что служит причиной? Даже не знаю в какую сторону копать.
Заранее спасибо!
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38719345
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с блокировками разбирайтесь на сервере SQL
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38719643
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semyglassодин из которых производит достаточно много операций записи + чтения + обновления

1) Этот вопрос нужно перекинуть в соответствующую ветку форума. Там очень компетентные спецы сидят
2) Нужно привести структуру таблицы, текст запросов на чтение, обновление данных, планы запросов
3) Обработку фотографий выносите за пределы транзакции на обновление, проводите её заранее

Далее, вполне возможно, что у вас поиск существующей записи происходит не по индексу, или его вообще нет. Тогда понятно, что блокировки идут на уровне таблицы, и скрипт чтения не может получить данные из-за Table Scan

Мои общие рекомендации (с учетом того, что конкретики нет):
1) Разобраться с индексами
2) Сделать предварительный экспорт данных в отдельную таблицу, а потом смержить её с основной
3) Уменьшить время экспорта данных вынесением за его рамки любой обработки данных, тем более фотографий
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38719767
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Я бы расписал подробнее весь алгоритм работы, но это займет у меня несколько часов и на выходе получится "портянка" которую никто читать не будет.

А как надо разобраться с индексами если поиск ведется практически по всем полям? Надо все добавить в индекс?

Я думал про некую временную таблицу, но мне показалось что это очень усложнит процесс, т.к. запись идет в несколько таблиц одновременно + во время записи, если произошла ошибка, то выполняется один сценарий, если нет, то другой, и мне нужно на выходе получить отчет о каждой транзакции, чтобы отдать его клиенту, т.е. мне нужно на бекенде видеть результат каждой операции.

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

Спасибо!
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38719827
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semyglass,

Такое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше.

Причина, скорее всего, в неоптимальных запросах, которые читают (и блокируют) слишком много.

Могу исправить проблемы за вознаграждение.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720352
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas,

ну а что делать, если мне надо и читать и писать очень много?
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720365
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semyglassесли мне надо и читать и писать очень много?читать и писать можно по-разному, необходимо избегать блокировок при этом, которые не дают работать другим операциям чтения-записи.

Вы задаете слишком общие вопросы - вы не получите на них конкретных ответов. К тому же задаете их не в том форуме.
Необходимо либо самому погрузиться в мир оптимизации работы SQL-сервера (а это не опишешь в двух словах, на эту тему написаны горы литературы), либо нанять опытного специалиста, который, вполне возможно, за пару часов найдет несколько узких мест и предложит пути решения. Но для этого, специалисту нужно в реальном времени смотреть на работу SQL-сервера, а не на форуме в режиме вопрос-ответ.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720591
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

я просто думал что может это распространенная проблема, и есть какое-то лекарство в виде настроек сервера. Или каких-то общих рекомендаций.
Придется погружаться самому, наверное. Если бы обращений к базе было не так много со всех сторон, то было бы проще найти причину, а тут открываешь профайлер и там сыпятся запросы сплошным потоком, с сайта и от сервисов, так что отделить одно от другого очень сложно.

кстати, а как перенести топик в другой форум?
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720664
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывать профайлер и смотреть на все запросы подряд бессмысленно. По крайней мере, можно отделить длинные запросы и/или запросы с большим значением write/read.

Также надо смотреть на текущую картину блокировок.

Из общих рекомендаций может быть, например
- использование WITH (NOLOCK) для операций чтения, если это приемлемо
- разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями).
- отказ от транзакций, приводящих к блокировке нескольких таблиц, если это приемлемо

Semyglassкстати, а как перенести топик в другой форум?лучше начать новый, описав ситуацию более конкретно, а то тут уже воды налили
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720723
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semyglassgandjustas,

ну а что делать, если мне надо и читать и писать очень много?

Уже написал - поставить RCS, если не помогает, то только правка запросов.

Надо на живой сервер смотреть, чтобы понять что долго работает.

Магической кнопки "сделать быстро" не существует. Иначе бы она была всегда нажата. И вернулись к той же проблеме.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720727
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasТакое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше.Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720735
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semyglassс сайта и от сервисов, так что отделить одно от другого очень сложно.Semyglassи сайт (ASP.Net)
по расписанию запускаются некоторые сервисы по обработке данных в базе - обычные exe-шникиКак минимум у них будут разные имена приложений. Возможно, также логины и хосты.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720740
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КgandjustasТакое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше.Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это.
Почему не это? В 99% случаев RCS работает и проблем не дает. Только сильная конкуренция на запись в одни и те же строки может поломать ченить.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720748
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasАлексей Кпропущено...
Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это.
Почему не это? В 99% случаев RCS работает и проблем не дает. Только сильная конкуренция на запись в одни и те же строки может поломать ченить.Ну начинать-то надо точно не с этого.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720758
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Shocker.Pro- использование WITH (NOLOCK) для операций чтения, если это приемлемо
- разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями).

WITH (NOLOCK) не помог :(
запросы UPATE и так в цикле выполняются. Попробую сделать интервалы между ними, конечно, но мне кажется что это не поможет.
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720774
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemyglassShocker.Pro,

Shocker.Pro- использование WITH (NOLOCK) для операций чтения, если это приемлемо
- разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями).

WITH (NOLOCK) не помог :(
запросы UPATE и так в цикле выполняются. Попробую сделать интервалы между ними, конечно, но мне кажется что это не поможет.

хотя, вообще-то я поторопился. NOLOCK ситуацию заметно улучшил. Все еще происходят зависания, но только в момент создания нового датаридера (в цикле).

С этим уже можно жить. Спасибо!
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38720790
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38721321
Semyglass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИмейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать

А если данные читаются через DataReader, то исключение будет для одной операции чтения, или для всего ридера?
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38721331
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то у вас какие-то абстрактные вопросы , задайте конкретный вопрос и приложите кусок кода/ошибки/sql и тп
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38726571
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemyglassShocker.ProИмейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать

А если данные читаются через DataReader, то исключение будет для одной операции чтения, или для всего ридера?

Исключение если и возникнет то до создания DataReader, так как ридер читает уже из подготовленного буфера
...
Рейтинг: 0 / 0
Зависает sql server при запуске двух разных приложений
    #38727187
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAnt,

Какого такого буфера?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зависает sql server при запуске двух разных приложений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]