powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Добавление поля в большую таблицу
30 сообщений из 30, показаны все 2 страниц
Добавление поля в большую таблицу
    #39439970
bazilio77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

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

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

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

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

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

если у него там мусор накопился, то вполне реально
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #39440239
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Bazilio77!

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

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

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

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


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

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

isc_dpb_no_garbage_collect
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #39441248
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441268
Фотография 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
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #39441397
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilio77Но в сухом остатке получаем что пока только backup/restore в критичных точках большого
может его ускорить.Свип сделай перед "большим"
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441501
bazilio77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladbazilio77Но в сухом остатке получаем что пока только backup/restore в критичных точках большого
может его ускорить.Свип сделай перед "большим"
Свип из скрипта? "большой" значило большой скрипт.
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441520
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilio77Свип из скрипта?Ну бекап-рестор "из скрипта" тебя же не смущает ?

И я так и не понял - ты обратил внимание, что CORE-5110 исправлен в 2.5.6 ?
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #39441742
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

тьфу, у тебя же isc_dpb_no_garbage_collect
:)
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441748
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilio77Вопрос про свип был - есть ли стандартные средства по его вызову из скрипта.shell gfix -sweep db;
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #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
Добавление поля в большую таблицу
    #39441799
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilio77Попробовал судя по всему свип не помогает, все равно update очень долго.
снял бы gstat -r, может, таблица сильно фрагментирована. Чего гадать, если инструменты есть???
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441800
bazilio77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

Попробуй этот скрипт с no_garbage_collect, 2.5.7 не работает
Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK2" on table "T".

проблема в delete

recreate table t (
id1 int not null,
id2 int,
constraint pk1 primary key (id1)
);
commit;

set term ^;

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

set term ;^

commit;

delete from t
where id1 < 10000;

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

update t set n = id1;
commit;

alter table t drop constraint pk1;
commit;

alter table t add constraint pk2 primary key (n);
commit;
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441802
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladон понимает no_garbage_collect в доп. пар-рах коннекта.
слава мне, если я правильно помню.
...
Рейтинг: 0 / 0
Добавление поля в большую таблицу
    #39441803
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilio77проблема в deleteЭто другое, это
http://tracker.firebirdsql.org/browse/CORE-405

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



Но самое интересное что мой скрипт на моей базе выдает
validation error for column value "*** null ***"

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


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