SlideShare a Scribd company logo
1 of 12
© 2015 Profinit. All rights reserved.
Entity Framework:
Optimalizace a záludnosti
Tomáš Vichta 28.11.2011
© 2015 Profinit. All rights reserved.
2
Představení
Zajímavé projekty
– Platební brána PaySec
– Poplatky a reporting pro obchody s cennými papíry
– Personalizace elektronických cestovních pasů
– Integrační platforma pro účetní systém
– Párování bankovních výpisů
– Generování platebních příkazů
Tomáš Vichta
Nezávislý konzultant, spolupracovník Profinit s.r.o.
Specializace
– Technická analýza a design
– Vývoj .NET, MS SQL, Oracle
© 2015 Profinit. All rights reserved.
3
Entity Framework:
Optimalizace a záludnosti
o Zpracování dotazu
o Futures
o Hromadné zpracování
o Paralelní zpracování
© 2015 Profinit. All rights reserved.
4
Zpracování dotazu
o První metoda, která nevrací IQueryable, vygeneruje dotaz do DB
– Např. ToArray(), ToList()
o Where(Func<TEntity, bool> predicate)
– Filtrovací podmínku provede až klient (.NET)
– Tzn. vede typicky na select celé tabulky
o Je potřeba použít Expression<Func<TEntity, bool>>
– EF musí umět serializovat do SQL
– Pokud neumí, exception až v runtime
© 2015 Profinit. All rights reserved.
5
Zpracování dotazu
.NET Database
User code
EF internals
Network communication
Query compilation & planning
Execution (disk operations, ...)
Network communication
EF internals
User code
© 2015 Profinit. All rights reserved.
6
Futures
o nuget balíček EntityFramework.Extended
o Pošle více EF dotazů do DB najednou, jedním SQL dotazem
o Úspora času na roundtripu
– síťová komunikace
– interní zpracování v .NET komponentech (user code, internal EF code)
– interní zpracování v DB serveru
o Má smysl řešit
– při velkých požadavcích na výkon a očekávanému velkému zatížení aplikace
– pokud lze zřetězit více (nezávislých) dotazů za sebou
– a nebo místo toho kód zabalit např. do stored procedure, která toho může uvnitř udělat
více, a také může vrátit více resultsetů zpět do EF (podporuje např. MS SQL)
© 2015 Profinit. All rights reserved.
7
Hromadné zpracování
UPDATE, DELETE
o Potřeba řešit při insert/update/delete řádově stovek a více entit najednou
o EF obecně není dělaný na hromadné operace
o Možnosti
– Vypnout DbContext.Configuration. AutoDetectChangesEnabled a
ProxyCreationEnabled, ValidateOnSaveEnabled
• V EF6 málo významný vliv na výkon
• Nefunguje ChangeTracking, do DB jde také sada samostatných per-entity příkazů
– Dávkové UPDATE/DELETE operace pomocí EntityFramework.Extended
• Obalí EF dotaz UPDATE/DELETE klauzulí
• Méně efektivní, než ručně napsaný UPDATE/DELETE, ale mnohem výkonnější, než
samostatné příkazy pro jednotlivé entity
• Nevýhoda – jde mimo ChangeTracking
– Ručně psaný UPDATE, DELETE
• v .NET kódu
• Nebo uložená procedura
• Nejrychlejší
• Opět přicházíme o ChangeTracking
© 2015 Profinit. All rights reserved.
8
Hromadné zpracování
BULK INSERT
o SQL BULK INSERT
o Řádově rychlejší, než klasický INSERT
o Při špatném použití riziko insertu nekonzistentních dat!
o V .NET třída System.Data.SqlClient.SqlBulkCopy
– Použití přímo této třídy by bylo nejefektivnější
o EF wrapper - např. nuget EntityFramework.BulkInsert
– Jde o extrémní zneužití EF, ale funguje to…
o Nezapomínat na paměťové nároky
© 2015 Profinit. All rights reserved.
9
Paralelní zpracování
o EF context není thread safe
o Nelze paralelizovat na stejné DB session (DbContextu)
– .NET lockováním DB dotazů si moc nepomůžete – DB operace je obvykle to, co trvá
nejdéle.
o Pozor na deadlocky, resource contention, atd.
o Nejjednodušší - paralelizovat co nejméně
o Nezapomínat - ASP.NET web – thread per request, tzn. implicitně paralelní
prostředí! Obdobně desktop aplikace.
o Obvykle – samostatný DbContext pro každou paralelní větev (thread, task)
© 2015 Profinit. All rights reserved.
Diskuze
© 2015 Profinit. All rights reserved.
Díky za pozornost
• 1
© 2015 Profinit. All rights reserved.
Profinit, s.r.o., Tychonova 2, 160 00 Praha 6, +420 224 316 016, www.profinit.eu
Společnost PROFINIT je členem nadnárodní skupiny New Frontier Group, která je
leadrem v oblasti digitální transformace organizací a firem ve střední a východní
Evropě. S více než 2000 zaměstnanci v 17 zemích patří mezi deset největších
poskytovatelů ICT služeb v celém CEE regionu a řadí se ke špičce v oblasti vývoje
software na zakázku, data managementu, datových skladů a business intelligence.
PROFINIT má řadu významných zákazníků z finančního a telekomunikačního
sektoru, utilit a státní správy. Společnost se primárně zaměřuje na konzultační
služby v oblasti digitální transformace, technologické služby a outsourcing. Podle
údajů IDC (2012) patří PROFINIT mezi 5 největších firem v oblasti vývoje software
na zakázku v České Republice a je držitelem řady dalších ocenění.
Shaping future, delivering results!

More Related Content

Similar to Entity Framework: Optimalizace a záludnosti

Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnyMarketingArrowECS_CZ
 
Profinit: Prezentace snídaně integrace aplikací 2016
Profinit: Prezentace snídaně integrace aplikací 2016Profinit: Prezentace snídaně integrace aplikací 2016
Profinit: Prezentace snídaně integrace aplikací 2016Profinit
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
Nutnet Prezentace Upr
Nutnet Prezentace UprNutnet Prezentace Upr
Nutnet Prezentace UprVojtech Kosek
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Jaroslav Prodelal
 
Nette: jak rozbít atom?
Nette: jak rozbít atom?Nette: jak rozbít atom?
Nette: jak rozbít atom?David Grudl
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008RENESTEIN
 
Odborná snídaně: Datový sklad jako Perpetuum Mobile
Odborná snídaně: Datový sklad jako Perpetuum MobileOdborná snídaně: Datový sklad jako Perpetuum Mobile
Odborná snídaně: Datový sklad jako Perpetuum MobileProfinit
 
Co přináší Oracle Database 12c Release 2
Co přináší Oracle Database 12c Release 2Co přináší Oracle Database 12c Release 2
Co přináší Oracle Database 12c Release 2MarketingArrowECS_CZ
 
Par IT Postrehu FIT CVUT 27.1.2010
Par  IT Postrehu  FIT CVUT 27.1.2010Par  IT Postrehu  FIT CVUT 27.1.2010
Par IT Postrehu FIT CVUT 27.1.2010milansames
 

Similar to Entity Framework: Optimalizace a záludnosti (20)

Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
 
TNPW2-2011-06
TNPW2-2011-06TNPW2-2011-06
TNPW2-2011-06
 
TNPW2-2014-05
TNPW2-2014-05TNPW2-2014-05
TNPW2-2014-05
 
Profinit: Prezentace snídaně integrace aplikací 2016
Profinit: Prezentace snídaně integrace aplikací 2016Profinit: Prezentace snídaně integrace aplikací 2016
Profinit: Prezentace snídaně integrace aplikací 2016
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
TNPW2-2011-04
TNPW2-2011-04TNPW2-2011-04
TNPW2-2011-04
 
Nutnet Prezentace Upr
Nutnet Prezentace UprNutnet Prezentace Upr
Nutnet Prezentace Upr
 
TNPW2-2012-05
TNPW2-2012-05TNPW2-2012-05
TNPW2-2012-05
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
 
Nette: jak rozbít atom?
Nette: jak rozbít atom?Nette: jak rozbít atom?
Nette: jak rozbít atom?
 
Czjug Zari 2008
Czjug Zari 2008Czjug Zari 2008
Czjug Zari 2008
 
ASP.NET MVC a TDD
ASP.NET MVC a TDDASP.NET MVC a TDD
ASP.NET MVC a TDD
 
Odborná snídaně: Datový sklad jako Perpetuum Mobile
Odborná snídaně: Datový sklad jako Perpetuum MobileOdborná snídaně: Datový sklad jako Perpetuum Mobile
Odborná snídaně: Datový sklad jako Perpetuum Mobile
 
EZproxy Seminar Multidata
EZproxy Seminar MultidataEZproxy Seminar Multidata
EZproxy Seminar Multidata
 
TNPW2-2012-01
TNPW2-2012-01TNPW2-2012-01
TNPW2-2012-01
 
TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
TNPW2-2012-02
TNPW2-2012-02TNPW2-2012-02
TNPW2-2012-02
 
Lotus Notes 7
Lotus Notes 7Lotus Notes 7
Lotus Notes 7
 
Co přináší Oracle Database 12c Release 2
Co přináší Oracle Database 12c Release 2Co přináší Oracle Database 12c Release 2
Co přináší Oracle Database 12c Release 2
 
Par IT Postrehu FIT CVUT 27.1.2010
Par  IT Postrehu  FIT CVUT 27.1.2010Par  IT Postrehu  FIT CVUT 27.1.2010
Par IT Postrehu FIT CVUT 27.1.2010
 

More from Profinit

Reference Data Management
Reference Data ManagementReference Data Management
Reference Data ManagementProfinit
 
Cloud in examples—(how to) benefit from modern technologies in the cloud
Cloud in examples—(how to) benefit from modern technologies in the cloudCloud in examples—(how to) benefit from modern technologies in the cloud
Cloud in examples—(how to) benefit from modern technologies in the cloudProfinit
 
Building big data pipelines—lessons learned
Building big data pipelines—lessons learnedBuilding big data pipelines—lessons learned
Building big data pipelines—lessons learnedProfinit
 
Understand your data dependencies – Key enabler to efficient modernisation
 Understand your data dependencies – Key enabler to efficient modernisation  Understand your data dependencies – Key enabler to efficient modernisation
Understand your data dependencies – Key enabler to efficient modernisation Profinit
 
Propensity Modelling for Banks
Propensity Modelling for BanksPropensity Modelling for Banks
Propensity Modelling for BanksProfinit
 
Legacy systems modernisation
Legacy systems modernisationLegacy systems modernisation
Legacy systems modernisationProfinit
 
Automating Data Lakes, Data Warehouses and Data Stores
Automating Data Lakes, Data Warehouses and Data StoresAutomating Data Lakes, Data Warehouses and Data Stores
Automating Data Lakes, Data Warehouses and Data StoresProfinit
 
4 Steps Towards Data Transparency
4 Steps Towards Data Transparency4 Steps Towards Data Transparency
4 Steps Towards Data TransparencyProfinit
 
Software systems modernisation
Software systems modernisationSoftware systems modernisation
Software systems modernisationProfinit
 
Data Science a MLOps v prostředí cloudu
Data Science a MLOps v prostředí clouduData Science a MLOps v prostředí cloudu
Data Science a MLOps v prostředí clouduProfinit
 
Detekce sociálních vazeb: domácnosti a přátelé
Detekce sociálních vazeb: domácnosti a přáteléDetekce sociálních vazeb: domácnosti a přátelé
Detekce sociálních vazeb: domácnosti a přáteléProfinit
 
Výsledky backtestu propensitního modelu
Výsledky backtestu propensitního modeluVýsledky backtestu propensitního modelu
Výsledky backtestu propensitního modeluProfinit
 
Propensitní modelování
Propensitní modelováníPropensitní modelování
Propensitní modelováníProfinit
 
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...Profinit Webinar: Benefits of Software Systems Modernization over their Repla...
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...Profinit
 
Profinit webinar: Instalment Detector
Profinit webinar: Instalment DetectorProfinit webinar: Instalment Detector
Profinit webinar: Instalment DetectorProfinit
 
Profinit_snidane_DWH_22_10_2019_publish
Profinit_snidane_DWH_22_10_2019_publishProfinit_snidane_DWH_22_10_2019_publish
Profinit_snidane_DWH_22_10_2019_publishProfinit
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-publicProfinit
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-fullProfinit
 
2018 11-28 snidane-serie-kuchyne
2018 11-28 snidane-serie-kuchyne2018 11-28 snidane-serie-kuchyne
2018 11-28 snidane-serie-kuchyneProfinit
 
Matedatový sklad
Matedatový skladMatedatový sklad
Matedatový skladProfinit
 

More from Profinit (20)

Reference Data Management
Reference Data ManagementReference Data Management
Reference Data Management
 
Cloud in examples—(how to) benefit from modern technologies in the cloud
Cloud in examples—(how to) benefit from modern technologies in the cloudCloud in examples—(how to) benefit from modern technologies in the cloud
Cloud in examples—(how to) benefit from modern technologies in the cloud
 
Building big data pipelines—lessons learned
Building big data pipelines—lessons learnedBuilding big data pipelines—lessons learned
Building big data pipelines—lessons learned
 
Understand your data dependencies – Key enabler to efficient modernisation
 Understand your data dependencies – Key enabler to efficient modernisation  Understand your data dependencies – Key enabler to efficient modernisation
Understand your data dependencies – Key enabler to efficient modernisation
 
Propensity Modelling for Banks
Propensity Modelling for BanksPropensity Modelling for Banks
Propensity Modelling for Banks
 
Legacy systems modernisation
Legacy systems modernisationLegacy systems modernisation
Legacy systems modernisation
 
Automating Data Lakes, Data Warehouses and Data Stores
Automating Data Lakes, Data Warehouses and Data StoresAutomating Data Lakes, Data Warehouses and Data Stores
Automating Data Lakes, Data Warehouses and Data Stores
 
4 Steps Towards Data Transparency
4 Steps Towards Data Transparency4 Steps Towards Data Transparency
4 Steps Towards Data Transparency
 
Software systems modernisation
Software systems modernisationSoftware systems modernisation
Software systems modernisation
 
Data Science a MLOps v prostředí cloudu
Data Science a MLOps v prostředí clouduData Science a MLOps v prostředí cloudu
Data Science a MLOps v prostředí cloudu
 
Detekce sociálních vazeb: domácnosti a přátelé
Detekce sociálních vazeb: domácnosti a přáteléDetekce sociálních vazeb: domácnosti a přátelé
Detekce sociálních vazeb: domácnosti a přátelé
 
Výsledky backtestu propensitního modelu
Výsledky backtestu propensitního modeluVýsledky backtestu propensitního modelu
Výsledky backtestu propensitního modelu
 
Propensitní modelování
Propensitní modelováníPropensitní modelování
Propensitní modelování
 
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...Profinit Webinar: Benefits of Software Systems Modernization over their Repla...
Profinit Webinar: Benefits of Software Systems Modernization over their Repla...
 
Profinit webinar: Instalment Detector
Profinit webinar: Instalment DetectorProfinit webinar: Instalment Detector
Profinit webinar: Instalment Detector
 
Profinit_snidane_DWH_22_10_2019_publish
Profinit_snidane_DWH_22_10_2019_publishProfinit_snidane_DWH_22_10_2019_publish
Profinit_snidane_DWH_22_10_2019_publish
 
2019 09-23-snidane qa-public
2019 09-23-snidane qa-public2019 09-23-snidane qa-public
2019 09-23-snidane qa-public
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full
 
2018 11-28 snidane-serie-kuchyne
2018 11-28 snidane-serie-kuchyne2018 11-28 snidane-serie-kuchyne
2018 11-28 snidane-serie-kuchyne
 
Matedatový sklad
Matedatový skladMatedatový sklad
Matedatový sklad
 

Entity Framework: Optimalizace a záludnosti

  • 1. © 2015 Profinit. All rights reserved. Entity Framework: Optimalizace a záludnosti Tomáš Vichta 28.11.2011
  • 2. © 2015 Profinit. All rights reserved. 2 Představení Zajímavé projekty – Platební brána PaySec – Poplatky a reporting pro obchody s cennými papíry – Personalizace elektronických cestovních pasů – Integrační platforma pro účetní systém – Párování bankovních výpisů – Generování platebních příkazů Tomáš Vichta Nezávislý konzultant, spolupracovník Profinit s.r.o. Specializace – Technická analýza a design – Vývoj .NET, MS SQL, Oracle
  • 3. © 2015 Profinit. All rights reserved. 3 Entity Framework: Optimalizace a záludnosti o Zpracování dotazu o Futures o Hromadné zpracování o Paralelní zpracování
  • 4. © 2015 Profinit. All rights reserved. 4 Zpracování dotazu o První metoda, která nevrací IQueryable, vygeneruje dotaz do DB – Např. ToArray(), ToList() o Where(Func<TEntity, bool> predicate) – Filtrovací podmínku provede až klient (.NET) – Tzn. vede typicky na select celé tabulky o Je potřeba použít Expression<Func<TEntity, bool>> – EF musí umět serializovat do SQL – Pokud neumí, exception až v runtime
  • 5. © 2015 Profinit. All rights reserved. 5 Zpracování dotazu .NET Database User code EF internals Network communication Query compilation & planning Execution (disk operations, ...) Network communication EF internals User code
  • 6. © 2015 Profinit. All rights reserved. 6 Futures o nuget balíček EntityFramework.Extended o Pošle více EF dotazů do DB najednou, jedním SQL dotazem o Úspora času na roundtripu – síťová komunikace – interní zpracování v .NET komponentech (user code, internal EF code) – interní zpracování v DB serveru o Má smysl řešit – při velkých požadavcích na výkon a očekávanému velkému zatížení aplikace – pokud lze zřetězit více (nezávislých) dotazů za sebou – a nebo místo toho kód zabalit např. do stored procedure, která toho může uvnitř udělat více, a také může vrátit více resultsetů zpět do EF (podporuje např. MS SQL)
  • 7. © 2015 Profinit. All rights reserved. 7 Hromadné zpracování UPDATE, DELETE o Potřeba řešit při insert/update/delete řádově stovek a více entit najednou o EF obecně není dělaný na hromadné operace o Možnosti – Vypnout DbContext.Configuration. AutoDetectChangesEnabled a ProxyCreationEnabled, ValidateOnSaveEnabled • V EF6 málo významný vliv na výkon • Nefunguje ChangeTracking, do DB jde také sada samostatných per-entity příkazů – Dávkové UPDATE/DELETE operace pomocí EntityFramework.Extended • Obalí EF dotaz UPDATE/DELETE klauzulí • Méně efektivní, než ručně napsaný UPDATE/DELETE, ale mnohem výkonnější, než samostatné příkazy pro jednotlivé entity • Nevýhoda – jde mimo ChangeTracking – Ručně psaný UPDATE, DELETE • v .NET kódu • Nebo uložená procedura • Nejrychlejší • Opět přicházíme o ChangeTracking
  • 8. © 2015 Profinit. All rights reserved. 8 Hromadné zpracování BULK INSERT o SQL BULK INSERT o Řádově rychlejší, než klasický INSERT o Při špatném použití riziko insertu nekonzistentních dat! o V .NET třída System.Data.SqlClient.SqlBulkCopy – Použití přímo této třídy by bylo nejefektivnější o EF wrapper - např. nuget EntityFramework.BulkInsert – Jde o extrémní zneužití EF, ale funguje to… o Nezapomínat na paměťové nároky
  • 9. © 2015 Profinit. All rights reserved. 9 Paralelní zpracování o EF context není thread safe o Nelze paralelizovat na stejné DB session (DbContextu) – .NET lockováním DB dotazů si moc nepomůžete – DB operace je obvykle to, co trvá nejdéle. o Pozor na deadlocky, resource contention, atd. o Nejjednodušší - paralelizovat co nejméně o Nezapomínat - ASP.NET web – thread per request, tzn. implicitně paralelní prostředí! Obdobně desktop aplikace. o Obvykle – samostatný DbContext pro každou paralelní větev (thread, task)
  • 10. © 2015 Profinit. All rights reserved. Diskuze
  • 11. © 2015 Profinit. All rights reserved. Díky za pozornost • 1
  • 12. © 2015 Profinit. All rights reserved. Profinit, s.r.o., Tychonova 2, 160 00 Praha 6, +420 224 316 016, www.profinit.eu Společnost PROFINIT je členem nadnárodní skupiny New Frontier Group, která je leadrem v oblasti digitální transformace organizací a firem ve střední a východní Evropě. S více než 2000 zaměstnanci v 17 zemích patří mezi deset největších poskytovatelů ICT služeb v celém CEE regionu a řadí se ke špičce v oblasti vývoje software na zakázku, data managementu, datových skladů a business intelligence. PROFINIT má řadu významných zákazníků z finančního a telekomunikačního sektoru, utilit a státní správy. Společnost se primárně zaměřuje na konzultační služby v oblasti digitální transformace, technologické služby a outsourcing. Podle údajů IDC (2012) patří PROFINIT mezi 5 největších firem v oblasti vývoje software na zakázku v České Republice a je držitelem řady dalších ocenění. Shaping future, delivering results!

Editor's Notes

  1. -select všeho se často pozná až na velkých datech a samostatném DB serveru
  2. -rychlost SP vždy lepší než .NET layers -paměťové nároky
  3. DbContext.Configuration.EnsureTransactionsForFunctionsAndCommands Předčasná optimalizace – select celé tabulky, foreach s dotazy vs. fututres, parallel; unit testy lazy loading