RE: Postgres DB Slowness
| Newsgroups | gmane.comp.db.postgresql.admin |
|---|---|
| Message-ID | <2A91BEF8171A5349931391E0C721CC535B627ADE@CPEMS-KPN501.KPNCNL.LOCAL> |
-----Original Message----- From: Juan José Santamaría Flecha <[email protected]> Sent: Friday, August 23, 2019 1:08 PM To: Bhattacharjee, Soumik <[email protected]> Cc: [email protected]; [email protected] Subject: Re: Postgres DB Slowness On Fri, Aug 23, 2019 at 10:17 AM <[email protected]<mailto:[email protected]>> wrote: > > Query > =========== > SELECT > i.* > FROM > npcurren.num_cps_instelling i, > npcurren.num_aangesloten_nr n > WHERE > n.fk_exploit_nop_int_oper_id = 'PTT' > AND i.telefoonnummer != n.anr_nummer_hoog > AND i.telefoonnummer != n.anr_nummer_laag; > > Explain Plan > ====================== > "Nested Loop (cost=2068.47..1769226624.33 rows=101090505159 width=73)" > This query looks wrong, resulting in a cartesian join. As other people have pointed out, the execution times do not seem reasonable, could you change the 'SELECT *' into a 'SELECT count(1)' for the comparison? Regards, Juan José Santamaría Flecha ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Hi Juan, The query plan is below - numbes_test=# explain analyze select i.* from npcurren.NUM_CPS_INSTELLING i, npcurren.NUM_AANGESLOTEN_NR n where n.FK_EXPLOIT_NOP_INT_OPER_ID = 'PTT' and i.TELEFOONNUMMER != n.ANR_NUMMER_HOOG and i.TELEFOONNUMMER != n.ANR_NUMMER_LAAG;Â QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=2071.86..1817248003.24 rows=103834572306 width=73) (actual time=68.512..28074371.506 rows=98046804138 loops=1) Join Filter: (((i.telefoonnummer)::text <> (n.anr_nummer_hoog)::text) AND ((i.telefoonnummer)::text <> (n.anr_nummer_laag)::text)) Rows Removed by Join Filter: 36398 -> Seq Scan on num_cps_instelling i (cost=0.00..12485.52 rows=539852 width=73) (actual time=0.069..403.077 rows=539852 loops=1) -> Materialize (cost=2071.86..130606.58 rows=192339 width=22) (actual time=0.002..16.490 rows=181618 loops=539852) -> Bitmap Heap Scan on num_aangesloten_nr n (cost=2071.86..129644.88 rows=192339 width=22) (actual time=68.425..555.068 rows=181618 loops=1) Recheck Cond: ((fk_exploit_nop_int_oper_id)::text = 'PTT'::text) Heap Blocks: exact=51470 -> Bitmap Index Scan on anr_idx6 (cost=0.00..2023.78 rows=192339 width=0) (actual time=59.276..59.276 rows=181618 loops=1) Index Cond: ((fk_exploit_nop_int_oper_id)::text = 'PTT'::text) Planning time: 4.702 ms Execution time: 31536903.127 ms (12 rows) Does this also looks bad for performance with Data types- as there is varchar in a number records field ? - The table DDL is attached anr_nummer_laag character varying(20) COLLATE pg_catalog."default" NOT NULL, anr_nummer_hoog character varying(20) COLLATE pg_catalog."default" NOT NULL,
Table_Def.txt
(text/plain, 4.1 KB)
CREATE TABLE npcurren.num_aangesloten_nr
(
anr_nummer_laag character varying(20) COLLATE pg_catalog."default" NOT NULL,
anr_nummer_hoog character varying(20) COLLATE pg_catalog."default" NOT NULL,
fk_eigenaar_nop_int_oper_id character varying(6) COLLATE pg_catalog."default",
fk_sta_id character varying(1) COLLATE pg_catalog."default",
fk_sac_id character varying(1) COLLATE pg_catalog."default",
fk_moeder_hst_spc_id character varying(4) COLLATE pg_catalog."default",
fk_moeder_cgb_code integer,
fk_exploit_nop_int_oper_id character varying(6) COLLATE pg_catalog."default",
fk_dienst_hst_spc_id character varying(4) COLLATE pg_catalog."default",
fk_dienst_cgb_code integer,
anr_soort_dienst character varying(2) COLLATE pg_catalog."default",
anr_roepnummer character varying(20) COLLATE pg_catalog."default",
anr_lri character varying(24) COLLATE pg_catalog."default",
anr_logisch_mutatiemoment timestamp without time zone,
anr_technisch_mutatiemoment timestamp without time zone NOT NULL,
anr_mutatie_gebruiker_id character varying(8) COLLATE pg_catalog."default" NOT NULL,
anr_netnummer character varying(4) COLLATE pg_catalog."default",
anr_heeft_cvi_dienst_jn character varying(1) COLLATE pg_catalog."default",
fk_num_voip_platform_id smallint,
anr_heeft_cvi_zm_dienst_yn character varying(1) COLLATE pg_catalog."default",
anr_cvi_kenmerk character varying(10) COLLATE pg_catalog."default",
anr_cvi_telco character varying(8) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT anr_prx PRIMARY KEY (anr_nummer_laag),
CONSTRAINT sys_c0012384 FOREIGN KEY (fk_sac_id)
REFERENCES npcurren.num_soort_actie (sac_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT sys_c0012385 FOREIGN KEY (fk_sta_id)
REFERENCES npcurren.num_status (sta_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT sys_c0012386 FOREIGN KEY (fk_num_voip_platform_id)
REFERENCES npcurren.num_voip_platform (platform_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE npcurren.num_aangesloten_nr
OWNER to postgres;
-- Index: anr_idx1
-- DROP INDEX npcurren.anr_idx1;
CREATE INDEX anr_idx1
ON npcurren.num_aangesloten_nr USING btree
(fk_moeder_hst_spc_id COLLATE pg_catalog."default", fk_moeder_cgb_code)
TABLESPACE pg_default;
-- Index: anr_idx2
-- DROP INDEX npcurren.anr_idx2;
CREATE INDEX anr_idx2
ON npcurren.num_aangesloten_nr USING btree
(fk_dienst_hst_spc_id COLLATE pg_catalog."default", fk_dienst_cgb_code)
TABLESPACE pg_default;
-- Index: anr_idx3
-- DROP INDEX npcurren.anr_idx3;
CREATE INDEX anr_idx3
ON npcurren.num_aangesloten_nr USING btree
(fk_sac_id COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx4
-- DROP INDEX npcurren.anr_idx4;
CREATE INDEX anr_idx4
ON npcurren.num_aangesloten_nr USING btree
(fk_sta_id COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx5
-- DROP INDEX npcurren.anr_idx5;
CREATE INDEX anr_idx5
ON npcurren.num_aangesloten_nr USING btree
(fk_eigenaar_nop_int_oper_id COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx6
-- DROP INDEX npcurren.anr_idx6;
CREATE INDEX anr_idx6
ON npcurren.num_aangesloten_nr USING btree
(fk_exploit_nop_int_oper_id COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx7
-- DROP INDEX npcurren.anr_idx7;
CREATE INDEX anr_idx7
ON npcurren.num_aangesloten_nr USING btree
(anr_nummer_hoog COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx8
-- DROP INDEX npcurren.anr_idx8;
CREATE INDEX anr_idx8
ON npcurren.num_aangesloten_nr USING btree
(anr_netnummer COLLATE pg_catalog."default")
TABLESPACE pg_default;
-- Index: anr_idx9
-- DROP INDEX npcurren.anr_idx9;
CREATE INDEX anr_idx9
ON npcurren.num_aangesloten_nr USING btree
(fk_num_voip_platform_id)
TABLESPACE pg_default;