powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ускорить работу INSERT (faq читан)
25 сообщений из 68, страница 2 из 3
Ускорить работу INSERT (faq читан)
    #33020089
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v fabr документация PG...
Гы. А полную версию можно?
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020118
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://www.postgresql.org/docs/8.0/interactive/tutorial-transactions.html

где ж еще ;-)))
---------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020130
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrhttp://www.postgresql.org/docs/8.0/interactive/tutorial-transactions.html

где ж еще ;-)))
---------------------------
жизнь как пестня
Понятно что здесь. Кстати, ту же доку можно найти в каталоге PG. Непонятно только зачем вы представили публике вырезку про транзакции. Там написано всего лишь, что запросы можно оформлять в блоки и подтверждать/откатывать не один запрос, а несколько. Еще там написано, что каждый запрос является по сути блоком. Иначе говоря, при появлении ошибки в запросе, обрабатывающем несколько строк откатывается обработка всех строк. Короче, ничего нового.

ЗЫ: здается мне, что драйвер, который Вы используете не умеет работать с параметрами. По коду очень похоже на то, что он просто подставляет значения строк в запрос, делая предварительно Escape. Если так, то запрос на вставку будет парситься сервером каждый раз заново. Гыыыы.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020139
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПонятно что здесь. Кстати, ту же доку можно найти в каталоге PG.

не туже на сайте есть вещи которые в доке не описаны

авторНепонятно только зачем вы представили публике вырезку про транзакции. Там написано всего лишь, что запросы можно оформлять в блоки и подтверждать/откатывать не один запрос, а несколько. Еще там написано, что каждый запрос является по сути блоком .

вот именно блоком! а привел не всем а вам потому что вы начали советовать COMMIT ...

авторздается мне, что драйвер, который Вы используете не умеет работать с параметрами. По коду очень похоже на то, что он просто подставляет значения строк в запрос, делая предварительно Escape. Если так, то запрос на вставку будет парситься сервером каждый раз заново. Гыыыы.

мужчина проблема с инсертами была не у меня (у меня как раз ничего не тормозит поэтому меня эта ситуация и удивляет) я вместо рассуждений сделал тест который дал результаты если они вас чемто не устраивают буду благодарен за конструктивную критику. мой драйвер делает все что нужно (и символы эскейпит тоже) и как раз анализатору скармливаются только параметры а используется подготовленный запрос и посылается он 1 раз в самом начале так что тут все нормально (зачем по вашему конструкция st.setString("") и st.setInt(int) ???)

и еще не надо нас тут файрбердом пугать и как придут так и уйдут FB как вы выразились ;-))

PS
я еще год назад выбирал между FB и PostgrSQL выбор сделан! PG и ничуть не жалею (еслиб я на дельфи писал (восхищенно) ... а так бедная никому не нужная ява :'-(( (рыдает) )
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020168
neko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребят тут речь шла о заполнение чистой базы
видимо upgrade сервера или установка какого-нибудь приложения
а вы сюда потерю соединения приплепи
если у кого-то теряется соединение с localhost, тут проблемы посерьезнее...

и делать это надо через COPY, это самое важное при загрузки большого количества данных
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020177
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тоесть надо из одной базы (например) все прочитать и записать в файлик а потом сделать copy? так чтоли?
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020556
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не я начал топик, но проблема сходная.
nekoребят тут речь шла о заполнение чистой базы
видимо upgrade сервера или установка какого-нибудь приложения
а вы сюда потерю соединения приплепи
если у кого-то теряется соединение с localhost, тут проблемы посерьезнее...
Не upgrade а куча датчиков крунлоситочно валящих данные.
и на с лосал хост а с разных хостов и от разных процессов на этих хостах.
по этому и есть проблема обрыва сессиии и хотелось бы при этом поменьше данных терять.

А проблема все таки в том что в большую таблицу инсерты тормозят.
Данные ложаться посредством вызова ХП. потом проходят через пару таблиц и только потом в архив.
т.е. инсерты делаются как обычные инсерты на plpgsql.
что тут не так?
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33020572
Fabrichenko Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так вы вот про какие сессии ... не всеравно к базе 1 коннект а от датчиков только проблемы с данными (проверять если от датчика пришел null то и не писать в базу ничего)

а вот с ХП надо подумать ...
plsql это не совсем sql он рядом да не совсем ... ты спроси у программера как я сказал (а еще лучше сделайте тестик если конечно возможность есть) ... напиши как результаты а потом можно будет дальше думать
-------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33021261
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabr авторНепонятно только зачем вы представили публике вырезку про транзакции. Там написано всего лишь, что запросы можно оформлять в блоки и подтверждать/откатывать не один запрос, а несколько. Еще там написано, что каждый запрос является по сути блоком .
вот именно блоком! а привел не всем а вам потому что вы начали советовать COMMIT ...
Кто - то из нас двоих тупит. Блок - по сути вложенная транзакция. Она коммитится в рамках внешней. А внешняя при этом остается неподтвержденной (если конечно не используется что - то типа автокоммита). Я не юзал драйвер, который вы указали, поэтому не вполне уверен в том как он коммитит изменения, но то, что при множественной вставке коммиты необходимо оптимизировать отдельно - факт. Причем это актуально для SQL - сервера любого типа (для тех, кто в танке повторюсь - коммит каждой записи тоже не есть гуд).
vfabr авторздается мне, что драйвер, который Вы используете не умеет работать с параметрами...мужчина проблема с инсертами была не у меня (у меня как раз ничего не тормозит... ... используется подготовленный запрос и посылается он 1 раз в самом начале так что тут все нормально (зачем по вашему конструкция st.setString("") и st.setInt(int) ???)Говорить можно долго. Я могу и ошибаться. Рассудить нас может только SQL-монитор.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33021556
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozБлок - по сути вложенная транзакция.
кхм. по моим ощущениям никаких вложенных транзакций в постгрессе нет (т.е. не было в 7.ххх. из за чего, кстати, в нем куча траблов с руле и т.п.). В 8-м появилось что-то типа точек возврата (но это - внутри _одной транзакции_). Но не смотрел - врать не буду. Если я ошибаюсь - поправьте.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33022042
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2oz

http://www.postgresql.org/docs/8.0/interactive/sql-begin.html

сходите и почитайте про транзакции (тупит кто-то 100% ;-) )
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33022061
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oz(для тех, кто в танке повторюсь - коммит каждой записи тоже не есть гуд

проблема была не в том чтобы ускорить инсерт, а в том чтобы доказать что с ростом таблицы при больших инсертах ничего не тормозит (те по болту что 10 записей вставлять что 1000000 зависимость линейная!!!)
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33024103
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To vfabr
провел тест. правда визуально смотрел на бегущие инсерты, через часа три бегут значительно медленне :)

Не могли бы вы повторить свой тест обвязав таблицу индексами, о двум трем полям.

P.S. А hesh индекс термоядрен.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33024119
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приведи код с клиента на котором тестил
(неважно какой язык)
полностью еще лучше будет (файлик приложи например)

и DDL таблицы со всеми индексами и прочей фигней а то так тестить безтолку
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33024962
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прога
Код: plaintext
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.
#!/usr/local/bin/python

import pg;
import time;

id =    [ 1 ,   2 ,   3 ,   4 ,   5 ];
data =  [ 1 . 1 , 2 . 2 , 3 . 3 , 4 . 4 , 5 . 5 ];
step =  0 . 2 ;
limit =  100 ;
delay1 =  0 ;
delay2 =  0 ;

def touch(pos):
        db = pg.connect('alexs_beta','localhost',- 1 ,None,None,'admin','123456');
        ret = db.query('select dev.put_data(%d, 0, %f, 0, 0, 0, 0)' % (id[i],data[i]));
        db.close();
        data[i] = data[i]+step;
        if data[i]>=limit:
                data[i] =  0 ;

while ( 1 ):
        for i in range( 0 ,len(id)):
                touch(i);
                print '[%3d] = %.2f' % (id[i],data[i]);
                time.sleep(delay1);
        time.sleep(delay2);

Фнкция dev.put_data

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE OR REPLACE FUNCTION dev.put_data(int4, int4, float8, int4, int4, int4, int4)
  RETURNS bool AS
$BODY$
begin
update dev.current_data set datatime = now(), error = $ 2 , data1 = $ 3 , mode_id = $ 4 , status = $ 5  where id = $ 1 ;
return true;
end;

Далее срабатывает триггер, данные обрабатываются..

И функция инсерт данных в архив, вызываемая триггером

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION arh.main(int4, int4, "timestamp", float8, int4, int4, int4, int4, int4, int4)
  RETURNS bool AS
$BODY$
insert into arh.base_temp1 (id, error, datatime, data, data_type, mode_id, status_old, status_new, owner_id, teh_uid)
  values ($ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 , $ 7 , $ 8 , $ 9 , $ 10 );
return true;
end;
$BODY$
  LANGUAGE 'plpgsql'
Архивная таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE arh.base_temp1
(
  id int4 NOT NULL,
  datatime timestamp DEFAULT now(),
  error int4,
  data float8,
  data_type int4,
  mode_id int4,
  status_old int4,
  status_new int4,
  owner_id int4,
  teh_uid int4
) 
WITH OIDS;

CREATE INDEX base_index
  ON arh.base_temp1
  USING btree
  (error, datatime, id);
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025048
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
аг постараюсь побыстрее
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025105
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Алексей Ключников: Приведите еще плиз структуру таблицы dev.current_data (конечно с индексами,..).
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025142
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE dev.current_data
(
  id int4 NOT NULL,
  data1 float8,
  data2 float8,
  data3 float8,
  data4 float8,
  data5 float8,
  error int4,
  status int4,
  mode_id int4,
  datatime timestamp
)

CREATE INDEX dev.index_id_curdata
  ON current_data
  USING btree
  (id);

Таблица представляет собой срез текущих данных.
т.е. содержит 200 строк в которые производиться только update,
IHMO от индексов здесь не мого зависит.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025803
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для апдейтов наблюдается замедление

select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 7.3.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
(1 row)

CREATE TABLE temp1
(
id int4 NOT NULL,
data1 float8,
data2 float8,
data3 float8,
data4 float8,
data5 float8,
error int4,
status int4,
mode_id int4,
datatime timestamp
);

CREATE INDEX temp1_id
ON temp1
USING btree
(id);

insert into temp1 values ( 1 );
insert into temp1 select id+2^0 from temp1;
insert into temp1 select id+2^1 from temp1;
insert into temp1 select id+2^2 from temp1;
insert into temp1 select id+2^3 from temp1;
insert into temp1 select id+2^4 from temp1;
insert into temp1 select id+2^5 from temp1;
insert into temp1 select id+2^6 from temp1;
insert into temp1 select id+2^7 from temp1;

+++

$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m1.824s
user 0m0.290s
sys 0m0.070s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m18.317s
user 0m1.970s
sys 0m0.710s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 4m59.599s
user 0m20.010s
sys 0m6.200s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m3.541s
user 0m0.260s
sys 0m0.070s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m21.036s
user 0m2.020s
sys 0m0.670s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 5m32.434s
user 0m19.560s
sys 0m6.620s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m3.114s
user 0m0.160s
sys 0m0.090s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m24.179s
user 0m2.040s
sys 0m0.630s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 6m5.858s
user 0m20.600s
sys 0m6.120s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m3.574s
user 0m0.280s
sys 0m0.100s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m27.060s
user 0m1.930s
sys 0m0.760s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 6m38.702s
user 0m20.120s
sys 0m6.940s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m3.854s
user 0m0.260s
sys 0m0.030s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m30.249s
user 0m1.910s
sys 0m0.720s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 7m7.648s
user 0m20.830s
sys 0m6.410s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m4.166s
user 0m0.320s
sys 0m0.100s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m33.677s
user 0m2.840s
sys 0m0.950s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=100000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 7m42.562s
user 0m20.670s
sys 0m6.670s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=1000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m4.339s
user 0m0.250s
sys 0m0.090s
$ time perl -e 'printf "begin;\n"; for (my $i=1; $i<=10000; $i++) { printf "update temp1 set datatime = now(), error = %d, data1 = %f, mode_id = %d, status = %d where id = %d;\n", rand(10), rand(10), rand(), rand(1000), 1+rand(256); } printf "commit;\n";' | psql >/dev/null

real 0m36.375s
user 0m1.590s
sys 0m0.470s

+++

drop table temp1;
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025866
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весьма показательно. спасибо.
тут надо справляться вакумированием.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33025885
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, еще и reindex-ом.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33026263
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но есть подозрение что проблема не только в этом
т.к. вакум делается 3 раза в сутки.
тыт мы видим на 700000 строк уменьшение быстродействия в два раза.
а я наблюдаю (субьективно конечно:) на порядок.
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33026801
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключниковтыт мы видим на 700000 строк уменьшение быстродействия в два раза.
а я наблюдаю (субьективно конечно:) на порядок.Но вы писали: "смотрел на бегущие инсерты, через часа три бегут значительно медленне". Сколько строк было обработано в вашем тесте за три часа?
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33026968
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напоминаю - PostgreSQL
сервер с версионной архитектурой..
в даенном случае судя по коду , идет заливка большого массива данных
и на каждый инсерт срабатывает триггер который делает
update таблицы dev.current_data
Так вот - каждый update - рождает в таблице dev.current_data
новую версию записи..
соответвенно при моллионе вставленных записей
будет миллион версий записей в dev.current_data,
притом при всем что видимых будет как и было около 200...
Чем больше версий записей- тем медленней идет поиск
даже по индексам...т.к. индекс указывает на первую версию записи
,после чего ищется нужная версия записи путем перебора всех версий..
теперь понятно почему идет замедление?
Теперь скажу как бы я избавился от этого..
1.- Лочим таблицу dev.current_data
2- Делаем массив в памяти - куда переносим все данные из
dev.current_data
3- в триггере изменяем не таблицу а этот массив..
4- сбрасываем массив в dev.current_data
.....
Мнения?
...
Рейтинг: 0 / 0
Ускорить работу INSERT (faq читан)
    #33027178
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanixТак вот - каждый update - рождает в таблице dev.current_data
новую версию записи..
соответвенно при моллионе вставленных записей
будет миллион версий записей в dev.current_data,
притом при всем что видимых будет как и было около 200...Такая картина будет после завершения транзакций?

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

domanixТеперь скажу как бы я избавился от этого..
1.- Лочим таблицу dev.current_data
2- Делаем массив в памяти - куда переносим все данные из
dev.current_data
3- в триггере изменяем не таблицу а этот массив..
4- сбрасываем массив в dev.current_data
.....
Мнения?pg_autovacuum?
...
Рейтинг: 0 / 0
25 сообщений из 68, страница 2 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ускорить работу INSERT (faq читан)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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