Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 2157F64FEA1 for ; Wed, 12 Nov 2008 10:17:06 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 20098-03 for ; Wed, 12 Nov 2008 10:17:02 -0400 (AST) X-Greylist: delayed 00:05:54.999632 by SQLgrey-1.7.6 Received: from vilnius.balt.net (vilnius.balt.net [195.14.170.14]) by mail.postgresql.org (Postfix) with ESMTP id 5BD0864FCD8 for ; Wed, 12 Nov 2008 10:17:02 -0400 (AST) Received: from nSoft.lt (unknown [217.117.29.29]) by vilnius.balt.net (Postfix) with ESMTP id 02E33CC3A6 for ; Wed, 12 Nov 2008 16:11:03 +0200 (EET) Received: from [192.168.16.113] (unknown [192.168.16.113]) by nSoft.lt (Postfix) with ESMTP id B8B71BF03F for ; Wed, 12 Nov 2008 17:09:23 +0000 (GMT) Message-ID: <491AE3F2.601@nsoft.lt> Date: Wed, 12 Nov 2008 16:10:58 +0200 From: Julius Tuskenis User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) MIME-Version: 1.0 To: pgsql-admin@postgresql.org Subject: function executes sql 100 times longer it should Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200811/62 X-Sequence-Number: 30716 Hello, list. I have one simple SQL function returning result set that takes around 3 seconds to execute. But if I execute the Select it executes directly - it takes only around 30 ms. Why so big difference? What should I check? I must also say, that this started this afternoon. PG: 8.3.3 OS: Windows Server 2003 Example below: //======================================================================================================== CREATE OR REPLACE FUNCTION fnk_grupes_prekes(prm_pardavimo_taskas integer, prm_grupe integer, prm_filtras character varying) RETURNS SETOF frt_grupes_prekes AS $BODY$SELECT DISTINCT prek_id, prek_pavadinimas, ks_kaina, mvnt_trumpinys FROM filter_b_preke_matoma() LEFT OUTER JOIN b_grupes_prekes ON (gp_preke=prek_id) LEFT OUTER JOIN b_grupe ON (gp_grupe=grup_id) JOIN b_mato_vienetai ON (mvnt_id=prek_matovnt) JOIN b_kainorascio_sudetis ON (ks_preke = prek_id) JOIN b_kainorascio_grafikas ON (ks_kainorastis=kag_kainorastis) JOIN b_pardavimo_tasko_kainorastis ON (ks_kainorastis=ptk_kainorastis) WHERE (grup_id=$2 OR $2 is Null) AND ptk_pardavimotaskas=$1 AND ((prek_pavadinimas ILIKE ('%'||$3||'%')) OR $3 is NULL) AND fnk_grafikas_galioja(kag_grafikas) = true ORDER BY prek_pavadinimas $BODY$ LANGUAGE 'sql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION fnk_grupes_prekes(integer, integer, character varying) OWNER TO postgres; GRANT EXECUTE ON FUNCTION fnk_grupes_prekes(integer, integer, character varying) TO postgres; GRANT EXECUTE ON FUNCTION fnk_grupes_prekes(integer, integer, character varying) TO public; select * from fnk_grupes_prekes(18,42,NULL); Total query runtime: 2172 ms. 0 rows retrieved. SELECT DISTINCT prek_id, prek_pavadinimas, ks_kaina, mvnt_trumpinys FROM filter_b_preke_matoma() LEFT OUTER JOIN b_grupes_prekes ON (gp_preke=prek_id) LEFT OUTER JOIN b_grupe ON (gp_grupe=grup_id) JOIN b_mato_vienetai ON (mvnt_id=prek_matovnt) JOIN b_kainorascio_sudetis ON (ks_preke = prek_id) JOIN b_kainorascio_grafikas ON (ks_kainorastis=kag_kainorastis) JOIN b_pardavimo_tasko_kainorastis ON (ks_kainorastis=ptk_kainorastis) WHERE (grup_id=42 OR 42 is Null) AND ptk_pardavimotaskas=18 AND ((prek_pavadinimas ILIKE ('%'||null||'%')) OR null is NULL) AND fnk_grafikas_galioja(kag_grafikas) = true ORDER BY prek_pavadinimas; Total query runtime: 47 ms. 0 rows retrieved. -- Julius Tuskenis Programavimo skyriaus vadovas UAB nSoft mob. +37068233050