Тема: Сборка мусора
Подскажите плиз, в чем проблема. При запуске системной утилиты "Сборщик мусора" выдается сообщение "Недостаточно памяти". Какой памяти ему не хватает? Парметры компьютера вполне приличные, если что.
TDMS 4.0.223.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы TDMS → Технический раздел → Администрирование TDMS → Сборка мусора
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите плиз, в чем проблема. При запуске системной утилиты "Сборщик мусора" выдается сообщение "Недостаточно памяти". Какой памяти ему не хватает? Парметры компьютера вполне приличные, если что.
TDMS 4.0.223.
А какая команда выполняется? Просто общий Сборщик? Пробовали по отдельности запускать?
А какая команда выполняется? Просто общий Сборщик? Пробовали по отдельности запускать?
Да, обычный сборщик с диалога парметров системы. А что значит по отдельности?
Да, обычный сборщик с диалога парметров системы. А что значит по отдельности?
Первая кнопка - общая, проверяет все. Следующие ищут частные косяки
Первая кнопка - общая, проверяет все. Следующие ищут частные косяки
Запустили. Проверки файлов и дублирования идентификаторов не выдают никаких проблем. По первой кнопке - по-прежнему то же сообщение.
Проблема остается :( У нас в базе наблюдаются некоторые странные вещи, которые можно объяснить только накопившимся логическим мусором. Но удалить его пока не представляется возможным...
а что насчет сервера ? машина достаточно мощная? все таки сами запросы то выполняются на серверной машине
а что насчет сервера ? машина достаточно мощная? все таки сами запросы то выполняются на серверной машине
Да вроде проблем быть не должно - 3GHz, 16Gb RAM
Проблема остается :( У нас в базе наблюдаются некоторые странные вещи, которые можно объяснить только накопившимся логическим мусором. Но удалить его пока не представляется возможным...
Вот иллюстрация того, о чем я говорю. Я это расцениваю как последствия замусоривания базы, но может быть причина в другом? Суть проблемы: при создании версии объекта (на картинке - папки "PDF", версия создается в скриптовой команде) в окне состава родительского объекта начинают отображаться все предыдущие версии (они видны по особому значку). Но самое интересное в том, что видны они только пользователю, под которым были созданы, а системный администратор их не видит :) Т.е. налицо проблемы в базе, но каким образом их устранить - пока неясно.
Подскажите плиз, в чем проблема. При запуске системной утилиты "Сборщик мусора" выдается сообщение "Недостаточно памяти". Какой памяти ему не хватает? Парметры компьютера вполне приличные, если что.
TDMS 4.0.223.
Так. Не рассосалось )). давайте решать.
1. 16 ГБ - это на том компьютере откуда запрос идет? Если нет, сколько там? И пробовали ли запускать команду на другой машине? Например, запустив TDMS прямо на сервере?
2. Что показывает таск менеджер? Приложение TDMS ест память? Как (динамика, порции)? Какая динамика на сервере?
3. Включите полный лог, и присылайте его на support@. Надеюсь эта операция нормально пишется.
Пока все. надо понять, кто создает проблемы, потом будем решать о методах ликвидации.
Так. Не рассосалось )). давайте решать.
1. 16 ГБ - это на том компьютере откуда запрос идет? Если нет, сколько там? И пробовали ли запускать команду на другой машине? Например, запустив TDMS прямо на сервере?
2. Что показывает таск менеджер? Приложение TDMS ест память? Как (динамика, порции)? Какая динамика на сервере?
3. Включите полный лог, и присылайте его на support@. Надеюсь эта операция нормально пишется.Пока все. надо понять, кто создает проблемы, потом будем решать о методах ликвидации.
Да, память съедает клиентское приложение (сорри что сразу не посмотрела). Динамика - примерно 30 Мб/сек. 16 ГБ - это и на клиенте и на серверной машине. Запустить на другой машине не пробовали, т.к. Developer установлен только на одной, но если нужно, переустановим. Логи вышлю.
Да, память съедает клиентское приложение (сорри что сразу не посмотрела). Динамика - примерно 30 Мб/сек. 16 ГБ - это и на клиенте и на серверной машине. Запустить на другой машине не пробовали, т.к. Developer установлен только на одной, но если нужно, переустановим. Логи вышлю.
Сложно сказать, что съедает память. Может быть что-то циклится. Может быть объем ошибок такой, что съедает память
Будем двигаться итерациями. Нам потребуется хардкорный доступ к базе.
1) Обработка TAttr (Причина: (0) «Неверная ссылка на обьект-хозяин»)
TAttr.F_OBJID может ссылаться на TObject, TLinkAttr, TUser, OCS_DATASTORAGE_HANDLE (1)
SELECT A.* FROM TAttr A
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TLinkAttr L ON A.F_OBJID=L.F_ATTRID
LEFT JOIN TUser U ON A.F_OBJID=U.F_USERID
WHERE A.F_OBJID<>1 AND O.F_OBJID IS NULL AND L.F_ATTRID IS NULL AND U.F_USERID IS NULL
Как удалять записи - понятно, допустим, если получаем список из атриубтов, то удалить можно по
DELETE FROM TAttr WHERE F_ATTRID IN (SELECT A.F_ATTRID FROM TAttr A .......)
Но можно и подстраховаться - предварительно скопировать эти записи в новую таблицу - на всякий случай. Ну и попытаться проанализировать, откуда они взялись.
Сложно сказать, что съедает память. Может быть что-то циклится. Может быть объем ошибок такой, что съедает память
Будем двигаться итерациями. Нам потребуется хардкорный доступ к базе.1) Обработка TAttr (Причина: (0) «Неверная ссылка на обьект-хозяин»)
TAttr.F_OBJID может ссылаться на TObject, TLinkAttr, TUser, OCS_DATASTORAGE_HANDLE (1)SELECT A.* FROM TAttr A
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TLinkAttr L ON A.F_OBJID=L.F_ATTRID
LEFT JOIN TUser U ON A.F_OBJID=U.F_USERID
WHERE A.F_OBJID<>1 AND O.F_OBJID IS NULL AND L.F_ATTRID IS NULL AND U.F_USERID IS NULLКак удалять записи - понятно, допустим, если получаем список из атриубтов, то удалить можно по
DELETE FROM TAttr WHERE F_ATTRID IN (SELECT A.F_ATTRID FROM TAttr A .......)Но можно и подстраховаться - предварительно скопировать эти записи в новую таблицу - на всякий случай. Ну и попытаться проанализировать, откуда они взялись.
Этим запросом найдена всего одна запись. Честно говоря, мне бы не хотелось манипулировать с записями базы :mellow:
Но запросы присылайте, посмотрим результаты...
Этим запросом найдена всего одна запись. Честно говоря, мне бы не хотелось манипулировать с записями базы :mellow:
Но запросы присылайте, посмотрим результаты...
Вы можете не запускать эти запросы на изменение. Главное найти причину.
Раз первый блин нормально вышел, отправляю ВСЕ запросы, которые используются при проверке целостности
2) TFileAttr
TFileAttr.F_OBJID может ссылаться на TObject/TCommand/TUser/TFileDef/TMessageSource/
SELECT A.F_FILEID, A.F_NAME, A.F_FILEDEFID FROM TFileAttr A
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TCommand C ON A.F_OBJID=C.F_COMMANDID
LEFT JOIN TUser U ON A.F_OBJID=U.F_USERID
LEFT JOIN TFileDef F ON A.F_OBJID=F.F_FILEDEFID
LEFT JOIN TMessageSource S ON A.F_OBJID=S.F_MESSAGESRCID
WHERE A.F_OBJID<>1 AND O.F_OBJID IS NULL AND C.F_COMMANDID IS NULL AND
U.F_USERID IS NULL AND F.F_FILEDEFID IS NULL AND S.F_MESSAGESRCID IS NULL
3) TFileAttr - файлы с неустановленной ссылкой на тип файла
SELECT A.F_FILEID \"F_ID\", 7 \"F_OCSTYPE\" FROM TFileAttr A
INNER JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TFileDef F ON A.F_FILEDEFID=F.F_FILEDEFID
WHERE F.F_FILEDEFID IS NULL
4) TLinkAttr
TLinkAttr может ссылаться:
OCS_LINK_OBJECT = 1, // TObject-TObject
OCS_LINK_QUERYDEF = 9, // TObject/TQueryDef-TQueryDef
SELECT A.F_ATTRID, A.F_OBJID, A.F_OBJOCSTYPE, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE,
A.F_LINKTYPE FROM TLinkAttr A
LEFT JOIN TObject O1 ON A.F_OBJID=O1.F_OBJID
LEFT JOIN TObject O2 ON A.F_LINKOBJID=O2.F_OBJID
WHERE (A.F_LINKTYPE=1 AND (O1.F_OBJID IS NULL OR O2.F_OBJID IS NULL)) OR A.F_LINKTYPE NOT IN (1,9)
UNION
SELECT A.F_ATTRID, A.F_OBJID, A.F_OBJOCSTYPE, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE,
A.F_LINKTYPE FROM TLinkAttr A
LEFT JOIN TObject O1 ON A.F_OBJID=O1.F_OBJID
LEFT JOIN TQueryDef Q1 ON A.F_OBJID=Q1.F_QUERYDEFID
LEFT JOIN TCommand C1 ON A.F_OBJID=C1.F_COMMANDID
LEFT JOIN TQueryDef Q2 ON A.F_LINKOBJID=Q2.F_QUERYDEFID
WHERE A.F_LINKTYPE=9 AND
((O1.F_OBJID IS NULL AND Q1.F_QUERYDEFID IS NULL AND C1.F_COMMANDID IS NULL) OR Q2.F_QUERYDEFID IS NULL)
5) TMessageAttach
TMessageAttach.F_MESSAGEID может ссылаться на TMessageSource
TMessageAttach.F_LINKOBJID может ссылаться на TObject
SELECT A.F_ID, A.F_MESSAGEID, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE, M.F_MESSAGESRCID, O.F_OBJID FROM TMessageAttach A
LEFT JOIN TMessageSource M ON A.F_MESSAGEID=M.F_MESSAGESRCID
LEFT JOIN TObject O ON A.F_LINKOBJID=O.F_OBJID
WHERE M.F_MESSAGESRCID IS NULL OR O.F_OBJID IS NULL
6) TComment
SELECT C.* FROM TComment C
LEFT JOIN TObjectType O ON C.F_OWNERID=O.F_OBJTYPEID
LEFT JOIN TAttrDef D ON C.F_OWNERID=D.F_ATTRDEFID
LEFT JOIN TFileDef F ON C.F_OWNERID=F.F_FILEDEFID
LEFT JOIN TClassifNode N ON C.F_OWNERID=N.F_CLASSIFID
LEFT JOIN TGroup G ON C.F_OWNERID=G.F_GROUPID
LEFT JOIN TRoleDef R ON C.F_OWNERID=R.F_ROLEDEFID
LEFT JOIN TStatus S ON C.F_OWNERID=S.F_STATUSID
LEFT JOIN TInputForm I ON C.F_OWNERID=I.F_FORMID
LEFT JOIN TCommand CM ON C.F_OWNERID=CM.F_COMMANDID
LEFT JOIN TQueryDef Q ON C.F_OWNERID=Q.F_QUERYDEFID
LEFT JOIN TProfile P ON C.F_OWNERID=P.F_PROFILEID
LEFT JOIN TImage IM ON C.F_OWNERID=IM.F_IMAGEID
LEFT JOIN TSignDef SD ON C.F_OWNERID=SD.F_SIGNDEFID
WHERE O.F_OBJTYPEID IS NULL AND D.F_ATTRDEFID IS NULL AND F.F_FILEDEFID IS NULL AND
N.F_CLASSIFID IS NULL AND G.F_GROUPID IS NULL AND R.F_ROLEDEFID IS NULL AND
S.F_STATUSID IS NULL AND I.F_FORMID IS NULL AND CM.F_COMMANDID IS NULL AND
Q.F_QUERYDEFID IS NULL AND P.F_PROFILEID IS NULL AND IM.F_IMAGEID IS NULL AND
SD.F_SIGNDEFID IS NULL
7) TRole
SELECT A.F_ROLEID, A.F_USERORGROUPID, A.F_USERORGROUPOCSTYPE, U.F_USERID, G.F_GROUPID,
A.F_OBJID, O.F_OBJID "F_REALOBJID", A.F_ROLEDEFID, R.F_ROLEDEFID "F_REALROLEDEFID",
R.F_DESCR "F_ROLEDEFDESCR", U.F_DESCR "F_USERDESCR", G.F_DESCR "F_GROUPDESCR", O.F_NAME "F_OBJNAME" FROM TRole A
LEFT JOIN TRoleDef R ON A.F_ROLEDEFID=R.F_ROLEDEFID
LEFT JOIN TUser U ON A.F_USERORGROUPID=U.F_USERID
LEFT JOIN TGroup G ON A.F_USERORGROUPID=G.F_GROUPID
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
WHERE R.F_ROLEDEFID IS NULL OR (U.F_USERID IS NULL AND G.F_GROUPID IS NULL) OR O.F_OBJID IS NULL
8) TSign
SELECT S.F_SIGNID, S.F_SIGNDEFID, D.F_SIGNDEFID "F_REALSIGNDEFID",
S.F_OWNERID, O.F_OBJID, D.F_DESCR, O.F_NAME, S.F_SIGNERNAME, S.F_CRDATE FROM TSign S
LEFT JOIN TSignDef D ON S.F_SIGNDEFID=D.F_SIGNDEFID
LEFT JOIN TObject O ON S.F_OWNERID=O.F_OBJID
"WHERE D.F_SIGNDEFID IS NULL OR O.F_OBJID IS NULL
9) TClassifNode
SELECT C.* FROM TClassifNode C
LEFT JOIN TCLassifNode P ON C.F_PARENTID=P.F_CLASSIFID
WHERE C.F_NODETYPE=0 AND P.F_CLASSIFID IS NULL
10) TQueryDef
SELECT Q.F_QUERYDEFID, Q.F_DESCR, Q.F_NAME, Q.F_MODIFYTIME FROM TQueryDef Q
LEFT JOIN TLinkAttr L ON Q.F_QUERYDEFID=L.F_LINKOBJID
WHERE Q.F_ISSINGLEENTRY=1 AND L.F_LINKOBJID IS NULL
11) TObject - Desktop
SELECT O.F_OBJID, O.F_ADMINID, O.F_NAME, S.F_DESCR, O.F_MODIFYTIME FROM TObject O
LEFT JOIN TUser U ON O.F_ADMINID=U.F_USERID
LEFT JOIN TStatus S ON O.F_STATUSID=S.F_STATUSID
WHERE O.F_OCSTYPE=16 AND U.F_USERID IS NULL
12) Табличные атрибуты - поиск потерянных строк, когда отсутствуют атрибуты на которые они ссылаются
Тут код динамический - имена таблиц надо подставить
SELECT A.* FROM TdmsApp.TUxxxx A
LEFT JOIN TAttr A1 ON A.F_ATTRID=A1.F_ATTRID
WHERE A1.F_ATTRID IS NULL
Вы можете не запускать эти запросы на изменение. Главное найти причину.
Раз первый блин нормально вышел, отправляю ВСЕ запросы, которые используются при проверке целостности
2) TFileAttr
TFileAttr.F_OBJID может ссылаться на TObject/TCommand/TUser/TFileDef/TMessageSource/SELECT A.F_FILEID, A.F_NAME, A.F_FILEDEFID FROM TFileAttr A
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TCommand C ON A.F_OBJID=C.F_COMMANDID
LEFT JOIN TUser U ON A.F_OBJID=U.F_USERID
LEFT JOIN TFileDef F ON A.F_OBJID=F.F_FILEDEFID
LEFT JOIN TMessageSource S ON A.F_OBJID=S.F_MESSAGESRCID
WHERE A.F_OBJID<>1 AND O.F_OBJID IS NULL AND C.F_COMMANDID IS NULL AND
U.F_USERID IS NULL AND F.F_FILEDEFID IS NULL AND S.F_MESSAGESRCID IS NULL
3) TFileAttr - файлы с неустановленной ссылкой на тип файлаSELECT A.F_FILEID \"F_ID\", 7 \"F_OCSTYPE\" FROM TFileAttr A
INNER JOIN TObject O ON A.F_OBJID=O.F_OBJID
LEFT JOIN TFileDef F ON A.F_FILEDEFID=F.F_FILEDEFID
WHERE F.F_FILEDEFID IS NULL4) TLinkAttr
TLinkAttr может ссылаться:
OCS_LINK_OBJECT = 1, // TObject-TObject
OCS_LINK_QUERYDEF = 9, // TObject/TQueryDef-TQueryDefSELECT A.F_ATTRID, A.F_OBJID, A.F_OBJOCSTYPE, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE,
A.F_LINKTYPE FROM TLinkAttr A
LEFT JOIN TObject O1 ON A.F_OBJID=O1.F_OBJID
LEFT JOIN TObject O2 ON A.F_LINKOBJID=O2.F_OBJID
WHERE (A.F_LINKTYPE=1 AND (O1.F_OBJID IS NULL OR O2.F_OBJID IS NULL)) OR A.F_LINKTYPE NOT IN (1,9)
UNION
SELECT A.F_ATTRID, A.F_OBJID, A.F_OBJOCSTYPE, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE,
A.F_LINKTYPE FROM TLinkAttr A
LEFT JOIN TObject O1 ON A.F_OBJID=O1.F_OBJID
LEFT JOIN TQueryDef Q1 ON A.F_OBJID=Q1.F_QUERYDEFID
LEFT JOIN TCommand C1 ON A.F_OBJID=C1.F_COMMANDID
LEFT JOIN TQueryDef Q2 ON A.F_LINKOBJID=Q2.F_QUERYDEFID
WHERE A.F_LINKTYPE=9 AND
((O1.F_OBJID IS NULL AND Q1.F_QUERYDEFID IS NULL AND C1.F_COMMANDID IS NULL) OR Q2.F_QUERYDEFID IS NULL)5) TMessageAttach
TMessageAttach.F_MESSAGEID может ссылаться на TMessageSource
TMessageAttach.F_LINKOBJID может ссылаться на TObjectSELECT A.F_ID, A.F_MESSAGEID, A.F_LINKOBJID, A.F_LINKOBJOCSTYPE, M.F_MESSAGESRCID, O.F_OBJID FROM TMessageAttach A
LEFT JOIN TMessageSource M ON A.F_MESSAGEID=M.F_MESSAGESRCID
LEFT JOIN TObject O ON A.F_LINKOBJID=O.F_OBJID
WHERE M.F_MESSAGESRCID IS NULL OR O.F_OBJID IS NULL6) TComment
SELECT C.* FROM TComment C
LEFT JOIN TObjectType O ON C.F_OWNERID=O.F_OBJTYPEID
LEFT JOIN TAttrDef D ON C.F_OWNERID=D.F_ATTRDEFID
LEFT JOIN TFileDef F ON C.F_OWNERID=F.F_FILEDEFID
LEFT JOIN TClassifNode N ON C.F_OWNERID=N.F_CLASSIFID
LEFT JOIN TGroup G ON C.F_OWNERID=G.F_GROUPID
LEFT JOIN TRoleDef R ON C.F_OWNERID=R.F_ROLEDEFID
LEFT JOIN TStatus S ON C.F_OWNERID=S.F_STATUSID
LEFT JOIN TInputForm I ON C.F_OWNERID=I.F_FORMID
LEFT JOIN TCommand CM ON C.F_OWNERID=CM.F_COMMANDID
LEFT JOIN TQueryDef Q ON C.F_OWNERID=Q.F_QUERYDEFID
LEFT JOIN TProfile P ON C.F_OWNERID=P.F_PROFILEID
LEFT JOIN TImage IM ON C.F_OWNERID=IM.F_IMAGEID
LEFT JOIN TSignDef SD ON C.F_OWNERID=SD.F_SIGNDEFID
WHERE O.F_OBJTYPEID IS NULL AND D.F_ATTRDEFID IS NULL AND F.F_FILEDEFID IS NULL AND
N.F_CLASSIFID IS NULL AND G.F_GROUPID IS NULL AND R.F_ROLEDEFID IS NULL AND
S.F_STATUSID IS NULL AND I.F_FORMID IS NULL AND CM.F_COMMANDID IS NULL AND
Q.F_QUERYDEFID IS NULL AND P.F_PROFILEID IS NULL AND IM.F_IMAGEID IS NULL AND
SD.F_SIGNDEFID IS NULL7) TRole
SELECT A.F_ROLEID, A.F_USERORGROUPID, A.F_USERORGROUPOCSTYPE, U.F_USERID, G.F_GROUPID,
A.F_OBJID, O.F_OBJID "F_REALOBJID", A.F_ROLEDEFID, R.F_ROLEDEFID "F_REALROLEDEFID",
R.F_DESCR "F_ROLEDEFDESCR", U.F_DESCR "F_USERDESCR", G.F_DESCR "F_GROUPDESCR", O.F_NAME "F_OBJNAME" FROM TRole A
LEFT JOIN TRoleDef R ON A.F_ROLEDEFID=R.F_ROLEDEFID
LEFT JOIN TUser U ON A.F_USERORGROUPID=U.F_USERID
LEFT JOIN TGroup G ON A.F_USERORGROUPID=G.F_GROUPID
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
WHERE R.F_ROLEDEFID IS NULL OR (U.F_USERID IS NULL AND G.F_GROUPID IS NULL) OR O.F_OBJID IS NULL8) TSign
SELECT S.F_SIGNID, S.F_SIGNDEFID, D.F_SIGNDEFID "F_REALSIGNDEFID",
S.F_OWNERID, O.F_OBJID, D.F_DESCR, O.F_NAME, S.F_SIGNERNAME, S.F_CRDATE FROM TSign S
LEFT JOIN TSignDef D ON S.F_SIGNDEFID=D.F_SIGNDEFID
LEFT JOIN TObject O ON S.F_OWNERID=O.F_OBJID
"WHERE D.F_SIGNDEFID IS NULL OR O.F_OBJID IS NULL9) TClassifNode
SELECT C.* FROM TClassifNode C
LEFT JOIN TCLassifNode P ON C.F_PARENTID=P.F_CLASSIFID
WHERE C.F_NODETYPE=0 AND P.F_CLASSIFID IS NULL10) TQueryDef
SELECT Q.F_QUERYDEFID, Q.F_DESCR, Q.F_NAME, Q.F_MODIFYTIME FROM TQueryDef Q
LEFT JOIN TLinkAttr L ON Q.F_QUERYDEFID=L.F_LINKOBJID
WHERE Q.F_ISSINGLEENTRY=1 AND L.F_LINKOBJID IS NULL11) TObject - Desktop
SELECT O.F_OBJID, O.F_ADMINID, O.F_NAME, S.F_DESCR, O.F_MODIFYTIME FROM TObject O
LEFT JOIN TUser U ON O.F_ADMINID=U.F_USERID
LEFT JOIN TStatus S ON O.F_STATUSID=S.F_STATUSID
WHERE O.F_OCSTYPE=16 AND U.F_USERID IS NULL12) Табличные атрибуты - поиск потерянных строк, когда отсутствуют атрибуты на которые они ссылаются
Тут код динамический - имена таблиц надо подставитьSELECT A.* FROM TdmsApp.TUxxxx A
LEFT JOIN TAttr A1 ON A.F_ATTRID=A1.F_ATTRID
WHERE A1.F_ATTRID IS NULL
Спасибо! Ничего страшного в целом не найдено, кроме запроса №2 - по нему ок. 14000 записей...
Спасибо! Ничего страшного в целом не найдено, кроме запроса №2 - по нему ок. 14000 записей...
Это плохо )) Если бы нашли, было бы понятно, что виснет.
Что за файлы у вас в таком количестве отвалились?
Возможно, удалив их, у нас появится достаточно места.
Но на самом деле 14 000 * 10 000 = 140 000 000 - это легко поместится в памяти компьютера. Думаю, что проблема в чем-то другом
Спасибо! Ничего страшного в целом не найдено, кроме запроса №2 - по нему ок. 14000 записей...
Вот это еще прогоните
BEGIN
DECLARE @tDupRoles TABLE (F_ID bigint)
DECLARE @F1 bigint, @F2 bigint, @F3 bigint, @BaseRoleId bigint
SET NOCOUNT ON
DECLARE CurRoles CURSOR FOR
SELECT F_ROLEDEFID, F_USERORGROUPID, F_OBJID FROM TRole
GROUP BY F_ROLEDEFID, F_USERORGROUPID, F_OBJID
HAVING COUNT(*) > 1
OPEN CurRoles
FETCH NEXT FROM CurRoles INTO @F1,@F2,@F3
WHILE (@@FETCH_STATUS<>-1)
BEGIN
SET @BaseRoleId=-1
SELECT @BaseRoleId=ISNULL(F_ROLEID,-1) FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3 AND F_ISINHERITABLE=1
IF @BaseRoleId=-1
SELECT @BaseRoleId=MIN(F_ROLEID) FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3
INSERT INTO @tDupRoles (F_ID) SELECT F_ROLEID FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3 AND F_ROLEID<>@BaseRoleId
FETCH NEXT FROM CurRoles INTO @F1,@F2,@F3
END
CLOSE CurRoles
DEALLOCATE CurRoles
SET NOCOUNT OFF
SELECT A.F_ROLEID, A.F_USERORGROUPID, A.F_USERORGROUPOCSTYPE, U.F_USERID, G.F_GROUPID,
A.F_OBJID, O.F_OBJID "F_REALOBJID", A.F_ROLEDEFID, R.F_ROLEDEFID "F_REALROLEDEFID",
R.F_DESCR "F_ROLEDEFDESCR", U.F_DESCR "F_USERDESCR", G.F_DESCR "F_GROUPDESCR", O.F_NAME "F_OBJNAME" FROM @tDupRoles T
INNER JOIN TRole A ON T.F_ID=A.F_ROLEID
LEFT JOIN TRoleDef R ON A.F_ROLEDEFID=R.F_ROLEDEFID
LEFT JOIN TUser U ON A.F_USERORGROUPID=U.F_USERID
LEFT JOIN TGroup G ON A.F_USERORGROUPID=G.F_GROUPID
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
END
Вот это еще прогоните
BEGIN
DECLARE @tDupRoles TABLE (F_ID bigint)
DECLARE @F1 bigint, @F2 bigint, @F3 bigint, @BaseRoleId bigint
SET NOCOUNT ON
DECLARE CurRoles CURSOR FOR
SELECT F_ROLEDEFID, F_USERORGROUPID, F_OBJID FROM TRole
GROUP BY F_ROLEDEFID, F_USERORGROUPID, F_OBJID
HAVING COUNT(*) > 1
OPEN CurRoles
FETCH NEXT FROM CurRoles INTO @F1,@F2,@F3
WHILE (@@FETCH_STATUS<>-1)
BEGIN
SET @BaseRoleId=-1
SELECT @BaseRoleId=ISNULL(F_ROLEID,-1) FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3 AND F_ISINHERITABLE=1
IF @BaseRoleId=-1
SELECT @BaseRoleId=MIN(F_ROLEID) FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3
INSERT INTO @tDupRoles (F_ID) SELECT F_ROLEID FROM TRole WHERE F_ROLEDEFID=@F1 AND F_USERORGROUPID=@F2
AND F_OBJID=@F3 AND F_ROLEID<>@BaseRoleId
FETCH NEXT FROM CurRoles INTO @F1,@F2,@F3
END
CLOSE CurRoles
DEALLOCATE CurRoles
SET NOCOUNT OFF
SELECT A.F_ROLEID, A.F_USERORGROUPID, A.F_USERORGROUPOCSTYPE, U.F_USERID, G.F_GROUPID,
A.F_OBJID, O.F_OBJID "F_REALOBJID", A.F_ROLEDEFID, R.F_ROLEDEFID "F_REALROLEDEFID",
R.F_DESCR "F_ROLEDEFDESCR", U.F_DESCR "F_USERDESCR", G.F_DESCR "F_GROUPDESCR", O.F_NAME "F_OBJNAME" FROM @tDupRoles T
INNER JOIN TRole A ON T.F_ID=A.F_ROLEID
LEFT JOIN TRoleDef R ON A.F_ROLEDEFID=R.F_ROLEDEFID
LEFT JOIN TUser U ON A.F_USERORGROUPID=U.F_USERID
LEFT JOIN TGroup G ON A.F_USERORGROUPID=G.F_GROUPID
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
END
624 121 запись... О чем нам это говорит? (в логику данного запроса пока не совсем вникла)
Что за файлы у вас в таком количестве отвалились?
Пока затрудняюсь сказать, т.к. непонятно, в какой вообще ситуации файл может потерять своего владельца :unsure:
624 121 запись... О чем нам это говорит? (в логику данного запроса пока не совсем вникла)
Это права доступа, дублированные на объектах. В ранних версиях TDMS (да и сейчас подозреваю в определенных случаях), возможно полное дублирование права доступа на объекте. Их нужно удалить. С очень большой степенью вероятности виснет именно из-за них.
Чтобы удалить
1. Делаем бэкап
2. Заменяем
SELECT A.F_ROLEID, A.F_USERORGROUPID, A.F_USERORGROUPOCSTYPE, U.F_USERID, G.F_GROUPID,
A.F_OBJID, O.F_OBJID "F_REALOBJID", A.F_ROLEDEFID, R.F_ROLEDEFID "F_REALROLEDEFID",
R.F_DESCR "F_ROLEDEFDESCR", U.F_DESCR "F_USERDESCR", G.F_DESCR "F_GROUPDESCR", O.F_NAME "F_OBJNAME" FROM @tDupRoles T
INNER JOIN TRole A ON T.F_ID=A.F_ROLEID
LEFT JOIN TRoleDef R ON A.F_ROLEDEFID=R.F_ROLEDEFID
LEFT JOIN TUser U ON A.F_USERORGROUPID=U.F_USERID
LEFT JOIN TGroup G ON A.F_USERORGROUPID=G.F_GROUPID
LEFT JOIN TObject O ON A.F_OBJID=O.F_OBJID
END
на
DELETE A FROM @tDupRoles T
INNER JOIN TRole A ON T.F_ID=A.F_ROLEID
END
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы TDMS → Технический раздел → Администрирование TDMS → Сборка мусора
Форум работает на PunBB, при поддержке Informer Technologies, Inc