powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Очень медленное удаление :(
16 сообщений из 16, страница 1 из 1
Очень медленное удаление :(
    #36280707
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица серверов, сервер - это foreign key (SERVER_ID) в большом числе зависимых таблиц с огромным количеством записей, данные для которых собираются сервисами с разных клиентов. Порядок ~ десятки-сотни миллионов. Индексы с SERVER_ID в таблицах присутствуют. Тем не менее, удаление даже пустых серверов занимает чудовищное количество времени.

Вначале процедура удаления была простой и работало каскадное удаление. При этом, естественно, "пустой" сервер удалялся очень быстро.

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

Затем перешли на другую схему - теперь удаляется порциями, сдвигаясь на 10000 записей, при помощи курсора... Но DELETE FROM (SELECT * FROM XXX.YYY WHERE SERVER_ID = 666 FETCH FIRST 10000 ROWS ONLY) все равно на самых больших таблицах зависает на десяток минут... :(

Что можно предпринять?
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36280747
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafigator,

Версия и редакция db2 какие?
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36280942
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

9.5.4 на AIX 64bit

Кстати, немного модифицировали процедуры удаления. Теперь это выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 	DECLARE PSTMT_SEL VARCHAR( 4000 );
 	DECLARE PSTMT_CHG VARCHAR( 4000 );
	
	DECLARE SQLCODE INT;
	DECLARE CNT INT DEFAULT  0 ;
	DECLARE DUMMY_INT INTEGER;	
	
	DECLARE C1 CURSOR WITH HOLD FOR S1;
	
	SET PSTMT_SEL = 'SELECT * FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' FOR UPDATE';
	SET PSTMT_CHG = 'DELETE FROM ' || IN_TABLE_NAME || ' WHERE CURRENT OF C1';
	
	SET OUT_TOTAL_ROWS_DELETED =  0 ;

	PREPARE S1 FROM PSTMT_SEL;
	PREPARE S2 FROM PSTMT_CHG;
	
	OPEN C1;
	
	FETCH C1 INTO DUMMY_INT;
	
	WHILE (SQLCODE !=  100 ) DO
		SET CNT = CNT +  1 ;
		SET OUT_TOTAL_ROWS_DELETED = OUT_TOTAL_ROWS_DELETED +  1 ;
		
		EXECUTE S2;
		
		IF (CNT = IN_DELETE_ROWS_BLOCK_SIZE) THEN
			COMMIT;
			SET CNT =  0 ;
		END IF;
		
		FETCH C1 INTO DUMMY_INT;
		
	END WHILE;
	
	COMMIT;
	CLOSE C1; 

Добавил также индексы, которые отсутствовали в небольшом числе зависимых таблиц (посмотрел по db2mon, на каких таблицах дольше всего "висело"). Стало заметно быстрее.

Однако есть еще уровень выше - клиенты, у которых в свою очередь есть сервера :)
Клиенты всё еще удаляются крайне медленно...

Наверное, подобный приведенному выше подход нужно сделать и для клиентов? Т.е. проходить по всем таблицам, у которых есть foreign key CLIENT_ID и удалять порциями, используя опять-таки процедуру приведенную выше для серверов клиентов?

Или подскажете какое-то дополнительное интересное решение?
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36281114
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать таблицы MDC и удалять секциями?
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36281307
Lkhiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. select * - это излишество. Вы не используете извлечённые записи, а это берёт время. Извлекайте любую константу, например 1 - это будет работать также хорошо, но гораздо быстрее:

авторSET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' FOR UPDATE';

2. Лучше, чем просто писать FOR UPDATE использовать FOR UPDATE of SERVER_ID - это тоже быстрее:

quote автор]SET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' FOR UPDATE of SERVER_ID';[/quote]

3.Чем извлекать запись за записью - лучше извлекать блоками.
После каждого извлечения блока записей EXECUTE S2; Commit; .
Теперь не надо будет добавлять единицу. Зато надо подготовить поле для извлекаемого блока изменить и сделать один добавочный после окончания цикла:

quote автор]
a.
SET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' WITH ROWSET POSITIONING FOR UPDATE of SERVER_ID';
.................
.................
.................
FETCH NEXT ROWSET C1
FOR IN_DELETE_ROWS_BLOCK_SIZE ROWS
INTO DUMMY_INT[]
[/quote]


Lenny
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36281308
Lkhiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. select * - это излишество. Вы не используете извлечённые записи, а это берёт время. Извлекайте любую константу, например 1 - это будет работать также хорошо, но гораздо быстрее:

авторSET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' FOR UPDATE';

2. Лучше, чем просто писать FOR UPDATE использовать FOR UPDATE of SERVER_ID - это тоже быстрее:

авторSET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' FOR UPDATE of SERVER_ID';

3.Чем извлекать запись за записью - лучше извлекать блоками .
После каждого извлечения блока записей EXECUTE S2; Commit; .

Теперь не надо будет добавлять единицу.

Зато надо подготовить поле для извлекаемого блока изменить и сделать один добавочный после окончания цикла:

автор
a.
SET PSTMT_SEL = 'SELECT 1 FROM ' || IN_TABLE_NAME || ' WHERE SERVER_ID = ' || TRIM(CHAR(IN_SERVER_ID)) || ' WITH ROWSET POSITIONING FOR UPDATE of SERVER_ID';
.................
.................
.................
FETCH NEXT ROWSET C1
FOR IN_DELETE_ROWS_BLOCK_SIZE ROWS
INTO DUMMY_INT[]



Lenny
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36281528
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafigator9.5.4 на AIX 64bit ...
Или подскажете какое-то дополнительное интересное решение?Если у вас ESE, то можно использовать MDC: пересоздайте таблицы со своими миллионами записей как ORGANIZE BY (SERVER_ID). Если есть много SERVER_ID с низкой кардинальностью (маленькое кол-во записей), используйте extent size поменьше у табличного пространства.
Также можно выставить:
db2set DB2_MDC_ROLLOUT =DEFER

Если не ESE, то единственное что можно сделать (если вашим алгоритмам это не повредит), это:
db2set DB2_SKIPDELETED=ON
db2stop
db2start
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36281951
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у нас ещё было "секционирование для бедных" (т.е. годящееся для не-ESE) - через VIEW с UNION ALL на таблицах с соответствующими constraint'ами.
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36283470
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, буду по порядку двигаться :) Пока что решил модифицировать запрос, но какая-то синтакс. ошибка. В упор не вижу, в чем дело:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	PREPARE S1 FROM PSTMT_SEL;
	PREPARE S2 FROM PSTMT_CHG;
	
	OPEN C1;
	
	FETCH NEXT ROWSET FROM C1	FOR IN_DELETE_ROWS_BLOCK_SIZE ROWS INTO DUMMY_INT;
	
	WHILE (SQLCODE !=  100 ) DO
	
		EXECUTE S2;
		COMMIT;

		FETCH NEXT ROWSET FROM C1	FOR IN_DELETE_ROWS_BLOCK_SIZE ROWS INTO DUMMY_INT;
		
	END WHILE;
	
	CLOSE C1;

Код: plaintext
1.
DB2 Database Error: ERROR [ 42601 ] [IBM][DB2/AIX64] SQL0104N  An unexpected token "ROWSET FROM C1 FOR IN_DELETE_ROWS_BLOCK_SIZE R" was found following "     FETCH NEXT".  Expected tokens may include:  "<space>".  LINE NUMBER= 36 .  SQLSTATE= 42601 
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36283485
Lkhiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
You can check the syntax:

Fetch -- http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/DSNSQK16/5.65?DT=20090505112816

Declare cursor --
http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/DSNSQK16/5.47?DT=20090505112816
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36283495
Lkhiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется вам надо декларировать хост переменную типа целое ,
затем сделать set .... = IN_DELETE_ROWS_BLOCK_SIZE
и использовать её в Fetch....

Lenny
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36283592
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lkhiger,

нет, я проверил это в самом начале - подставил вообще константу :( дело в чем-то другом.
Смотрел документацию, но там примера использования в контексте не было (кое-где встречал лишь exec sql). А в частности команда выглядит верной...
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36284268
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а "логическое" удаление вместо "физического" никак не применить?
интересно, а записей об эскалации а db2diag.log много?
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36285141
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafigatorПока что решил модифицировать запрос, но какая-то синтакс. ошибка. В упор не вижу, в чем дело:
...
FETCH NEXT ROWSET FROM C1 FOR IN_DELETE_ROWS_BLOCK_SIZE ROWS INTO DUMMY_INT;
...Дело в том, что вы пытаетесь применить синтаксис FETCH для DB2 for Z/OS для DB2 for LUW.
В FETCH для DB2 for LUW нет Multiple-row INSERT and FETCH statements .
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36288810
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Марк, спасибо за предложение. Почитал про MDC - возможно, подойдет. Но т.к. у нас большое количество таблиц и крупная система - это серьезный вопрос, для которого необходимо много времени. Пока что пытаюсь оптимизировать существующие процедуры.

Для SERVER удалось добиться более-менее приемлемого времени удаления. А вот с клиентами пока не сложилось. Вот текущий запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
CREATE PROCEDURE WIZARD.CLIENT_SAFE_DELETE
(
	IN IN_CLIENT_ID INTEGER 
)
SPECIFIC WIZARD.CLIENT_SAFE_DELETE
BEGIN
	DECLARE VAR_DELETE_ROWS_BLOCK_SIZE INTEGER DEFAULT  10000 ;
	DECLARE VAR_TABNAME, VAR_CLUSTER_ID VARCHAR( 128 );
	DECLARE SQLCODE, VAR_SVCCLUSTER_ID, VAR_TSMSERVER_ID, VAR_CONTACT_ID INTEGER;
	DECLARE C_CLIENT_RELATED_END, C_TSMSERVER_RELATED_END, C_SVCCLUSTER_RELATED_END, C_TSMSERVERLIST_END, C_SVCCLUSTERLIST_END SMALLINT DEFAULT  0 ;
	DECLARE VAR_TOTAL_ROWS_AFFECTED INTEGER;
	
	DECLARE C_SVCCLUSTER_RELATED CURSOR WITH HOLD FOR
	SELECT
		TRIM(C.TABSCHEMA) || '.' ||	TRIM(C.TABNAME) AS TABNAME
	FROM
		SYSCAT.COLUMNS C
		JOIN SYSCAT.REFERENCES R ON TRIM(C.TABSCHEMA) = TRIM(R.TABSCHEMA)
			AND TRIM(C.TABNAME) = TRIM(R.TABNAME)
			AND TRIM(C.COLNAME) = TRIM(R.FK_COLNAMES)
		JOIN SYSCAT.KEYCOLUSE K ON TRIM(C.TABSCHEMA) = TRIM(K.TABSCHEMA)
			AND TRIM(C.TABNAME) = TRIM(K.TABNAME)
			AND TRIM(K.COLNAME) = 'CLUSTER_ID'
	WHERE
		(TRIM(C.COLNAME) = 'CLIENT_ID' OR TRIM(C.COLNAME) = 'CLIENTID')
			AND TRIM(R.REFTABSCHEMA) = 'WIZARD' AND TRIM(R.REFTABNAME) = 'CLIENT'
			AND TRIM(R.PK_COLNAMES) = 'ID'
			AND (TRIM(C.TABSCHEMA) != 'SVC' OR TRIM(C.TABNAME) != 'SVCCLUSTER')
			AND (TRIM(C.TABSCHEMA) != 'SVC' OR TRIM(C.TABNAME) != 'VDISKEXTENT_TEST1')
	WITH UR
	FOR FETCH ONLY;
			
	DECLARE C_TSMSERVER_RELATED CURSOR WITH HOLD FOR
	SELECT
		TRIM(C.TABSCHEMA) || '.' ||	TRIM(C.TABNAME) AS TABNAME
	FROM
		SYSCAT.COLUMNS C
		JOIN SYSCAT.REFERENCES R ON TRIM(C.TABSCHEMA) = TRIM(R.TABSCHEMA)
			AND TRIM(C.TABNAME) = TRIM(R.TABNAME)
			AND TRIM(C.COLNAME) = TRIM(R.FK_COLNAMES)
	WHERE
		(TRIM(C.COLNAME) = 'SERVER_ID' OR TRIM(C.COLNAME) = 'SERVERID')
		AND TRIM(R.REFTABSCHEMA) = 'TSM' AND TRIM(R.REFTABNAME) = 'TSMSERVER'
		AND TRIM(R.PK_COLNAMES) = 'ID'
	WITH UR
	FOR FETCH ONLY;
			
	DECLARE C_CLIENT_RELATED CURSOR WITH HOLD FOR
	SELECT
		TRIM(C.TABSCHEMA) || '.' ||	TRIM(C.TABNAME) AS TABNAME
	FROM
		SYSCAT.COLUMNS C
		JOIN SYSCAT.REFERENCES R ON TRIM(C.TABSCHEMA) = TRIM(R.TABSCHEMA)
			AND TRIM(C.TABNAME) = TRIM(R.TABNAME)
			AND TRIM(C.COLNAME) = TRIM(R.FK_COLNAMES)
		LEFT JOIN SYSCAT.KEYCOLUSE K ON TRIM(C.TABSCHEMA) = TRIM(K.TABSCHEMA)
			AND TRIM(C.TABNAME) = TRIM(K.TABNAME)
			AND TRIM(K.COLNAME) = 'CLUSTER_ID'
	WHERE
		(TRIM(C.COLNAME) = 'CLIENT_ID' OR TRIM(C.COLNAME) = 'CLIENTID')
			AND TRIM(R.REFTABSCHEMA) = 'WIZARD' AND TRIM(R.REFTABNAME) = 'CLIENT'
			AND TRIM(R.PK_COLNAMES) = 'ID'
			AND ((TRIM(C.TABSCHEMA) != 'SVC' OR TRIM(C.TABNAME) != 'SVCCLUSTER')
			AND (TRIM(C.TABSCHEMA) != 'TSM' OR TRIM(C.TABNAME) != 'TSMSERVER'))
			AND K.COLNAME IS NULL
	WITH UR
	FOR FETCH ONLY;
	
	DECLARE C_TSMSERVERLIST CURSOR WITH HOLD FOR
	SELECT
		ID
	FROM
		TSM.TSMSERVER
	WHERE
		CLIENT_ID = IN_CLIENT_ID
	FOR FETCH ONLY;
	--FETCH FIRST 1 ROWS ONLY;
		
	DECLARE C_SVCCLUSTERLIST CURSOR WITH HOLD FOR
	SELECT
		CLUSTER_ID
	FROM
		SVC.SVCCLUSTER
	WHERE
		CLIENT_ID = IN_CLIENT_ID
	FOR FETCH ONLY;
	--FETCH FIRST 1 ROWS ONLY;
		
	SELECT CONTACT_ID
	INTO VAR_CONTACT_ID 
	FROM WIZARD.CLIENT
	WHERE ID = IN_CLIENT_ID;
	
	OPEN C_TSMSERVERLIST;
	OPEN C_SVCCLUSTERLIST;
	
	WHILE (C_SVCCLUSTERLIST_END =  0 ) DO
		FETCH C_SVCCLUSTERLIST INTO VAR_CLUSTER_ID;
		IF (SQLCODE =  100 ) THEN
			SET C_SVCCLUSTERLIST_END =  1 ;
		ELSE
			OPEN C_SVCCLUSTER_RELATED;
			WHILE (C_SVCCLUSTER_RELATED_END =  0 ) DO
				FETCH C_SVCCLUSTER_RELATED INTO VAR_TABNAME;
				IF (SQLCODE =  100 ) THEN
					SET C_SVCCLUSTER_RELATED_END =  1 ;
				ELSE
					CALL SVC.SVCCLUSTER_DELETE_ROWS_BY_CLIENTID_CLUSTERID(IN_CLIENT_ID, VAR_CLUSTER_ID, VAR_DELETE_ROWS_BLOCK_SIZE, VAR_TABNAME);
				END IF;
			END WHILE;
			SET C_SVCCLUSTER_RELATED_END =  0 ;
			CLOSE C_SVCCLUSTER_RELATED WITH RELEASE;
		END IF;
	END WHILE;
	
	WHILE (C_TSMSERVERLIST_END =  0 ) DO
		FETCH C_TSMSERVERLIST INTO VAR_TSMSERVER_ID;
		IF (SQLCODE =  100 ) THEN
			SET C_TSMSERVERLIST_END =  1 ;
		ELSE
			OPEN C_TSMSERVER_RELATED;
			WHILE (C_TSMSERVER_RELATED_END =  0 ) DO
				FETCH C_TSMSERVER_RELATED INTO VAR_TABNAME;
				IF (SQLCODE =  100 ) THEN
					SET C_TSMSERVER_RELATED_END =  1 ;
				ELSE
					CALL TSM.TSMSERVER_DELETE_ROWS_BY_SERVER_ID(VAR_TSMSERVER_ID, VAR_DELETE_ROWS_BLOCK_SIZE, VAR_TABNAME, VAR_TOTAL_ROWS_AFFECTED);
				END IF;
			END WHILE;
			SET C_TSMSERVER_RELATED_END =  0 ;
			CLOSE C_TSMSERVER_RELATED WITH RELEASE;
		END IF;
	END WHILE;
	
	OPEN C_CLIENT_RELATED;
	WHILE (C_CLIENT_RELATED_END =  0 ) DO
		FETCH C_CLIENT_RELATED INTO VAR_TABNAME;
		IF (SQLCODE =  100 ) THEN
			SET C_CLIENT_RELATED_END =  1 ;
		ELSE
			CALL WIZARD.CLIENT_DELETE_ROWS_BY_CLIENT_ID(IN_CLIENT_ID, VAR_DELETE_ROWS_BLOCK_SIZE, VAR_TABNAME);
		END IF;
	END WHILE;
	CLOSE C_CLIENT_RELATED WITH RELEASE;

	CLOSE C_SVCCLUSTERLIST;
	CLOSE C_TSMSERVERLIST;

	DELETE FROM WIZARD.LICENSE WHERE ID IN (SELECT TSM.TSMLICENSE.LICENSEID FROM TSM.TSMLICENSE JOIN TSM.TSMSERVER ON TSM.TSMLICENSE.SERVERID = TSM.TSMSERVER.ID WHERE TSM.TSMSERVER.CLIENT_ID = IN_CLIENT_ID);
	COMMIT;
	DELETE FROM WIZARD.LICENSE WHERE ID IN (SELECT SVC.SVCCLUSTER.LICENSE_ID FROM SVC.SVCCLUSTER WHERE SVC.SVCCLUSTER.CLIENT_ID = IN_CLIENT_ID);
	COMMIT;
	DELETE FROM TSM.TSMSERVER WHERE CLIENT_ID = IN_CLIENT_ID;
	COMMIT;
	DELETE FROM SVC.SVCCLUSTER WHERE CLIENT_ID = IN_CLIENT_ID;
	COMMIT;
	DELETE FROM WIZARD.CONTACT WHERE ID = VAR_CONTACT_ID;
	COMMIT;
	DELETE FROM WIZARD.CLIENT WHERE ID = IN_CLIENT_ID;
	COMMIT;
END;

Нужные индексы, включающие CLIENT_ID, а также те, в которые входят CLUSTER_ID (это сущность, подобная SERVER_ID - тоже очень большие таблицы есть), уже созданы для всех таблиц цикла. Тем не менее, удаление клиента "подвисает" достаточно надолго, а db2mon почему-то отображает для lock wait целый ряд таблиц, хотя в каждый момент обрабатывается лишь одна (?)
Я пытался удалить клиента БЕЗ серверов и кластеров, поэтому можно сосредоточиться лишь на курсоре C_CLIENT_RELATED.

p.s. Под конец установил DB2_SKIPDELETED - стало быстрее, но всё еще не дотягивает до приемлемого уровня (раньше счет шел на десятки минут, сейчас клиент с 2 пустыми серверами и 2 пустыми кластерами удаляло минуту)...
...
Рейтинг: 0 / 0
Очень медленное удаление :(
    #36288868
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenman,

если бы я знал, как добраться до файла диагностики (db2diag.log) :)
У нас нет доступа к файловой системе сервера БД, пытался найти через Monitoring Tools, но пока безуспешно... :(
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Очень медленное удаление :(
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]