Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Процесс переходит в состояние Sleeping
|
|||
|---|---|---|---|
|
#18+
Ребята проблема следующая: работают несколько параллельных процессов, каждый из которых обращается к одной и той же таблице. Процессы разделяться на две категории: одни читают данные из таблицы другие эти, данные обновляют. Во избежание Dead Lockов мы во время апдейтов данных решили использовать Exclusive lock на всю таблицу. В этом случае все процессы обновления данных выстраиваются в очередь и ждут даже процесс читающий данные. Работая с маленькими базами никаких проблем не возникало, но на больших объемах данных процесс чтения (выгрузка данных клиенту) может занимать 1-3 часа и здесь происходит следующая ситуация. Этот процесс чтения данных (SELECT) блокирует таблицу Shared lockoм и все процессы обновляющие таблицу ждут его окончания. Спустя некоторое время этот процесс переходит в состояние Sleeping и все замирает. Это случается только с очень большими массивами данных и сам процесс из этого состояние (Sleeping) не выходит. Мы наблюдали, как при неких манипуляциях с SQL сервером через Enterprise Manager спящий процесс снова начинал работать. Как вы считаете это баг SQL сервера или что? hardware/software configuration: DELL 2 x P700Mhz, HDD 200 + 200 Gb, 4Gb RAM; Windows NT 4.0 SP6; SQL 7.0 Standard SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 08:28 |
|
||
|
Процесс переходит в состояние Sleeping
|
|||
|---|---|---|---|
|
#18+
При блокировании всей таблицы всякие чудеса возможны, удивляться тут нечему. Не надо этого делать. Дидлоки на пустом месте не возникают в массовом порядке, просто в логике - ошибка, не все учтено или неправильное употребление транзакций. Лечение дидлоков блокировкой таблицы то же самое, что лечение головной боли отрубанием головы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 10:20 |
|
||
|
Процесс переходит в состояние Sleeping
|
|||
|---|---|---|---|
|
#18+
Полностью согласен с Глебом Уфимцевым. При блокировке всей таблицы вероятность дедлоков не уменьшается, а увеличивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 11:48 |
|
||
|
Процесс переходит в состояние Sleeping
|
|||
|---|---|---|---|
|
#18+
Понимаете, происходит апдейт 1/3 - 1/2 части таблицы. Мне нет смысла сочить отдельные записи или страницы - дольше и проблем, на мой взгляд, больше. Почему Вы стичаете, что при Exclusive ном локе таблице вероятность дедлоков не уменьшается, а увеличивается. Не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 12:34 |
|
||
|
Процесс переходит в состояние Sleeping
|
|||
|---|---|---|---|
|
#18+
Если у вас изменение 1/3-1/2 таблицы - штатный режим, вам следует изменить логику приложения и структуру базы. Всегда можно придумать какое-нибудь ухищрение. Например, такое простое (неэлегантное, однако) решение сходу: апдейтите мощно клон таблицы (чтецы свободно читают исходную, пока вы долго апдейтите клон), а потом одной транзакцией за доли секунды исходную дропаете, а клон (проапдейтенный) переименовываете в исходную. Никто никого не ждет, все довольны, для дидлоков поля деятельности не видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2001, 14:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32016405&tid=1825120]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 346ms |

| 0 / 0 |
