Upload
gabor-koevendi-veress
View
186
Download
0
Embed Size (px)
DESCRIPTION
Budapesti DB Meetup előadás, témaindító. 2013-05-02.
Citation preview
Á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