Ik heb hier een Oracle 10g stored procedure (geminimaliseerd voorbeeld):
De PostgreSQL 8.4 variant van diezelfde stored procedure ziet er als volgt uit:
In andere omgevingen (test en prod) is er wel verschil in tijd, maar dit verhoudt zich steeds hetzelfde. Oracle is rond de 10x sneller. En dit allemaal in één transactie (alles of niets) op dezelfde keys (column1=PK).
Ik voer ze uit middels JDBC, maar diezelfde statementen direct in de pgAdminIII uitvoeren is nauwelijks sneller. Scheelt misschien een seconde of 5, volkomen verwaarloosbaar.
Ik heb even zitten googlen met een of meer van de sleutelwoorden postgresql stored procedure performance, echter het gaat dan praktisch allemaal over dat je het beste een stored procedure moet gebruiken voor de beste performance. Ja d'oh
Ben ik nu de enige of herkent iemand dit? De DB's hebben beiden voldoende geheugen tot hun beschikking en de CPU's worden ten tijde van de run voor de volle 100% benut.
SQL:
Werkt prima. 150K rows worden op de devomgeving binnen 5 minuutjes gedaan.1
2
3
4
5
6
7
8
9
10
11
| CREATE PROCEDURE replace_into_table1(p1 NUMBER, p2 VARCHAR2, p3 VARCHAR2) AS rows NUMBER; BEGIN SELECT COUNT(*) INTO rows FROM table1 WHERE column1 = p1; IF rows > 0 THEN UPDATE table1 SET column2 = p2 AND column3 = p3 WHERE column1 = p1; ELSE INSERT INTO table1 (column1, column2, column3) VALUES (p1, p2, p3); END IF; END; / |
De PostgreSQL 8.4 variant van diezelfde stored procedure ziet er als volgt uit:
SQL:
Basically identiek, maar de blauwe olifant neemt wel een friggin 50 minuten de tijd voor 150K rows 1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE FUNCTION replace_into_table1(NUMERIC, VARCHAR, VARCHAR) RETURNS void AS $$ DECLARE rows NUMERIC; BEGIN SELECT COUNT(*) INTO rows FROM table1 WHERE column1 = $1; IF rows > 0 THEN UPDATE table1 SET column2 = $2 AND column3 = $3 WHERE column1 = $1; ELSE INSERT INTO table1 (column1, column2, column3) VALUES ($1, $2, $3); END IF; RETURN; END; $$ LANGUAGE plpgsql; |

Ik voer ze uit middels JDBC, maar diezelfde statementen direct in de pgAdminIII uitvoeren is nauwelijks sneller. Scheelt misschien een seconde of 5, volkomen verwaarloosbaar.
Ik heb even zitten googlen met een of meer van de sleutelwoorden postgresql stored procedure performance, echter het gaat dan praktisch allemaal over dat je het beste een stored procedure moet gebruiken voor de beste performance. Ja d'oh

Ben ik nu de enige of herkent iemand dit? De DB's hebben beiden voldoende geheugen tot hun beschikking en de CPU's worden ten tijde van de run voor de volle 100% benut.