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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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