powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Postgres не хочет юзать память
25 сообщений из 75, страница 2 из 3
Postgres не хочет юзать память
    #39463706
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursido,

смелое предположение.
зависит от того, умеет ли пж делать not in как антиджойн. и если умеет -- то когда.

когда-то в сильно раньшие времена точно не умел. но вода течет. колхозники пашут. трава жухнет. а sun тускнеет.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463716
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq...
зависит от того, умеет ли пж делать not in как антиджойн. и если умеет -- то когда.
...

Автор уже сообщал, что сдался после трех часов ожидания. По внешним признакам - в конкретной ситуации PG не смог по антидждойну (или не захотел). (Исходный запрос: 20528831 ; ответ автора: 20530078 )
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463720
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursido,

и теперь скажите, зачем вы мешаете мне увидеть план урезанного запроса ?
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463724
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqursido,

и теперь скажите, зачем вы мешаете мне увидеть план урезанного запроса ?

Подозреваю, что автор честно пытается его получить прямо сейчас. Просто план еще не готов (EXPLANE ANALYZE, да-да. Не какой-нибудь EXPLANE). Проявите терпение.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463734
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursidoEXPLANE ANALYZE, да-да. Не какой-нибудь EXPLANEуели
но я ожидаю увидеть вклад триггеров. возможно -- напрасно.
т.ч. попросит EXPLAINE без ANALYZE -- в вашей власти. но вы, вместо этого, занялись привычным для себя делом
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463743
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Смотрите 20528681 .

\d log_write

триггеров не показывает.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463758
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq2. или за один проход for loop по сортированному набору. (факультативно, тут скорее всего это не интересно)
Код: plaintext
ORDER BY lw_table_name , lw_rec_id [, id DESC ]
//один раз тратитесь на сорт, а удаляете позаписно по id или по ctid


примерно так:
Код: 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.
29.
30.
31.
32.
33.
34.
35.
CREATE or replace FUNCTION f_delete_notmax() RETURNS void
    LANGUAGE plpgsql
    AS $$
DECLARE
	_rec1 record  ;
	_rec_id integer  ;
	_max_id integer;
	_table_name varchar(32) ;
BEGIN

	for _rec1 in
	    select /*ctid,*/ id, lw_table_name,lw_rec_id 
	    from log_write
	    ORDER BY lw_table_name , lw_rec_id , id DESC 
	loop
		IF _table_name = _rec1.lw_table_name
			AND _rec_id= _rec1.lw_rec_id
		THEN
			/* но лучше в автономии dblink 
			, чтобы при снятии задачи
			проделанная работа не пропадала
			*/
			DELETE FROM log_write
			WHERE --log_write.ctid = rec1.ctid
				 log_write.id = rec1.id;
		ELSE --первая запись группы ORDER by id DESC
			_table_name := _rec1.lw_table_name;
			_rec_id := _rec1.lw_rec_id;
		end if;
		
	end loop;

	delete from log_write where lw_table_name='schedules' ;
END;
$$ security definer ;
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463810
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
Delete on log_write (cost=9.15..17.18 rows=1 width=6) (actual time=0.167..0.167 rows=0 loops=1)
-> Index Scan using lw_table_name on log_write (cost=9.15..17.18 rows=1 width=6) (actual time=0.158..0.158 rows=0 loops=1)
Index Cond: ((lw_table_name)::text = 'any_lw_table_name'::text)
Filter: (NOT (hashed SubPlan 1))
SubPlan 1
-> HashAggregate (cost=8.58..8.59 rows=1 width=21) (never executed)
Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
-> Index Scan using lw_table_name on log_write log_write_1 (cost=0.56..8.57 rows=1 width=21) (never executed)
Index Cond: ((lw_table_name)::text = 'any_lw_table_name'::text)
Planning time: 1.120 ms
Execution time: 0.526 ms
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463814
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an2k...
Index Cond: ((lw_table_name)::text = 'any_lw_table_name'::text)
...

Товарищ! Вы явно перегрелись. Сделайте паузу.
Вас просили сделать немного (а точнее, очень сильно) другое.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463817
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
                                                           QUERY PLAN                                                            
---------------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=9.15..17.18 rows=1 width=6) (actual time=0.054..0.054 rows=0 loops=1)
   ->  Index Scan using lw_table_name on log_write  (cost=9.15..17.18 rows=1 width=6) (actual time=0.050..0.050 rows=0 loops=1)
         Index Cond: ((lw_table_name)::text = 'any_lw_table_name'::text)
         Filter: (NOT (hashed SubPlan 1))
         SubPlan 1
           ->  HashAggregate  (cost=8.58..8.59 rows=1 width=21) (never executed)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..8.57 rows=1 width=21) (never executed)
                       Index Cond: ((lw_table_name)::text = 'any_lw_table_name'::text)
 Planning time: 0.407 ms
 Execution time: 0.185 ms
(11 строк)
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463857
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an2k,

автордля какого-нить существующего 'any_lw_table_name', но не самого частого.

думаю литерал 'any_lw_table_name' у вас в значениях lw_table_name отсутствует.
найдите какое -нить сущ-ее значение lw_table_name , не самое частое и повторите вывод подставив его значение ВМЕСТО 'any_lw_table_name' в исходный скрипт. (можете для начала опустить словцо ANALYZE )
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463891
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
                                                                              QUERY PLAN                                                                               
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=45099.01..90120.78 rows=7361 width=6) (actual time=289.060..289.060 rows=0 loops=1)
   ->  Index Scan using lw_table_name on log_write  (cost=45099.01..90120.78 rows=7361 width=6) (actual time=289.057..289.057 rows=0 loops=1)
         Index Cond: ((lw_table_name)::text = 'students'::text)
         Filter: (NOT (hashed SubPlan 1))
         Rows Removed by Filter: 29613
         SubPlan 1
           ->  HashAggregate  (cost=45022.32..45083.23 rows=6091 width=21) (actual time=241.065..251.146 rows=29613 loops=1)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..44911.90 rows=14722 width=21) (actual time=0.087..213.062 rows=29613 loops=1)
                       Index Cond: ((lw_table_name)::text = 'students'::text)
 Planning time: 3.927 ms
 Execution time: 290.153 ms
(12 строк)
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463893
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

а это без ANALYZE

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
                                                       QUERY PLAN                                                       
------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=45099.01..90120.78 rows=7361 width=6)
   ->  Index Scan using lw_table_name on log_write  (cost=45099.01..90120.78 rows=7361 width=6)
         Index Cond: ((lw_table_name)::text = 'students'::text)
         Filter: (NOT (hashed SubPlan 1))
         SubPlan 1
           ->  HashAggregate  (cost=45022.32..45083.23 rows=6091 width=21)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..44911.90 rows=14722 width=21)
                       Index Cond: ((lw_table_name)::text = 'students'::text)
(9 строк)
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39463906
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an2k,

Таким образом, имеем:
20 млн строк на 30 таблиц (точнее, 32). На одну таблицу должно выходить где-то 600 тыс строк. В приведенном примере задействовано 30 тыс строк. Не самый удачный пример.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464034
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido,

это как раз относительно средняя таблица
они вообще там крайне неравномерно представлены:
есть 10-20 шт.
а есть 2.5 млн. и больше
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464035
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido,

а можно вопрос: как вы узнали, что таблиц там 32?
это правильное число, но я его не озвучивал и в результатах запросов ее не вижу
...или слеп? ткните плиз
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464041
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an2k
Код: plaintext
1.
2.
3.
4.
5.
explain analyze select distinct lw_table_name from log_write ;

                                                          QUERY PLAN                                                          
------------------------------------------------------------------------------------------------------------------------------
 HashAggregate  (cost=249019.88..249020.07 rows=19 width=13) (actual time=8767.140..8767.154  rows=32  loops=1)
...
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464043
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an2k,

покажите план (explain без аналайз) для какой--либо "большой" таблицы.
и "для всего" (тоже без аналайз)
//есть подозрение


и да, я рекомендую подумать на предмет однопроходной 20530998 очистки в автономиях (можно по 10--1000 записей за раз, это несложная вариация). это много проще, чем на пустом месте разворачивать ротацию партиций. хотя и накладнее.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464044
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an2k,

Там же есть другие интересные параметры. Читайте RTFM .
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464086
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- teachers_marks_link связь препод-оценка

                                                       QUERY PLAN                                                       
------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=45098.46..328247.26 rows=1349795 width=6)
   ->  Seq Scan on log_write  (cost=45098.46..328247.26 rows=1349795 width=6)
         Filter: (((lw_table_name)::text = 'teachers_marks_link'::text) AND (NOT (hashed SubPlan 1)))
         SubPlan 1
           ->  HashAggregate  (cost=45022.32..45083.23 rows=6091 width=21)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..44911.90 rows=14722 width=21)
                       Index Cond: ((lw_table_name)::text = 'students'::text)
(8 строк)
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464087
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- без таблицы
                                                       QUERY PLAN                                                       
------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=45098.46..314922.53 rows=2664945 width=6)
   ->  Seq Scan on log_write  (cost=45098.46..314922.53 rows=2664945 width=6)
         Filter: (NOT (hashed SubPlan 1))
         SubPlan 1
           ->  HashAggregate  (cost=45022.32..45083.23 rows=6091 width=21)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..44911.90 rows=14722 width=21)
                       Index Cond: ((lw_table_name)::text = 'students'::text)
(8 строк)
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464098
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

спасибо, за тонкий намек ))
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464101
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqan2k,

и да, я рекомендую подумать на предмет однопроходной 20530998 очистки в автономиях (можно по 10--1000 записей за раз, это несложная вариация). это много проще, чем на пустом месте разворачивать ротацию партиций. хотя и накладнее.

вижу что кирилицей, но если честно, не понимаю половины слов ((

- что такое автономия?
- вариация?
- ротация?
- партиция?

блин, 27 лет занимаюсь базами... как я отстал... где я был ((
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464122
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an2k- что такое автономия?
- вариация?
- ротация?
- партиция?

блин, 27 лет занимаюсь базами... как я отстал... где я был ((

автономия -- автономная транзакция. существует в оракле. не существует в постгресе. эмулируется в постгресе встроенным "клиентом" -- расширением dblink
примеры можно найти тут, поиском. или в интернетах. вплоть до забавных

"вариация" -- тут именно вариация. вариация на тему предложенного по ссылке кода добавлением пары переменных, констант и пары--тройки IF--ов. что для вас, с вашим опытом, несложно.

ротация и партиция -- это про ручную реализацию некоторых идей, основанных на 1. транзакционности ддл в пж. 2. наследовании в пж, и его использовании для партицирования (разбиения таблички на отдельные части по какому--либо признаку). т.е. "багровый закат" -- сиречь закат солнца баграми, в поте лица своего. вам оно, даже с вашим опытом, видимо не надо. это для гиков.
...
Рейтинг: 0 / 0
Postgres не хочет юзать память
    #39464126
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an2kqwwq,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- teachers_marks_link связь препод-оценка

                                                       QUERY PLAN                                                       
------------------------------------------------------------------------------------------------------------------------
 Delete on log_write  (cost=45098.46..328247.26 rows=1349795 width=6)
   ->  Seq Scan on log_write  (cost=45098.46..328247.26 rows=1349795 width=6)
         Filter: (((lw_table_name)::text = 'teachers_marks_link'::text) AND (NOT (hashed SubPlan 1)))
         SubPlan 1
           ->  HashAggregate  (cost=45022.32..45083.23 rows=6091 width=21)
                 Group Key: log_write_1.lw_table_name, log_write_1.lw_rec_id
                 ->  Index Scan using lw_table_name on log_write log_write_1  (cost=0.56..44911.90 rows=14722 width=21)
                       Index Cond: ((lw_table_name)::text = 'students'::text)
(8 строк)

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


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