atszokás oracle-ről postgresql-re

Post on 22-May-2015

184 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

idegrendszerünket 30 nap alatt

Kövendi-Veress Gábor

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

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.

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.

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?)

Szintaxis, anomáliák

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(+)

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

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.

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:

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.

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!).

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...

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

Kövendi-Veress Gábor

g.kovendi@mito.hu

Köszi a figyelmet!

top related