Доброго времени суток.
Есть такая проблема, которая не дает покоя, а именно: За несколько лет работы, в лоции скопилась куча завершенных шаблонов работ (В меню - "Карты работ", это прямо под пунктом "Шаблоны" - версия 4.20). При попытке удалить хотя бы один из отработавших шаблонов вся база зависает на продолжительное время (все открытые лоции видимо просто блокируются). К слову зависание происходит даже при формировании списка этих шаблонов. Ну вот и собственно - как же реально удалить все эти ненужные завершенные шаблоны из лоции?
Удаление завершенных шаблонов
- Старик Крупский
- Активный участник
- Сообщения: 803
- Зарегистрирован: 27 июл 2006, 22:17
- Откуда: Москва
Re: Удаление завершенных шаблонов
Старовата версия... Оптимизация удаления карт работ была проведена, насколько я помню, в версии 4.30. Я бы всех от базы оторвал и во внерабочее время, на ночь, например, запустил бы удаление нескольких карт работ. Если все пройдет безошибочно, то можно в пятницу вечером запустить глобальное удаление. За выходные сделает, наверное. И на время удаления можно сервер автоматических этапов выключить, чтобы он сервер не грузил.
Я в 4.20 и 4.30 удалял карты ежемесячно.
В 4.40 такой проблемы и вовсе нет - там настраивается автоудаление. И вообще, 4.20 и 4.40 - это две приличные разницы
Я в 4.20 и 4.30 удалял карты ежемесячно.
В 4.40 такой проблемы и вовсе нет - там настраивается автоудаление. И вообще, 4.20 и 4.40 - это две приличные разницы

"Лучше меньше, да лучше" (C)
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Удаление завершенных шаблонов
оптимизация удаления появилась вроде в 4.40, незадолго до появления автоудаления..
мы раньше удаляли карты ежедневно.
ну по сути да, выход как раз такой - понемногу удалять, желательно в нерабочее время
опять же, карты бывают разные. у нас при удалении карты из 31 тыс. этапов (несколько этапов повторялись в цикле) вообще клиент переставал реагировать, хотя блокировок на уровне БД не было, так что если такие карты есть - лучше их вообще обрабатывать отдельно либо не трогать вообще (в 4.40 с этим уже все в порядке).
при удалении может оказаться нелишним смотреть на загрузку сервера БД и блокировки. мы для этого используем такой запрос:
первая часть возвращает активные коннекты, которые runnable
в ней по идее должен светиться текущий коннект, который удаляет карты
вторая часть - те, кто оказался заблокированным
треться -коннект, который блокирует. в нем тоже может появиться текущий коннект
по spid можно убивать коннект через kill <spid> (клиент при этом безвозвратно отвалится от базы, так что аккуратнее
)
запрос, к слову, оказывается полезным и в повседневной работе, когда надо выяснить, почему висим и из-за кого
мы раньше удаляли карты ежедневно.
ну по сути да, выход как раз такой - понемногу удалять, желательно в нерабочее время

опять же, карты бывают разные. у нас при удалении карты из 31 тыс. этапов (несколько этапов повторялись в цикле) вообще клиент переставал реагировать, хотя блокировок на уровне БД не было, так что если такие карты есть - лучше их вообще обрабатывать отдельно либо не трогать вообще (в 4.40 с этим уже все в порядке).
при удалении может оказаться нелишним смотреть на загрузку сервера БД и блокировки. мы для этого используем такой запрос:
Код: Выделить всё
select spid, cpu, open_tran, last_batch, convert(nvarchar(20),hostname) as 'hostname', convert(nvarchar(20), program_name) as 'program_name', convert(nvarchar(20), loginame) as 'loginame'
from
master..sysprocesses
where (status = 'runnable'
or open_tran >0)
order by cpu desc
select spid, blocked, open_tran, status, convert(nvarchar(20),hostname) as 'hostname', convert(nvarchar(20), loginame) as 'loginame' from master..sysprocesses
where blocked <>0
select spid, blocked, open_tran, status, convert(nvarchar(20),hostname) as 'hostname', convert(nvarchar(20), loginame) as 'loginame' from master..sysprocesses
where
spid in
(
select blocked from master..sysprocesses
where blocked <> 0
)
and blocked = 0
в ней по идее должен светиться текущий коннект, который удаляет карты
вторая часть - те, кто оказался заблокированным
треться -коннект, который блокирует. в нем тоже может появиться текущий коннект
по spid можно убивать коннект через kill <spid> (клиент при этом безвозвратно отвалится от базы, так что аккуратнее

запрос, к слову, оказывается полезным и в повседневной работе, когда надо выяснить, почему висим и из-за кого
лучше день потерять, потом за пять минут долететь!