Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Добавление поля в большую таблицу / 25 сообщений из 30, страница 1 из 2
18.04.2017, 08:57
    #39439970
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Добрый день!

Ситуация в принципе ожидаемая, но тем не менее не ожидал такого значения времени исполнения.

1. FB 2.5 Имеем таблицу 20 млн записей. 6 полей.
2. Добавляем поле integer
3. Инициализируем поле значением.
выполнение этой операции заняло 3 часа. FW=OFF

Делаем после добавления поля backup/restore инициализация поля 96 секунд.
...
Рейтинг: 0 / 0
18.04.2017, 09:51
    #39440003
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Без показателей кол-ва мусора "до" и "после" будет гадание на кофейной гуще.
но тем не менее рекомендуется сунуть свип в крон в моменты наименьшей нагрузки на сервер.
...
Рейтинг: 0 / 0
18.04.2017, 11:58
    #39440116
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77Ситуация в принципе ожидаемая
Чтобы ожидать такую ситуацию, DBA должен был сделать что-то совершенно безумное типа
выставления флага no_reserve.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2017, 12:43
    #39440158
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77инициализация поля
имеется в виду update?

Вообще до и после таких операций надо gstat -r делать, а если только конкретная таблица, то и -t.
Но поскольку все это случается уже после того как - "мы сделали, а почему так получилось", то уже поздно.

С другой стороны, как-то я не очень верю, что update 20млн записей после рестора проходит за 1 мин 36 секунд.
...
Рейтинг: 0 / 0
18.04.2017, 12:44
    #39440159
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
kdv,

если у него там мусор накопился, то вполне реально
...
Рейтинг: 0 / 0
18.04.2017, 14:49
    #39440230
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
kdvbazilio77инициализация поля
имеется в виду update?

Вообще до и после таких операций надо gstat -r делать, а если только конкретная таблица, то и -t.
Но поскольку все это случается уже после того как - "мы сделали, а почему так получилось", то уже поздно.

С другой стороны, как-то я не очень верю, что update 20млн записей после рестора проходит за 1 мин 36 секунд.
Надо было наверное дополнить условия задачи.

Вся эта ситуация проявляется при процедуре обновления БД.
Наш сценарий обновления БД:

1. Резервное копирование средствами файловой системы
2. backup/restore
3. Прокручиваем кучу DDL и DML
4. backup/restore

Что происходит с этой таблицей.

1. Создается
2. Вставляется 20 млн записей из других таблиц
3. Создаются индексы
4. update всех записей по одному полю
5. возня удалили добавили, изменили довольно много
т.к между пунктом 1 и 6 куча ревизий с корректировкой данных в таблице
6. Добавили поле Integer
7. update

3 часа

если backup/restore

Statement executed in 96391 ms.
Updates: 17684077 Deletes: 0 Inserts: 0 Selects: 17684077.
...
Рейтинг: 0 / 0
18.04.2017, 14:50
    #39440231
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
[quot bazilio77]kdvпропущено...

если backup/restore

Statement executed in 96391 ms.
Updates: 17684077 Deletes: 0 Inserts: 0 Selects: 17684077.

если backup/restore перед добавлением поля то 110 секунд
...
Рейтинг: 0 / 0
18.04.2017, 15:06
    #39440239
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Hello, Bazilio77!

читай про MGA, про мусор, про его сборку.
у тебя перед добавление поля плодится туева хуча версий.
ты добавляешь поле.
апдейтишь его, сервер "видит" мусор и начинает его по ходу апдейта собирать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2017, 15:19
    #39440246
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77,

проделай эту операцию с выключенной сборкой мусора
...
Рейтинг: 0 / 0
18.04.2017, 15:41
    #39440265
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio775. возня удалили добавили, изменили довольно много т.к между пунктом 1 и 6 куча ревизий с
корректировкой данных в таблице
6. Добавили поле Integer

Сделать п.6 сразу после п.1 совсем не судьба?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2017, 15:50
    #39440272
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Dimitry Sibiryakovbazilio775. возня удалили добавили, изменили довольно много т.к между пунктом 1 и 6 куча ревизий с
корректировкой данных в таблице
6. Добавили поле Integer

Сделать п.6 сразу после п.1 совсем не судьба?..


Нет не судьба. Т.к. скрипт инкрементальный делаем новую версию бд пишем как перевести бд из текущей версии в следующую,
разница между 1 и 6 несколько лет.
Просто у одного из клиентов нужно было обновить версию 2008 года.
...
Рейтинг: 0 / 0
18.04.2017, 15:56
    #39440279
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Симонов Денисbazilio77,

проделай эту операцию с выключенной сборкой мусора
Не совсем понял это как?
...
Рейтинг: 0 / 0
18.04.2017, 16:04
    #39440289
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77,

isc_dpb_no_garbage_collect
...
Рейтинг: 0 / 0
19.04.2017, 21:29
    #39441233
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
Симонов Денисbazilio77,

isc_dpb_no_garbage_collect

Не помогает. Только хуже получается, лезут очень интересные ошибки:

CREATE SEQUENCE RCPREP_GEN;

alter table RCPREP
add concentrated BOOL default 0,
add RCPREP_ID ID;

update rcprep
set rcprep_id = gen_id(rcprep_gen, 1),
concentrated = iif(conc_pct <> 0, 1, 0);

Statement executed in 2500 ms.
Updates: 283446 Deletes: 0 Inserts: 0 Selects: 283446.

ALTER TABLE RCPREP
DROP CONSTRAINT RCPREP_PK,
ADD CONSTRAINT UNQ1_RCPREP UNIQUE (RCP_ID,RAW_ID);

ALTER TABLE RCPREP
ADD CONSTRAINT PK_RCPREP PRIMARY KEY (RCPREP_ID);

*** error ***
FAILED: The insert failed because a column definition includes validation constraints.Validation error for column RCPREP_ID, value "*** null ***".

Исходя из скрипта, такой ошибки не должно быть!
Убираем sc_dpb_no_garbage_collect все нормально.

При выполнении скрипта автокоммит после каждого выражения.
...
Рейтинг: 0 / 0
19.04.2017, 22:47
    #39441248
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
...
Рейтинг: 0 / 0
19.04.2017, 23:47
    #39441268
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77,

это сто лет как известная фишка, в первую очередь при "переиспользовании" значений ПК

" Possible scenario:

tx1: insert key 1
tx1: rollback
tx2: insert key 1

violation of PRIMARY or UNIQUE KEY constraint
"

insert в tx2 не собирает мусор от tx1, а ПК видит ключи от всех транзакций.
...
Рейтинг: 0 / 0
20.04.2017, 08:54
    #39441352
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
kdvbazilio77,

это сто лет как известная фишка, в первую очередь при "переиспользовании" значений ПК

" Possible scenario:

tx1: insert key 1
tx1: rollback
tx2: insert key 1

violation of PRIMARY or UNIQUE KEY constraint
"

insert в tx2 не собирает мусор от tx1, а ПК видит ключи от всех транзакций.

Это хорошо. Но в сухом остатке получаем что пока только backup/restore в критичных точках большого
может его ускорить.
...
Рейтинг: 0 / 0
20.04.2017, 10:16
    #39441397
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77Но в сухом остатке получаем что пока только backup/restore в критичных точках большого
может его ускорить.Свип сделай перед "большим"
...
Рейтинг: 0 / 0
20.04.2017, 12:15
    #39441501
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
hvladbazilio77Но в сухом остатке получаем что пока только backup/restore в критичных точках большого
может его ускорить.Свип сделай перед "большим"
Свип из скрипта? "большой" значило большой скрипт.
...
Рейтинг: 0 / 0
20.04.2017, 12:42
    #39441520
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77Свип из скрипта?Ну бекап-рестор "из скрипта" тебя же не смущает ?

И я так и не понял - ты обратил внимание, что CORE-5110 исправлен в 2.5.6 ?
...
Рейтинг: 0 / 0
20.04.2017, 15:32
    #39441699
bazilio77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
hvladbazilio77Свип из скрипта?Ну бекап-рестор "из скрипта" тебя же не смущает ?

И я так и не понял - ты обратил внимание, что CORE-5110 исправлен в 2.5.6 ?

Вопрос про свип был - есть ли стандартные средства по его вызову из скрипта.
Расширить скрипт новым словом sweep_database не проблема..
Попробовал судя по всему свип не помогает, все равно update очень долго.


Сейчас проверил 2.5.7.27050 embedded c no_garbage_collect
The insert failed because a column definition includes validation constraints.
validation error for column RCPREP_ID, value "*** null ***".
...
Рейтинг: 0 / 0
20.04.2017, 16:29
    #39441741
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77,

Код: sql
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.
SQL> recreate table t (id int primary key);
SQL>
SQL> set term ^;
SQL> execute block as
CON> declare i int = 0;
CON> begin
CON>   while (i < 1000000) do
CON>   begin
CON>     insert into t values (:i);
CON>     i = i + 1;
CON>   end
CON> end
CON> ^
SQL> set term ;^
SQL>
SQL> commit;
SQL> alter table t add n int default -1 not null;
SQL> update t set n = id;
SQL> commit;
SQL> show table t;
ID                              INTEGER Not Null
N                               INTEGER Not Null default -1
CONSTRAINT INTEG_10:
  Primary key (ID)
SQL> alter table t drop constraint integ_10;
SQL> alter table t add constraint pk2 primary key (n);
SQL> exit;



PS где у тебя commit после update ?
...
Рейтинг: 0 / 0
20.04.2017, 16:30
    #39441742
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
hvlad,

тьфу, у тебя же isc_dpb_no_garbage_collect
:)
...
Рейтинг: 0 / 0
20.04.2017, 16:33
    #39441748
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
bazilio77Вопрос про свип был - есть ли стандартные средства по его вызову из скрипта.shell gfix -sweep db;
...
Рейтинг: 0 / 0
20.04.2017, 16:41
    #39441753
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в большую таблицу
hvladhvlad,

тьфу, у тебя же isc_dpb_no_garbage_collect
:)Впрочем, всё равно - нет ошибки.
Попробовал с IBE - он понимает no_garbage_collect в доп. пар-рах коннекта.

Код: sql
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.
recreate table t (
  id int not null,
  constraint pk1 primary key (id)
);
commit;

execute block as
declare i int = 0;
begin
  while (i < 1000000) do
  begin
    insert into t values (:i);
    i = i + 1;
  end
end
commit;

alter table t add n int default -1 not null;
commit;

update t set n = id;
commit;

alter table t drop constraint pk1;
commit;

alter table t add constraint pk2 primary key (n);
commit;

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


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