我们的方案:我们有一个基于触发器的分区表。但是insert触发器返回NEW,因为hibernate必须有rowcount 1,所以所有的insert都被插入父表。但是我们有一个后插入触发器来删除它。我们有一个父表,有0条记录,但是非常脏。
配置:constraint_exclusion
现在有一种奇怪的行为。
选择:
SELECT *
FROM partitioned_table
WHERE partition_column=x;
有时,在自动真空后不立即将好计划更改为坏计划:
坏计划:
Append (cost=247.80..29934.72 rows=13299 width=2073) (actual time=0.064..1.848 rows=755 loops=1)
Buffers: shared hit=517
-> Bitmap Heap Scan on public.ftr_ugyletadat ugyletadat0_ (cost=247.80..26405.17 rows=11790 width=2246) (actual time=0.022..0.022 rows=0 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain
Recheck Cond: (ugyletadat0_.idugylet = 16179457::numeric)
Buffers: shared hit=3
-> Bitmap Index Scan on ix_ftr_ugyletadat_idugylet (cost=0.00..244.86 rows=11790 width=0) (actual time=0.019..0.019 rows=0 loops=1)
Index Cond: (ugyletadat0_.idugylet = 16179457::numeric)
Buffers: shared hit=3
-> Index Scan using ix_ugyletadat_kulcs_ugylet_32 on public.ftr_ugyletadat_32 ugyletadat0__1 (cost=0.70..3529.55 rows=1509 width=723) (actual time=0.039..0.990 rows=755 loops=1)
Output: ugyletadat0__1.id, ugyletadat0__1.modositva, ugyletadat0__1.idugylet, ugyletadat0__1.iddokumentum, ugyletadat0__1.kulcs, ugyletadat0__1.osztaly, ugyletadat0__1.doublevalue, ugyletadat0__1.longvalue, ugyletadat0__1.datevalue, ugyletadat0__1.stringvalue, ugyletadat0__1.stringvalue2, ugyletadat0__1.megjegyzesdomain
Index Cond: (ugyletadat0__1.idugylet = 16179457::numeric)
Buffers: shared hit=514
Total runtime: 2.353 ms
好计划:
Append (cost=0.38..3537.94 rows=1510 width=724) (actual time=0.043..1.819 rows=755 loops=1)
Buffers: shared hit=517
-> Index Scan using ix_ftr_ugyletadat_idugylet on public.ftr_ugyletadat ugyletadat0_ (cost=0.38..8.39 rows=1 width=2246) (actual time=0.015..0.015 rows=0 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain
Index Cond: (ugyletadat0_.idugylet = 16179457::numeric)
Buffers: shared hit=3
-> Index Scan using ix_ugyletadat_kulcs_ugylet_32 on public.ftr_ugyletadat_32 ugyletadat0__1 (cost=0.70..3529.55 rows=1509 width=723) (actual time=0.025..0.957 rows=755 loops=1)
Output: ugyletadat0__1.id, ugyletadat0__1.modositva, ugyletadat0__1.idugylet, ugyletadat0__1.iddokumentum, ugyletadat0__1.kulcs, ugyletadat0__1.osztaly, ugyletadat0__1.doublevalue, ugyletadat0__1.longvalue, ugyletadat0__1.datevalue, ugyletadat0__1.stringvalue, ugyletadat0__1.stringvalue2, ugyletadat0__1.megjegyzesdomain
Index Cond: (ugyletadat0__1.idugylet = 16179457::numeric)
Buffers: shared hit=514
Total runtime: 2.300 ms
我注意到:
我运行VACUUM ANALYZE partitioned_table。开始后立即改变了计划,好了。但是真空分析只运行10分钟。
postgres统计变化
SELECT relname, reltuples从pg_classWHERE relname like 'ftr_ugyletadat';
rel_tuples的值总是跳到0(好的计划)或大约250万+-10000(坏的计划)。
我在base(空表)上创建了一个索引,所以没有seq扫描只是索引。
一些帖子说检查约束到基表。它是空的,但是由于Hibernate的问题,我们必须在那里也插入行。
- 为什么跳转rel_tuples值,为什么只有0和大约250万+-10000没有别的值了吗?
- 我怎么做才能更快?
- 是一个好的计划改变主表与触发器视图?
谢谢。
真实计划:
Hash Left Join (cost=28.95..24265.05 rows=1357 width=2368) (actual time=1.570..5.750 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet, dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik, dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Hash Cond: (dokumentum1_.iddokumentumsablon = dokumentum2_.id)
Buffers: shared hit=389 read=6
-> Nested Loop Left Join (cost=1.23..24228.66 rows=1357 width=691) (actual time=0.383..3.993 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet, dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik
Buffers: shared hit=373 read=6
-> Nested Loop Left Join (cost=0.81..15331.59 rows=1357 width=493) (actual time=0.379..2.802 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet
Buffers: shared hit=364 read=6
-> Append (cost=0.38..3987.37 rows=1357 width=404) (actual time=0.373..1.495 rows=427 loops=1)
Buffers: shared hit=352 read=6
-> Index Scan using ix_ftr_ugyletadat_idugylet on public.ftr_ugyletadat ugyletadat0_ (cost=0.38..8.39 rows=1 width=2246) (actual time=0.228..0.228 rows=0 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain
Index Cond: (ugyletadat0_.idugylet = 24633477::numeric)
Buffers: shared hit=16
-> Index Scan using ix_ugyletadat_kulcs_ugylet_35 on public.ftr_ugyletadat_35 ugyletadat0__1 (cost=0.70..3978.98 rows=1356 width=403) (actual time=0.142..0.769 rows=427 loops=1)
Output: ugyletadat0__1.id, ugyletadat0__1.modositva, ugyletadat0__1.idugylet, ugyletadat0__1.iddokumentum, ugyletadat0__1.kulcs, ugyletadat0__1.osztaly, ugyletadat0__1.doublevalue, ugyletadat0__1.longvalue, ugyletadat0__1.datevalue, ugyletadat0__1.stringvalue, ugyletadat0__1.stringvalue2, ugyletadat0__1.megjegyzesdomain
Index Cond: (ugyletadat0__1.idugylet = 24633477::numeric)
Buffers: shared hit=336 read=6
-> Index Scan using pk_dokumentum on public.ftr_dokumentum dokumentum1_ (cost=0.43..8.35 rows=1 width=90) (actual time=0.001..0.001 rows=0 loops=427)
Output: dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet
Index Cond: (ugyletadat0_.iddokumentum = dokumentum1_.id)
Buffers: shared hit=12
-> Index Scan using nir_bgadokumentum_pkey on public.nir_bgadokumentum dokumentum1_1_ (cost=0.43..6.55 rows=1 width=198) (actual time=0.001..0.001 rows=0 loops=427)
Output: dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik
Index Cond: (dokumentum1_.id = dokumentum1_1_.id)
Buffers: shared hit=9
-> Hash (cost=19.54..19.54 rows=654 width=1677) (actual time=1.143..1.143 rows=692 loops=1)
Output: dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Buckets: 1024 Batches: 1 Memory Usage: 95kB
Buffers: shared hit=13
-> Seq Scan on public.ftr_dokumentumsablon dokumentum2_ (cost=0.00..19.54 rows=654 width=1677) (actual time=0.003..0.479 rows=692 loops=1)
Output: dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Buffers: shared hit=13
Total runtime: 6.160 ms
和坏计划:
Hash Left Join (cost=133873.91..182462.47 rows=13552 width=4027) (actual time=2091.267..2092.158 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet, dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik, dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Hash Cond: (dokumentum1_.iddokumentumsablon = dokumentum2_.id)
Buffers: shared hit=26918
-> Hash Right Join (cost=133846.19..182348.06 rows=13552 width=2350) (actual time=2090.104..2090.457 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet, dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik
Hash Cond: (dokumentum1_1_.id = dokumentum1_.id)
Buffers: shared hit=26905
-> Seq Scan on public.nir_bgadokumentum dokumentum1_1_ (cost=0.00..42477.22 rows=1594522 width=198) (actual time=0.003..1028.006 rows=1472449 loops=1)
Output: dokumentum1_1_.id, dokumentum1_1_.irat, dokumentum1_1_.idugylet, dokumentum1_1_.iddokumentumtipus, dokumentum1_1_.tomoritett, dokumentum1_1_.idszulodokumentum, dokumentum1_1_.idiktatas, dokumentum1_1_.idszotarstatusz, dokumentum1_1_.dokumentumnev, dokumentum1_1_.formatum, dokumentum1_1_.altipus_megnevezes, dokumentum1_1_.email_kuldes_idopont, dokumentum1_1_.id_feladat, dokumentum1_1_.rejtett, dokumentum1_1_.kezzel_iktatva, dokumentum1_1_.erkeztetoszam, dokumentum1_1_.idgeneralttartalom, dokumentum1_1_.generaltalegyezik
Buffers: shared hit=26532
-> Hash (cost=133676.79..133676.79 rows=13552 width=2152) (actual time=3.282..3.282 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet
Buckets: 2048 Batches: 1 Memory Usage: 61kB
Buffers: shared hit=370
-> Nested Loop Left Join (cost=255.38..133676.79 rows=13552 width=2152) (actual time=0.327..2.772 rows=427 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain, dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet
Buffers: shared hit=370
-> Append (cost=254.95..31274.87 rows=13552 width=2062) (actual time=0.319..1.468 rows=427 loops=1)
Buffers: shared hit=358
-> Bitmap Heap Scan on public.ftr_ugyletadat ugyletadat0_ (cost=254.95..27295.89 rows=12196 width=2246) (actual time=0.247..0.247 rows=0 loops=1)
Output: ugyletadat0_.id, ugyletadat0_.modositva, ugyletadat0_.idugylet, ugyletadat0_.iddokumentum, ugyletadat0_.kulcs, ugyletadat0_.osztaly, ugyletadat0_.doublevalue, ugyletadat0_.longvalue, ugyletadat0_.datevalue, ugyletadat0_.stringvalue, ugyletadat0_.stringvalue2, ugyletadat0_.megjegyzesdomain
Recheck Cond: (ugyletadat0_.idugylet = 24633477::numeric)
Buffers: shared hit=16
-> Bitmap Index Scan on ix_ftr_ugyletadat_idugylet (cost=0.00..251.90 rows=12196 width=0) (actual time=0.117..0.117 rows=431 loops=1)
Index Cond: (ugyletadat0_.idugylet = 24633477::numeric)
Buffers: shared hit=4
-> Index Scan using ix_ugyletadat_kulcs_ugylet_35 on public.ftr_ugyletadat_35 ugyletadat0__1 (cost=0.70..3978.98 rows=1356 width=403) (actual time=0.069..0.692 rows=427 loops=1)
Output: ugyletadat0__1.id, ugyletadat0__1.modositva, ugyletadat0__1.idugylet, ugyletadat0__1.iddokumentum, ugyletadat0__1.kulcs, ugyletadat0__1.osztaly, ugyletadat0__1.doublevalue, ugyletadat0__1.longvalue, ugyletadat0__1.datevalue, ugyletadat0__1.stringvalue, ugyletadat0__1.stringvalue2, ugyletadat0__1.megjegyzesdomain
Index Cond: (ugyletadat0__1.idugylet = 24633477::numeric)
Buffers: shared hit=342
-> Index Scan using pk_dokumentum on public.ftr_dokumentum dokumentum1_ (cost=0.43..7.55 rows=1 width=90) (actual time=0.001..0.001 rows=0 loops=427)
Output: dokumentum1_.id, dokumentum1_.modositva, dokumentum1_.idadattartalom, dokumentum1_.iddokumentumsablon, dokumentum1_.nev, dokumentum1_.letrehozasideje, dokumentum1_.leiras, dokumentum1_.meret, dokumentum1_.idugylet
Index Cond: (ugyletadat0_.iddokumentum = dokumentum1_.id)
Buffers: shared hit=12
-> Hash (cost=19.54..19.54 rows=654 width=1677) (actual time=1.128..1.128 rows=692 loops=1)
Output: dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Buckets: 1024 Batches: 1 Memory Usage: 95kB
Buffers: shared hit=13
-> Seq Scan on public.ftr_dokumentumsablon dokumentum2_ (cost=0.00..19.54 rows=654 width=1677) (actual time=0.004..0.468 rows=692 loops=1)
Output: dokumentum2_.id, dokumentum2_.modositva, dokumentum2_.idadattartalom, dokumentum2_.nev, dokumentum2_.dokumentumnev, dokumentum2_.letrehozasideje, dokumentum2_.leiras, dokumentum2_.meret, dokumentum2_.iktatando, dokumentum2_.alairassablon, dokumentum2_.groovyclosure, dokumentum2_.bejovo, dokumentum2_.datasource
Buffers: shared hit=13
Total runtime: 2092.613 ms
其他奇怪的路径,pg_stat_user_tables的n_live_tup几乎是恒定的,大约为2,5,有时这个值设置为reltuples。
昨天,真空分析将n_live_t0降低到500。这个值是250万。pg_class reltuples是0或者这个n_live_tup。如果该值较低,则表示计划快…为什么要增加这个值?这个表有0条记录,但是它是真实的,很多insert和delete操作在这个表上运行。
VACUUM ANALYZE VERBOSE
Code: 0 SQL State: 00000 --- vacuuming "public.ftr_ugyletadat"
Code: 0 SQL State: 00000 --- index "pk_ugyletadat_x" now contains 3502 row versions in 21 pages
Code: 0 SQL State: 00000 --- index "idx_ugyletadat_dok_x" now contains 3502 row versions in 17 pages
Code: 0 SQL State: 00000 --- index "ix_ftr_ugyletadat_idugylet" now contains 3502 row versions in 14 pages
Code: 0 SQL State: 00000 --- "ftr_ugyletadat": found 0 removable, 3502 nonremovable row versions in 71 out of 71 pages
Code: 0 SQL State: 00000 --- vacuuming "pg_toast.pg_toast_463274"
Code: 0 SQL State: 00000 --- index "pg_toast_463274_index" now contains 11 row versions in 2 pages
Code: 0 SQL State: 00000 --- "pg_toast_463274": found 0 removable, 11 nonremovable row versions in 3 out of 3 pages
Code: 0 SQL State: 00000 --- analyzing "public.ftr_ugyletadat"
Code: 0 SQL State: 00000 --- "ftr_ugyletadat": scanned 71 of 71 pages, containing 0 live rows and 3502 dead rows; 0 rows in sample, 0 estimated total rows
Code: 0 SQL State: 00000 --- analyzing "public.ftr_ugyletadat" inheritance tree
说找到0活行
和
SELECT relname, n_live_tup FROM pg_stat_user_tables where relname like 'ftr_ugyletadat'
表示ftr_ugyletadat 3364
我不知道为什么,但是在
我找不到2天
SELECT relname, n_dead_tup,n_live_tup,n_dead_tup,* FROM pg_stat_user_tables where relname like 'TABLE_NAME';
n_live_tup大于0。所以计划很快。