| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #120 : 26-06-2012 03:58 »  |  | 
 
 RXL, имею в виду, что целостность связей контролируется не СУБД, а программистом в программе PK приделывал alter table MESS_LOG add  primary key(MESSAGE_ID) - результат по времени такой же Предлагаю эксперимент. подойдёт ли вырезание одной этой таблицы ? То есть удаляю всё, кроме таблицы, получаю маленькую БД для экспериментов?  Или нужно именно с "чистого листа" ? И вот это подозрительно: у меня сейчас не полмиллиона, а 50 тысячДобавлено через 8 минут и 22 секунды: отрезал всё, оставил только эту таблицу (индекс есть, ключа нет). Сделал бэкап/восстановление. Затем удаление записей - время такое же  куда бечь ? ))) |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 04:06 от Алексей1153 » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| HandKot 
								Молодой специалист    Offline | 
								|  | « Ответ #121 : 26-06-2012 04:16 »  |  | 
 
 Странно, что отключение индекса не замедляет удаление записей, выбранных по индексированному полю. Разница должна быть существенной не знаю птицу и говорю по аналогии с MSSQL 1. все зависит от кол-ва записей, т.е если удаляется 50000 записей, а в таблице 51 тысяча, то и  с индексом или без будет обычный скан всей таблицы 2.  alter table MESS_LOG add  primary key(MESSAGE_ID) по умолчанию создается кластерным и при удалении будет  "индекс скан" - что для кластерного аналогично "табле скан" в общем надо смотреть план запросаАлексей1153++ ,  первый подход - если оценить кол-во удаляемых записей и кол-во записей в таблице, то чему равно их соотношение? если после удаления в таблице остаётся записей намного меньше, то можно использовать следующий подход 1. создаём новую таблицу аналогичной структуры 2. вставляем в неё записи, которые должны остаться после удаления 3. дропаем старую таблицу 4. новую таблицу переименовываем в старую второй подход - удаление порциями, т.е в цикле по N-записей (определяется экспериментами) удаляем этот подход хорош при удалении большого кол-во записей (и если первый подход не применим). Плюс подхода в том, что меньше мспользуется лог и меньше наблюдается блокировок |  
						| 
								|  |  
								|  |  Записан | 
 
 I Have Nine Lives You Have One OnlyTHINK!
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #122 : 26-06-2012 04:25 »  |  | 
 
  если оценить кол-во удаляемых записей и кол-во записей в таблице, то чему равно их соотношение?
 удаляется всё. Все записи подходят под условие в where создание копии таблицы - это ой ой, птица такое просто так не пропустит ) Там нужно сначала удалить все связанные с таблицей процедуры, затем триггер (он у меня там один - на вставку), только потом будет можно удалить таблицу. Затем всё это обратно восстанавливать нужно. Хотелось бы без этих усложнений, конечно операция удаления в программе должна быть "целой", то есть сказали почистить журнал на такое-то  количество сообщений, - раз и почистили а что за лог ? Я не использую никакого лога всё равно, может энто нужно отключить ?Добавлено через 23 секунды: ещё , кстати, может эта вся бодяга - некий глюк версии 1,5 птицы ?Добавлено через 4 минуты и 12 секунд: ещё встречал вариант - помечать удалённые записи, не удаляя их реально. но попробовал -  Update MESS_LOG set del_flag =1 время такое же - 27 секунд на 50 тыс записей |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 04:29 от Алексей1153 » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #123 : 26-06-2012 05:20 »  |  | 
 
 Алексей1153++, попробуй создать DESC индекс на поле MESSAGE_ID. Сравни планы когда MESSAGE_ID - РК и когда у MESSAGE_ID есть DESC индекс.   |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #124 : 26-06-2012 05:28 »  |  | 
 
 Oldy, такое уже было - на предыдущей странице. Результат един.
 Леш, а можно создать ключ, целостность которого обеспечивается движком базы? Ну просто очень медленно. Я вчера создал твою таблицу в MySQL 5.5, заполнял на 50 и 100 тыс записей и удалял с индексом и без: разброс составил 0.8-1.0 сек.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #125 : 26-06-2012 05:32 »  |  | 
 
 Прошу прощения. Куда смотрел?  |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #126 : 26-06-2012 05:35 »  |  | 
 
 RXL, Oldy , вот результаты и без индекса, и с ключом+индекс .  Время не отличается я щас попробую поставить птицу 2,5,1 но как потом заставить клиентов перейти на неё - это вопрос открытый Ром, за MySQL я и не сомневаюсь, уже была возможность оценить   |  
						| 
								| 
 |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #127 : 26-06-2012 05:40 »  |  | 
 
 Леш, скажи, а почему у тебя почти все поля NULL? Сущности в программе имеют аналогичное поведение - с неопределенностью? |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #128 : 26-06-2012 06:12 »  |  | 
 
 Таблица разрасталась, когда добавлялись новые поля - они, естественно NULL по умолчанию. В программе при чтении смотрится - если NULL , оставляется значение по умолчанию в структуре данных
 А это на что может повлиять ?
 
 Добавлено через 13 минут и 42 секунды:
 с птицей 2.5.1 запрос выполнился за 41 секунду , но зато коммит мгновенный. Итого, с минуты снизили время до 41 секунды.
 
 Ерунда же всё равно...
 |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 06:26 от Алексей1153 » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #129 : 26-06-2012 06:31 »  |  | 
 
 А может птица себя так ведет при удалении записей?
 А если создать программный курсор и удалять по одной записи - что будет со временем?
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #130 : 26-06-2012 06:31 »  |  | 
 
 кому не лень, попробуйте у себя (пароль к закачке в ЛС скину сейчас )http://zalil.ru/33506486Добавлено через 19 секунд: А если создать программный курсор и удалять по одной записи - что будет со временем?
 а как это делается ? |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 06:31 от Алексей1153 » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #131 : 26-06-2012 06:41 »  |  | 
 
 а как это делается ? Ты меня пугаешь .... я не знаю как это делается типа такого  $result = mysql_query('select * from table where id<NNNN');while ($row = mysql_fetch_assoc($result)) {
 mysql_query("delete from table where id =". $row[id]);
 
 
 }
 |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 06:59 от Sla » |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #132 : 26-06-2012 06:43 »  |  | 
 
 Таблица разрасталась, когда добавлялись новые поля - они, естественно NULL по умолчанию. В программе при чтении смотрится - если NULL , оставляется значение по умолчанию в структуре данных
 А это на что может повлиять ?
 
 Такие поля лучше делать "NOT NULL DEFAULT value", если конечно в программе специально не обрабатывается ситуация неопределенности. На удаление, по идее, повлиять не должно, но кто знает пути FB... Как минимум это дополнительная метаинформация в каждой строке. Просто у меня возникла такая мысль: если логическое удаление связано с UPDATE, то: * приводит ли UPDATE к физическому копированию строки? * влияет ли на этот процесс наличие NULL столбцов? Ну и классика: выполняй операцию порционно. Каждая порция начинается с запуска транзакции, выполнения операций над N строк и COMMIT. N находится экспериментально. Типично - от 1000 до 10000. |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 06:49 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #133 : 26-06-2012 06:53 »  |  | 
 
 Sla, FB 1.5 этого не  умеет. Алексей1153++, На скорость удаления могут влиять параметры Page Size, Forced Writes, Sweep interval
 |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #134 : 26-06-2012 07:27 »  |  | 
 
 попробовал:
 План
 PLAN (MESS_LOG INDEX (RDB$PRIMARY1))
 
 Адаптированный план
 PLAN (MESS_LOG INDEX (INTEG_1))
 
 50237 record(s) was(were) deleted from MESS_LOG
 
 ------ Информация о производительности ------
 Время подготовки запроса = 0ms
 Время выполнения запроса = 1s 312ms
 Current memory = 2 827 692
 Max memory = 3 043 668
 Memory buffers = 2 048
 Reads from disk to cache = 5 107
 Writes from cache to disk = 2 630
 Fetches from cache = 251 806
 
 мои:
 Forced writes=on
 Sweep interval=20000
 
 твой Page Size =1024
 |  
						| 
								|  |  
								| « Последнее редактирование: 26-06-2012 12:42 от Oldy » |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #135 : 26-06-2012 07:44 »  |  | 
 
 я этих настроек в конфиге не вижу что-то  |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #136 : 26-06-2012 08:00 »  |  | 
 
 Алексей1153++, при Page Size = 8192
 План
 PLAN (MESS_LOG INDEX (RDB$PRIMARY1))
 
 Адаптированный план
 PLAN (MESS_LOG INDEX (INTEG_1))
 
 50237 record(s) was(were) deleted from MESS_LOG
 
 ------ Информация о производительности ------
 Время подготовки запроса = 0ms
 Время выполнения запроса = 453ms
 Current memory = 17 508 488
 Max memory = 17 737 248
 Memory buffers = 2 048
 Reads from disk to cache = 643
 Writes from cache to disk = 0
 Fetches from cache = 251 289
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #137 : 26-06-2012 08:09 »  |  | 
 
 ну так как это настраивается ?  И почему, кстати, меньше страница - быстрее работа, не понимаю ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #138 : 26-06-2012 08:19 »  |  | 
 
 Не, Леш, есть проверенные практикой наиболее оптимальные размеры страниц. Это 4 и 8 кБ. Более мелкие страницы увеличивают объем IO. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #139 : 26-06-2012 08:23 »  |  | 
 
 Рома, это я понимаю. Но смотрю посты Олди и перестаю понимаю что-то )))
 И где это всё настраивается, тоже не знаю. В конфиге таких параметров не вижу
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Oldy | 
								|  | « Ответ #140 : 26-06-2012 08:25 »  |  | 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 С уважением, Oldy. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #141 :  26-06-2012 09:14 »   |  | 
 
 Олди, благодарю, увеличение страницы очень даже помогло! ) как-то так gbak -user uuu -pas ppp -r "1.fbk" "1.fdb" -o -v -p 8192 у меня на машине теперь делается за ~5 секунд (команда+коммит) на 50 тыс записей . то есть, у клиентов полмиллиона записей должны не более, чем за минуту сохраниться  у них всех железо покруче, вроде бы сейчас ЧОПы стараются обновляться ) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	|  |