|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
структура такая: есть сервер на нем висит база (MSSQL) и сайт (ASP.Net) по расписанию запускаются некоторые сервисы по обработке данных в базе - обычные exe-шники, один из которых производит достаточно много операций записи + чтения + обновления, а другой просто читает определенный объем данных и пишет в файл. Объемы: порядка 400 000 - 600 000 строк в таблице в которой около 50 полей. Первый сервис (который пишет) отрабатывает примерно за 10 часов (так долго потому что еще есть обработка фотографий), и если в этот интервал запускается второй, то sql-сервер перестает отвечать на запросы из asp-приложения. очень неприятно когда твой сайт зависает на несколько часов в день. Что служит причиной? Даже не знаю в какую сторону копать. Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 13:36 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
с блокировками разбирайтесь на сервере SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 13:48 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Semyglassодин из которых производит достаточно много операций записи + чтения + обновления 1) Этот вопрос нужно перекинуть в соответствующую ветку форума. Там очень компетентные спецы сидят 2) Нужно привести структуру таблицы, текст запросов на чтение, обновление данных, планы запросов 3) Обработку фотографий выносите за пределы транзакции на обновление, проводите её заранее Далее, вполне возможно, что у вас поиск существующей записи происходит не по индексу, или его вообще нет. Тогда понятно, что блокировки идут на уровне таблицы, и скрипт чтения не может получить данные из-за Table Scan Мои общие рекомендации (с учетом того, что конкретики нет): 1) Разобраться с индексами 2) Сделать предварительный экспорт данных в отдельную таблицу, а потом смержить её с основной 3) Уменьшить время экспорта данных вынесением за его рамки любой обработки данных, тем более фотографий ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 17:16 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Arm79, Я бы расписал подробнее весь алгоритм работы, но это займет у меня несколько часов и на выходе получится "портянка" которую никто читать не будет. А как надо разобраться с индексами если поиск ведется практически по всем полям? Надо все добавить в индекс? Я думал про некую временную таблицу, но мне показалось что это очень усложнит процесс, т.к. запись идет в несколько таблиц одновременно + во время записи, если произошла ошибка, то выполняется один сценарий, если нет, то другой, и мне нужно на выходе получить отчет о каждой транзакции, чтобы отдать его клиенту, т.е. мне нужно на бекенде видеть результат каждой операции. с фотографиями - да. надо обрабатывать их потом, это сократит время выполнения, а значит вероятность наложения процессов будет меньше. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 19:00 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Semyglass, Такое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше. Причина, скорее всего, в неоптимальных запросах, которые читают (и блокируют) слишком много. Могу исправить проблемы за вознаграждение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2014, 21:35 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
gandjustas, ну а что делать, если мне надо и читать и писать очень много? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 15:06 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Semyglassесли мне надо и читать и писать очень много?читать и писать можно по-разному, необходимо избегать блокировок при этом, которые не дают работать другим операциям чтения-записи. Вы задаете слишком общие вопросы - вы не получите на них конкретных ответов. К тому же задаете их не в том форуме. Необходимо либо самому погрузиться в мир оптимизации работы SQL-сервера (а это не опишешь в двух словах, на эту тему написаны горы литературы), либо нанять опытного специалиста, который, вполне возможно, за пару часов найдет несколько узких мест и предложит пути решения. Но для этого, специалисту нужно в реальном времени смотреть на работу SQL-сервера, а не на форуме в режиме вопрос-ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 15:14 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Shocker.Pro, я просто думал что может это распространенная проблема, и есть какое-то лекарство в виде настроек сервера. Или каких-то общих рекомендаций. Придется погружаться самому, наверное. Если бы обращений к базе было не так много со всех сторон, то было бы проще найти причину, а тут открываешь профайлер и там сыпятся запросы сплошным потоком, с сайта и от сервисов, так что отделить одно от другого очень сложно. кстати, а как перенести топик в другой форум? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 17:12 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Открывать профайлер и смотреть на все запросы подряд бессмысленно. По крайней мере, можно отделить длинные запросы и/или запросы с большим значением write/read. Также надо смотреть на текущую картину блокировок. Из общих рекомендаций может быть, например - использование WITH (NOLOCK) для операций чтения, если это приемлемо - разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями). - отказ от транзакций, приводящих к блокировке нескольких таблиц, если это приемлемо Semyglassкстати, а как перенести топик в другой форум?лучше начать новый, описав ситуацию более конкретно, а то тут уже воды налили ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 18:24 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Semyglassgandjustas, ну а что делать, если мне надо и читать и писать очень много? Уже написал - поставить RCS, если не помогает, то только правка запросов. Надо на живой сервер смотреть, чтобы понять что долго работает. Магической кнопки "сделать быстро" не существует. Иначе бы она была всегда нажата. И вернулись к той же проблеме. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 19:12 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
gandjustasТакое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше.Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 19:17 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Semyglassс сайта и от сервисов, так что отделить одно от другого очень сложно.Semyglassи сайт (ASP.Net) по расписанию запускаются некоторые сервисы по обработке данных в базе - обычные exe-шникиКак минимум у них будут разные имена приложений. Возможно, также логины и хосты. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 19:30 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Алексей КgandjustasТакое поведение из-за блокировок. Поставьте read committed snapshot если у вас sql server 2012 и выше.Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это. Почему не это? В 99% случаев RCS работает и проблем не дает. Только сильная конкуренция на запись в одни и те же строки может поломать ченить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 19:38 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
gandjustasАлексей Кпропущено... Нужно оптимизировать запросы, уменьшать размеры транзакций, но никак не это. Почему не это? В 99% случаев RCS работает и проблем не дает. Только сильная конкуренция на запись в одни и те же строки может поломать ченить.Ну начинать-то надо точно не с этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 19:50 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Shocker.Pro, Shocker.Pro- использование WITH (NOLOCK) для операций чтения, если это приемлемо - разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями). WITH (NOLOCK) не помог :( запросы UPATE и так в цикле выполняются. Попробую сделать интервалы между ними, конечно, но мне кажется что это не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 20:13 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
SemyglassShocker.Pro, Shocker.Pro- использование WITH (NOLOCK) для операций чтения, если это приемлемо - разбиение запросов UPDATE, затрагивающих большое количество записей на цикл, каждая итерация которого затрагивает небольшое количество записей (я даже вставлял небольшую паузу в каждой итерации цикла, чтобы ресурсы освобождались и могли быть заблокированы другими потребителями). WITH (NOLOCK) не помог :( запросы UPATE и так в цикле выполняются. Попробую сделать интервалы между ними, конечно, но мне кажется что это не поможет. хотя, вообще-то я поторопился. NOLOCK ситуацию заметно улучшил. Все еще происходят зависания, но только в момент создания нового датаридера (в цикле). С этим уже можно жить. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 21:30 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Имейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2014, 22:32 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
Shocker.ProИмейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать А если данные читаются через DataReader, то исключение будет для одной операции чтения, или для всего ридера? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 14:58 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
что-то у вас какие-то абстрактные вопросы , задайте конкретный вопрос и приложите кусок кода/ошибки/sql и тп ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 15:07 |
|
Зависает sql server при запуске двух разных приложений
|
|||
---|---|---|---|
#18+
SemyglassShocker.ProИмейте ввиду, что у NOLOCK есть побочные эффекты, если один пользователь будет читать данные с NOLOCK, а другой их же в этот момент изменит, произойдет исключение типа "Could not continue scan with NOLOCK due to data movement", и данные надо будет перезапрашивать А если данные читаются через DataReader, то исключение будет для одной операции чтения, или для всего ридера? Исключение если и возникнет то до создания DataReader, так как ридер читает уже из подготовленного буфера ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2014, 13:01 |
|
|
start [/forum/topic.php?fid=17&fpage=18&tid=1349724]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 188ms |
0 / 0 |