Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ухудшение производительности при заполнении значений столбца / 17 сообщений из 17, страница 1 из 1
01.07.2015, 10:46
    #38996595
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Имеется таблица с 3 млн. записей. В таблице есть поле GUID CHAR(32), все значения - NULL. Запрос select count(*) для этой таблицы выполняется за 5 секунд. После того, как для каждой записи проставили значение поля GUID, запрос select count(*) стал отрабатывать более часа. Индекс на это поле есть. После выполнения backup-restore базы, производительность восстанавливается до исходной. В чем может быть причина такого падения производительности и как ее избежать?
...
Рейтинг: 0 / 0
01.07.2015, 10:57
    #38996612
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
InterloperВ чем может быть причина такого падения производительности и как ее избежать?Мусор. Не избежать никак, апдейт гарантирует появление мусора. надо один раз убрать. бэкап-рестор для этого как из пушки по воробью, но таки да, мусор он уберет гарантированно.
Если нет заинтересованных транзакций, то можно просто прогнать неиндескное чтение по таблице, ну или свип запустить.

InterloperGUID CHAR(32),странный гуид, 16 октетс чаров понимаю, 36 чаров для хуман ридебл понимаю, 32 не понимаю.
...
Рейтинг: 0 / 0
01.07.2015, 11:21
    #38996638
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
InterloperПосле выполнения backup-restore базы, производительность восстанавливается до исходной.

Она и без b/r восстановится достаточно собрать мусор.

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

Кстати какая версия сервера?
...
Рейтинг: 0 / 0
01.07.2015, 11:51
    #38996685
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Симонов ДенисInterloperПосле выполнения backup-restore базы, производительность восстанавливается до исходной.

Она и без b/r восстановится достаточно собрать мусор.

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

Кстати какая версия сервера?

Операция одноразовая, но новые записи в данную таблицу будут добавляться уже с заполненным GUID.
Версия сервера - 1.5.
...
Рейтинг: 0 / 0
01.07.2015, 11:53
    #38996688
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Каким образом можно инициировать сборку мусора непосредственно из скрипта?
...
Рейтинг: 0 / 0
01.07.2015, 11:59
    #38996699
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Hello, Interloper!
You wrote on 1 июля 2015 г. 11:58:09:

Interloper> Каким образом можно инициировать сборку мусора непосредственно из
скрипта?так же как ты её стартовал каунтом.
только перед этим не забудь закоммитить обновления.
чтобы каунт бежал в новой транзакции, собирая мусор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.07.2015, 12:07
    #38996713
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Interloper,

замечание о том, что произошло.
скорее всего ты сначала создал индекс по столбцу, где все 3млн значений были null. Потом сделал update с guid. В результате в индексе остался ключ null, указывающий на все 3 млн записей. Из-за чего при сборке мусора на каждую запись сервер искал номер этой записи в ключе из 3млн номеров записей.

Поэтому такие массовые операции надо делать без индексов, особенно по таким неуникальным столбцам. Гораздо быстрее будет
- сделать апдейт
- убрать мусор
- создать индекс.

до сборки мусора создавать индекс не стоит, потому что индекс проиндексирует все версии, в т.ч. "мусорные", и будет опять та же фигня.
...
Рейтинг: 0 / 0
01.07.2015, 12:09
    #38996716
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Interloper,

ну там дело совсем дрянь. У тебя индекс первоначально построен на поле с единственным значением NULL. В 1.5 сборка мусора в индексе с большим числом дубликатов ключей конкретный тормоз.

Можно было сначала грохнуть или отрубить индекс (если конечно есть возможность), потом обновить записи и сделать сборку мусора, а потом врубить его обратно. Так быстрее будет.
...
Рейтинг: 0 / 0
01.07.2015, 12:24
    #38996744
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Симонов Денис,

Попробовали такую последовательность действий:
1. Отключить индекс
2. Сделать update
3. Включить индекс

Работает нормально. Получается, сборку мусора можно явно не делать, она сама собой произойдет в процессе работы с таблицей?
...
Рейтинг: 0 / 0
01.07.2015, 12:27
    #38996757
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
InterloperПолучается, сборку мусора можно явно не делать, она сама собой произойдет в процессе работы с таблицей?Странное понимание, говорят одно, а человек понимает совершенно другое. Да, мусор в процессе уберется в любом случае, только этот "случай" может возникнуть в самый неподходящий момент.

Еще почитай про термин "версия" и "мусор" в какой момент что рождается и когда меняет свой статус.
...
Рейтинг: 0 / 0
01.07.2015, 12:32
    #38996761
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
...
Рейтинг: 0 / 0
01.07.2015, 12:43
    #38996778
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Interloper
Попробовали такую последовательность действий:


1. Отключить индекс
2. Сделать update
3. Сделать сборку мусора (это ты забыл)
4. Включить индекс

Ты бы хоть читал что тебе пишут. А вообще надо было как то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
alter MyTable add GUID CHAR(32);

update MyTable -- где ты GUID проставишь

commit;

select count(*) from MyTable;

commit;

create index -- или PK. хз что там у тебя на GUID



Как и говорил kdv
...
Рейтинг: 0 / 0
01.07.2015, 12:44
    #38996781
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
InterloperСимонов Денис,

Попробовали такую последовательность действий:
1. Отключить индекс
2. Сделать update
3. Включить индекс

Работает нормально. Получается, сборку мусора можно явно не делать, она сама собой произойдет в процессе работы с таблицей?В данном сценарии мусор соберётся на 3-м шаге (есс-но, если OST не застряла)
...
Рейтинг: 0 / 0
01.07.2015, 13:09
    #38996815
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Симонов Денис,

При включении индекса разве мусор не уберется?
...
Рейтинг: 0 / 0
01.07.2015, 13:10
    #38996819
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Interloper,

Влад говорит что уберется. Но это если у тебя не застряло никаких транзакций, которые будут препятствовать сборке мусора. Прочитай уже статьи про мусор, сборку мусора и версионность.
...
Рейтинг: 0 / 0
01.07.2015, 13:12
    #38996823
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Interloper,

уберётся. Как и сказал Влад. Главное что ты должен понять так это то, что не надо создавать индекс раньше времени.
...
Рейтинг: 0 / 0
01.07.2015, 15:22
    #38996977
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ухудшение производительности при заполнении значений столбца
Симонов Денис,

Это я понял. Спасибо.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ухудшение производительности при заполнении значений столбца / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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