(изменено: Lilya, 31 июля 2015г. 09:55:49)

Тема: Сборка мусора

Подскажите плиз, в чем проблема. При запуске системной утилиты "Сборщик мусора" выдается сообщение "Недостаточно памяти". Какой памяти ему не хватает? Парметры компьютера вполне приличные, если что.
TDMS 4.0.223.

Re: Сборка мусора

А какая команда выполняется? Просто общий Сборщик?  Пробовали по отдельности запускать?

Re: Сборка мусора

McZag пишет:

А какая команда выполняется? Просто общий Сборщик?  Пробовали по отдельности запускать?

Да, обычный сборщик с диалога парметров системы. А что значит по отдельности?

Re: Сборка мусора

Lilya пишет:

Да, обычный сборщик с диалога парметров системы. А что значит по отдельности?

Первая кнопка - общая, проверяет все. Следующие ищут частные косяки

Re: Сборка мусора

McZag пишет:

Первая кнопка - общая, проверяет все. Следующие ищут частные косяки

Запустили. Проверки файлов и дублирования идентификаторов не выдают никаких проблем. По первой кнопке - по-прежнему то же сообщение.

Re: Сборка мусора

Проблема остается  :( У нас в базе наблюдаются некоторые странные вещи, которые можно объяснить только накопившимся логическим мусором. Но удалить его пока не представляется возможным...

Re: Сборка мусора

а что насчет сервера ? машина достаточно мощная? все таки сами запросы то выполняются на серверной машине

Re: Сборка мусора

Edhunter пишет:

а что насчет сервера ? машина достаточно мощная? все таки сами запросы то выполняются на серверной машине

Да вроде проблем быть не должно - 3GHz, 16Gb RAM

(изменено: Lilya, 19 августа 2015г. 17:59:45)

Re: Сборка мусора

Lilya пишет:

Проблема остается  :( У нас в базе наблюдаются некоторые странные вещи, которые можно объяснить только накопившимся логическим мусором. Но удалить его пока не представляется возможным...

Вот иллюстрация того, о чем я говорю. Я это расцениваю как последствия замусоривания базы, но может быть причина в другом? Суть проблемы: при создании версии объекта (на картинке - папки "PDF", версия создается в скриптовой команде) в окне состава родительского объекта начинают отображаться все предыдущие версии (они видны по особому значку). Но самое интересное в том, что видны они только пользователю, под которым были созданы, а системный администратор их не видит  :) Т.е. налицо проблемы в базе, но каким образом их устранить -  пока неясно.

Сборка мусора

Re: Сборка мусора

Lilya пишет:

Подскажите плиз, в чем проблема. При запуске системной утилиты "Сборщик мусора" выдается сообщение "Недостаточно памяти". Какой памяти ему не хватает? Парметры компьютера вполне приличные, если что.
TDMS 4.0.223.

Так. Не рассосалось )). давайте решать.
1. 16 ГБ - это на том компьютере откуда запрос идет? Если нет, сколько там? И пробовали ли запускать команду на другой машине? Например, запустив TDMS прямо на сервере?
2. Что показывает таск менеджер? Приложение TDMS ест память? Как (динамика, порции)? Какая динамика на сервере?
3. Включите полный лог, и присылайте его на support@. Надеюсь эта операция нормально пишется.

Пока все. надо понять, кто создает проблемы, потом будем решать о методах ликвидации.

(изменено: Lilya, 22 августа 2015г. 17:11:21)

Re: Сборка мусора

McZag пишет:

Так. Не рассосалось )). давайте решать.
1. 16 ГБ - это на том компьютере откуда запрос идет? Если нет, сколько там? И пробовали ли запускать команду на другой машине? Например, запустив TDMS прямо на сервере?
2. Что показывает таск менеджер? Приложение TDMS ест память? Как (динамика, порции)? Какая динамика на сервере?
3. Включите полный лог, и присылайте его на support@. Надеюсь эта операция нормально пишется.

Пока все. надо понять, кто создает проблемы, потом будем решать о методах ликвидации.

Да, память съедает клиентское приложение (сорри что сразу не посмотрела). Динамика - примерно 30 Мб/сек. 16 ГБ - это и на клиенте и на серверной машине. Запустить на другой машине не пробовали, т.к. Developer установлен только на одной, но если нужно, переустановим. Логи вышлю.

Сборка мусора

Re: Сборка мусора

Lilya пишет:

Да, память съедает клиентское приложение (сорри что сразу не посмотрела). Динамика - примерно 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 .......)

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

(изменено: Lilya, 31 августа 2015г. 19:14:51)

Re: Сборка мусора

McZag пишет:

Сложно сказать, что съедает память. Может быть что-то циклится. Может быть объем ошибок такой, что съедает память
Будем двигаться итерациями. Нам потребуется хардкорный доступ к базе.

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:
Но запросы присылайте, посмотрим результаты...

Re: Сборка мусора

Lilya пишет:

Этим запросом найдена всего одна запись. Честно говоря, мне бы не хотелось манипулировать с записями базы  :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

Re: Сборка мусора

McZag пишет:

Вы можете не запускать эти запросы на изменение. Главное найти причину.

Раз первый блин нормально вышел, отправляю ВСЕ запросы, которые используются при проверке целостности

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 - по нему ок. 14000 записей...

Re: Сборка мусора

Lilya пишет:

Спасибо! Ничего страшного в целом не найдено, кроме запроса №2 - по нему ок. 14000 записей...

Это плохо )) Если бы нашли, было бы понятно, что виснет.
Что за файлы у вас в таком количестве отвалились?
Возможно, удалив их, у нас появится достаточно места.

Но на самом деле 14 000 * 10 000 = 140 000 000 - это легко поместится в памяти компьютера. Думаю, что проблема в чем-то другом

Re: Сборка мусора

Lilya пишет:

Спасибо! Ничего страшного в целом не найдено, кроме запроса №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

(изменено: Lilya, 7 сентября 2015г. 19:38:46)

Re: Сборка мусора

McZag пишет:

Вот это еще прогоните

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 запись... О чем нам это говорит? (в логику данного запроса пока не совсем вникла)

Re: Сборка мусора

McZag пишет:

Что за файлы у вас в таком количестве отвалились?

Пока затрудняюсь сказать, т.к. непонятно, в какой вообще ситуации файл может потерять своего владельца   :unsure:

(изменено: McZag, 14 сентября 2015г. 17:29:44)

Re: Сборка мусора

Lilya пишет:

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