postgres插入速度非常慢

时间:2020-08-25 22:03:31

标签: postgresql

我有一个'insert into table()select from',它非常慢。

选择仅需3秒。

但是要插入3万行,则需要3分钟以上的时间。

3万行需要3分钟,对我来说似乎很多(因为在“真实”状态下我将拥有数百万行)。

我尝试了许多postgres优化,但并没有真正改善: wal_buffers = 8MB,fsync = off等...

我简化了请求,以了解为什么它这么慢。

这是我的要求:

drop table if exists ODSBUS.DIM_INSCRIPTIONS_ETUDIANTS_TEST;
create table ODSBUS.DIM_INSCRIPTIONS_ETUDIANTS_TEST (
   ID_INSCRIPTION_ETU   VARCHAR(5),
   ID_NUM_INSCRIPTION_ETU VARCHAR(5) ,
   ID_HISTORIQUE        VARCHAR(5)                ,
   ID_INSCRIPTION_AP    VARCHAR(5)                ,
   ID_SEMESTRE          VARCHAR(5)                ,
   ID_PARITE_SEMESTRE   VARCHAR(5)                ,
   ID_ETUDIANT          VARCHAR(5)                ,
   ID_AP                VARCHAR(5)                ,
   ID_EC                VARCHAR(5)                ,
   ID_OBLIGATION_EC     VARCHAR(5)          ,
   ID_UE                VARCHAR(5)                ,
   ID_COMPOSANTE        VARCHAR(5)          ,
   ID_BOURSE            VARCHAR(5)                ,
   ID_ANNEE             VARCHAR(5)                ,
   FG_NEOBACHELIER      VARCHAR(5)          ,
   FG_AP_MAJEUR         VARCHAR(5)          ,
   DT_DEMISSION         VARCHAR(5)                ,
   FG_DEMISSIONNAIRE    VARCHAR(5)          
);


-- the insert
insert into odsbus.DIM_INSCRIPTIONS_ETUDIANTS_TEST (id_inscription_etu,
id_num_inscription_etu,
id_historique,
id_inscription_ap,
id_semestre,
id_parite_semestre,
id_etudiant,
id_ap,
id_ec,
id_obligation_ec,
id_ue,
id_composante,
id_bourse,
id_annee,
fg_neobachelier,
fg_ap_majeur,
dt_demission,
fg_demissionnaire) 
SELECT  '',
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'',
'' ,
'' ,
'' ,
'' ,
'',
'',
'',
''
FROM ldzbus.scol_inscription_ap ap
 inner join dwhbus.dim_annees da on da.id_annee = ap.fann_key 
 inner join ldzbus.scol_inscription_etudiant sie on sie.fann_key = ap.fann_key and sie.idipl_numero = ap.idipl_numero 
 inner join odsbus.dim_etudiants et on et.id_numero = sie.etud_numero 
 inner join ldzbus.v_scol_maquette maq on maq.mrap_key = ap.mrap_key 
 inner join ldzbus.scol_inscription_ec iec on iec.idipl_numero = ap.idipl_numero and iec.mrec_key = maq.mrec_key and iec.imrec_semestre = ap.imrap_semestre 
 inner join ldzbus.scol_inscription_semestre sis on sis.idipl_numero = ap.idipl_numero and sis.mrsem_key = maq.mrsem_key 
 inner join ldzbus.scol_maquette_repartition_ec smre on smre.mrec_key = maq.mrec_key 
 inner join ldzbus.dept_domaine dd on dd.fdom_code = sie.fdom_code 
 inner join ldzbus.historique h on h.hist_numero = sie.hist_numero 
 inner join ldzbus.scol_maquette_repartition_ap smra on smra.mrap_key = ap.mrap_key 
 WHERE 1=1
limit 30000; 
--> more than 3 min

请注意,请求使用许多不同的架构。

我怎样才能使此插入花费的时间更少? 专注于请求?专注于调整postgres吗?调整服务器?

我在这里的所有pg选项:https://controlc.com/6489bca0

0 个答案:

没有答案