Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 4 [5]   Вниз
  Печать  
Автор Тема: Firebird+ODBC  (Прочитано 150287 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Молодой специалист

ru
Offline Offline

« Ответ #121 : 26-06-2012 04:16 » 

Цитата: Dale
Странно, что отключение индекса не замедляет удаление записей, выбранных по индексированному полю. Разница должна быть существенной

не знаю птицу и говорю по аналогии с 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 Only
THINK!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #123 : 26-06-2012 05:20 » 

Алексей1153++, попробуй создать DESC индекс на поле MESSAGE_ID. Сравни планы когда MESSAGE_ID - РК и когда у MESSAGE_ID есть DESC индекс. 
Записан

С уважением, Oldy.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #124 : 26-06-2012 05:28 » 

Oldy, такое уже было - на предыдущей странице. Результат един.

Леш, а можно создать ключ, целостность которого обеспечивается движком базы? Ну просто очень медленно. Я вчера создал твою таблицу в MySQL 5.5, заполнял на 50 и 100 тыс записей и удалял с индексом и без: разброс составил 0.8-1.0 сек.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #125 : 26-06-2012 05:32 » 

Прошу прощения. Куда смотрел?
Записан

С уважением, Oldy.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #126 : 26-06-2012 05:35 » 

RXL, Oldy, вот результаты и без индекса, и с ключом+индекс .  Время не отличается

(click to show)
(click to show)

я щас попробую поставить птицу 2,5,1

но как потом заставить клиентов перейти на неё - это вопрос открытый

Ром, за MySQL я и не сомневаюсь, уже была возможность оценить Улыбаюсь

* 50000_1.PNG (15.2 Кб - загружено 1564 раз.)
* 50000_2.PNG (25.85 Кб - загружено 1497 раз.)
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #127 : 26-06-2012 05:40 » 

Леш, скажи, а почему у тебя почти все поля NULL? Сущности в программе имеют аналогичное поведение - с неопределенностью?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #128 : 26-06-2012 06:12 » 

Таблица разрасталась, когда добавлялись новые поля - они, естественно NULL по умолчанию. В программе при чтении смотрится - если NULL , оставляется значение по умолчанию в структуре данных

А это на что может повлиять ?

Добавлено через 13 минут и 42 секунды:
с птицей 2.5.1 запрос выполнился за 41 секунду , но зато коммит мгновенный. Итого, с минуты снизили время до 41 секунды. 

Ерунда же всё равно...
« Последнее редактирование: 26-06-2012 06:26 от Алексей1153 » Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #129 : 26-06-2012 06:31 » 

А может птица себя так ведет при удалении записей?

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

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #130 : 26-06-2012 06:31 » 

кому не лень, попробуйте у себя (пароль к закачке в ЛС скину сейчас )

http://zalil.ru/33506486


Добавлено через 19 секунд:
А если создать программный курсор и удалять по одной записи - что будет со временем?
а как это делается ?
« Последнее редактирование: 26-06-2012 06:31 от Алексей1153 » Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #132 : 26-06-2012 06:43 » new

Таблица разрасталась, когда добавлялись новые поля - они, естественно NULL по умолчанию. В программе при чтении смотрится - если NULL , оставляется значение по умолчанию в структуре данных

А это на что может повлиять ?

Такие поля лучше делать "NOT NULL DEFAULT value", если конечно в программе специально не обрабатывается ситуация неопределенности.
На удаление, по идее, повлиять не должно, но кто знает пути FB... Как минимум это дополнительная метаинформация в каждой строке. Просто у меня возникла такая мысль: если логическое удаление связано с UPDATE, то:
* приводит ли UPDATE к физическому копированию строки?
* влияет ли на этот процесс наличие NULL столбцов?

Ну и классика: выполняй операцию порционно. Каждая порция начинается с запуска транзакции, выполнения операций над N строк и COMMIT. N находится экспериментально. Типично - от 1000 до 10000.
« Последнее редактирование: 26-06-2012 06:49 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #133 : 26-06-2012 06:53 » 

Sla, FB 1.5 этого не  умеет.
Алексей1153++, На скорость удаления могут влиять параметры Page Size, Forced Writes, Sweep interval
Записан

С уважением, Oldy.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #135 : 26-06-2012 07:44 » 

я этих настроек в конфиге не вижу что-то
Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #137 : 26-06-2012 08:09 » 

ну так как это настраивается ?  И почему, кстати, меньше страница - быстрее работа, не понимаю )
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #138 : 26-06-2012 08:19 » 

Не, Леш, есть проверенные практикой наиболее оптимальные размеры страниц. Это 4 и 8 кБ. Более мелкие страницы увеличивают объем IO.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #139 : 26-06-2012 08:23 » 

Рома, это я понимаю. Но смотрю посты Олди и перестаю понимаю что-то )))

И где это всё настраивается, тоже не знаю. В конфиге таких параметров не вижу
Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #140 : 26-06-2012 08:25 » 

Алексей1153++,
http://www.ibase.ru/ibfaq.htm#fwoff
http://www.ibase.ru/devinfo/garbage.htm
Записан

С уважением, Oldy.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #141 : 26-06-2012 09:14 » 

Олди, благодарю, увеличение страницы очень даже помогло! )

как-то так
gbak -user uuu -pas ppp -r "1.fbk" "1.fdb" -o -v -p 8192

у меня на машине теперь делается за ~5 секунд (команда+коммит) на 50 тыс записей . то есть, у клиентов полмиллиона записей должны не более, чем за минуту сохраниться

у них всех железо покруче, вроде бы сейчас ЧОПы стараются обновляться )
Записан

Страниц: 1 2 3 4 [5]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines