15
Átszokás Oracle-ről PostgreSQL-re Hogyan építsük le az idegrendszerünket 30 nap alatt Kövendi-Veress Gábor

Atszokás Oracle-ről PostgreSQL-re

Embed Size (px)

DESCRIPTION

Budapesti DB Meetup előadás, témaindító. 2013-05-02.

Citation preview

Page 1: Atszokás Oracle-ről PostgreSQL-re

Átszokás Oracle-ről PostgreSQL-reHogyan építsük le az

idegrendszerünket 30 nap alatt

Kövendi-Veress Gábor

Page 2: Atszokás Oracle-ről PostgreSQL-re

Első akadály: Management eszközök

• Oracle:Quest ToadQuest SQL NavigatorPL/SQL Developer

• PostgreSQL:pgAdmin (korlátozott használhatóság)Navicat for PostgreSQLEMS SQL Manager for PostgreSQL

Page 3: Atszokás Oracle-ről PostgreSQL-re

Process management

• Oracle:Ha beragadt valami, akkor célszerűbb operációs rendszer szintjén kilőni. Van, amikor SQL-ből is leállítható, de a tapasztalatok szerint ritkán sikerül feloldani. (Viszont ritkábban ragadnak be például queryk, mert azok leállíthatók).

• PostgreSQL:db-ből többnyire minden feloldható. Ha nem, akkor itt is le kell menni operációs rendszer szintjére. Sajnos egy elengedett query gyakran nem állítható le.

Page 4: Atszokás Oracle-ről PostgreSQL-re

Jobok

• Oracle:Jobok: beépített funkció, jól használható.

• PostgreSQL:pgAgent: utólagos komponens, csak pgAdminnal managelhető (1.9+). Működésre jó, de több problémával szembesülhetünk:

-Gyengén managelhető-Esetleges beragadás feloldása

nehézkes.

Page 5: Atszokás Oracle-ről PostgreSQL-re

Backup/Restore

• Oracle:Rman: jól működik, de körülményes, elavult, és lassú. (Ha valaki nem gyűlöli szívből kérem tegye fel a kezét...)

• PostgreSQL:pgDump: jól működik, egyszerű, aránylag gyors. Igaz más elven működik, és nagy adatbázisoknál (100Gb+) biztos hogy nagyon lassú (valakinek tapasztalat?)

Page 6: Atszokás Oracle-ről PostgreSQL-re

Szintaxis, anomáliák

Page 7: Atszokás Oracle-ről PostgreSQL-re

Hintek hiánya

Alapvetően ízlés dolga, de sokkal lazább és könnyebben variálható, mint az „oldschool” SQL. Left join Oracle-ben:

selectcust.customer_id,cust.customer_name,task.contract_id,task.contract_desc,serv.service_code,serv.type_desc,serv.fee_huf

fromcustomers cust,contact task,service serv

wherecust.id=task.parent_id(+) andtask.id=serv.parent_id(+)

Page 8: Atszokás Oracle-ről PostgreSQL-re

Hintek hiánya

Klasszikus megoldás:

select cust.customer_id,cust.customer_name,task.contract_id,task.contract_desc,serv.service_code,serv.type_desc,serv.fee_huf

fromcustomers custleft outer join contract task on

cust.id=task.parent_idleft outer join service serv on

task.id=service.parent_id

Page 9: Atszokás Oracle-ről PostgreSQL-re

Joinok, performancia.

Maradjunk egy kicsit a left join-nál.Oracle-ben (és minden másban) alapvetően megszokott, hogy a halmazműveletek lassabbak, mint egy bármilyen összekapcsolás.PostgreSQL-ben az a tapasztalat, hogy a

left-right join performanciája annyira rossz, hogy ugyanazt az eredményt halmazműveletekkel sokkal gyorsabb elvégezni.

Page 10: Atszokás Oracle-ről PostgreSQL-re

Joinok, performancia

Példa: select cust.cust_id,cust.customer_name,task.contract_id,task.descriptionfromcustomer custleft outer join contract task on cust.id=task.parent_id

Helyett:

Page 11: Atszokás Oracle-ről PostgreSQL-re

Joinok, performancia

(select cust.cust_id,cust.customer_name,task.contract_id,task.descriptionfromcustomer custjoin task on cust.id=task.parent_id)union(select cust.cust_id,cust.customer_name,null, nullfromcustomer custwherenot exists (select 1 from contract task where task.parent_id=cust.id))

A fenti módon megírt selectek futási ideje sokszorosan rövidebb, mint a left join. Az ok ismeretlen, a végrehajtási terv szerint a sima join kellene, hogy gyorsabb legyen.

Page 12: Atszokás Oracle-ről PostgreSQL-re

Indexelés

Minden –nagy adattartalommal rendelkező- adatbázisnál probléma lehet, hogy az indexelés ellentétes hatást vált ki lekérdezéseknél, mint amit várnánk tőle. (100 millió+os táblák esetén általában, db platformonként változó).

PostgreSQL esetében sokkal kisebb adattartalom mellett is megfigyelhető, hogy nem segít az indexelés a futási időkön. (már 300-500.000 sortól!).

Page 13: Atszokás Oracle-ről PostgreSQL-re

DB Link

Meg kell emlékeznünk az adatbázis linkekről is, amely sajnos a PostgreSQL-nek nem nagy fegyvere.A kapcsolat létrehozása könnyű, de lekérdezés a távoli adatbázisból körülményes, nincs visszajelzés, ha valami mégsem jó. Példalekérdezés dummy1 távoli DB-be:

SELECT dblink_send_query(‘dummy1', 'SELECT * FROM foo WHERE f1< 3');

Elég körülményes...

Page 14: Atszokás Oracle-ről PostgreSQL-re

Azért fel a fejjel!

Ne feledjük, hogy a PostgreSQL egy ingyenes adatbázis platform és annak kiváló!Amellett, hogy az elmondott akadályokba ütközünk, mindig van megoldás, és ha nem Oracle-re vagyunk szokva, akkor valószínűleg nem is éljük meg problémaként ezeket.

Alapvetően működik, még adattárházként is.

Tehát ha low budget mellett kell egy jó adatbázist építenünk, bátran ajánlom mindenkinek, azoknak is ,akik az Oracle aranykalitkájából repülnek ki, mint jómagam

Page 15: Atszokás Oracle-ről PostgreSQL-re

Kövendi-Veress Gábor

[email protected]

Köszi a figyelmet!