NASI SPONSORZY I PARTNERZY
Kursory w SQL Server
Marek Adamczuk
marek.adamczuk@gmail.com
O mnie
• Przez 15 lat tworzę i wdrażam oprogramowanie klasy
ERP
• Z SQL Server znam się od wersji 6.5
• Aktualnie: Samozatrudniony, blisko związany z Grupą
Skłodowscy (branża: doradztwo podatkowe)
• MCP (od 1999), MSCE, MCDBA, MCTS
• W latach 2009-2011 MVP w kategorii SQL Server
• Prelegent (MTS, C2C, SQL Day, PLSSUG). Na SQL Day
nieprzerwanie od 2009 roku
• W wolnym czasie: tenis, gitara klasyczna i skrzypce
SQLDay 2012
O sesji
• Dlaczego kursory są złe?
• Kiedy kursory nie są złe?
• Kursory SQL rozebrane na czynniki pierwsze
–
–
–
–

LOCAL/GLOBAL?
STATIC/DYNAMIC/KEYSET?
SCROLL/FORWARD_ONLY?
READ_ONLY/SCROLL_LOCKS/OPTIMISTIC?

• Kursory API – jak to działa?

SQLDay 2013
Co to jest kursor?
• Resultset – wynik zapytania!
– Przystosowany do przetwarzania rekord po rekordzie,
zazwyczaj w pętli
– Można się po nim poruszać (przewijać)
– Może być edytowalny

SQLDay 2013
Dlaczego kursory są złe?
• Są znacznie wolniejsze niż przetwarzanie zbiorów, bo:
–
–
–
–

Operacje wykonywane są w pętli
Wymagają wielu drobnych operacji
Czasami przy każdym odczycie odświeżają wynik
Zajmują zasoby serwera

SQLDay 2013
Kiedy kursory nie są złe?
• Przy bardzo skomplikowanych obliczeniach
• Przy zagadnieniach iteracyjnych, w których kolejna
iteracja zależy od wyników poprzedniej
• Modyfikujemy dużo danych na tabeli o bardzo
intensywnym wielodostępie

SQLDay 2013
Lokalny czy globalny?
• Jak to działa?
– Automatyka DEALLOCATE
– Lokalny – „widziany” tylko przez bieżący zakres (tak jak
zmienna)
– Globalny – „widziany” przez całe połączenie

• DEFAULT:
– Opcja bazy CURSOR_DEFAULT (LOCAL/GLOBAL)
– DEAULT DEFAULTU: GLOBAL!

• Jak to obejrzeć?
– sys.dm_exec_cursors()
SQLDay 2013
Aktualność rezultatu
• Opcje: LOCAL, KEYSET, GLOBAL
• LOCAL: cały rezultat zapamiętany od razu przy OPEN,
modyfikacji nie widać
• GLOBAL: każdy rekord odświeżany przy fetch
• KEYSET: zapamiętane klucze, pola niekluczowe
odświeżane

SQLDay 2013
Edytowalność/współbieżność
• OPCJE: READ_ONLY, SCROLL_LOCKS, OPTIMISTIC
• DEFAULT: to zależy 
– Samego zapytania
– Istnienia kluczy

SQLDay 2013
Nawigacja
• OPCJE: FORWARD_ONLY, SCROLL
• FETCH:
–
–
–
–

NEXT
PRIOR
RELATIVE @n
ABSOLUTE @n

SQLDay 2013
Kursory API
• Specjalne API do dostępu kursorowego
• Procedury (NIEUDOKUMENTOWANE):
–
–
–
–

sp_cursoropen
sp_cursorfetch
sp_cursor
sp_cursorclose

• Używane automatycznie przez ADO/OLEDB gdy
zdefiniujemy kursor po stronie serwera
• Na profilerze – RPC:Starting, RPC:Completed
• http://www.kaifa6.com/v/CSDNSQLDaimaShouce/sp_cur
sor.htm
SQLDay 2013
NASI SPONSORZY I PARTNERZY

Organizacja: Polskie Stowarzyszenie Użytkowników SQL Server - PLSSUG
Produkcja: DATA MASTER Maciej Pilecki

More Related Content

PDF
CISSPDAY 2011 - 2 AM A Disaster just Began
PDF
SQLDay2013_Denny Cherry - Table indexing for the .NET Developer
PDF
SQL DAY 2012 | DEV Track | Session 9 - Data Mining Analiza Przepływowa by M.S...
PDF
SQLDay2013_MarcinSzeliga_SQLServer2012FastTrackDWReferenceArchitectures
PDF
38Spotkanie_PLSSUGweWroclawiu_Keynote
PDF
SQLDay2013_MarcinSzeliga_StoredProcedures
PDF
SQL DAY 2012 | DEV Track | Session 6 - Master Data Management by W.Bielski 6 ...
PDF
SQLDay2011_Sesja02_Collation_Marek Adamczuk
CISSPDAY 2011 - 2 AM A Disaster just Began
SQLDay2013_Denny Cherry - Table indexing for the .NET Developer
SQL DAY 2012 | DEV Track | Session 9 - Data Mining Analiza Przepływowa by M.S...
SQLDay2013_MarcinSzeliga_SQLServer2012FastTrackDWReferenceArchitectures
38Spotkanie_PLSSUGweWroclawiu_Keynote
SQLDay2013_MarcinSzeliga_StoredProcedures
SQL DAY 2012 | DEV Track | Session 6 - Master Data Management by W.Bielski 6 ...
SQLDay2011_Sesja02_Collation_Marek Adamczuk

Viewers also liked (17)

PDF
SQLDay2013_GrzegorzStolecki_KonsolidacjaBI
PDF
SQLDay2013_PawełPotasiński_GeografiaSQLServer2012
PDF
SQLDay2013_DennyCherry_GettingSQLServiceBrokerUp&Running
PDF
SQLDay2013_MaciejPilecki_Lock&Latches
PDF
SQLDay2013_ChrisWebb_SSASDesignMistakes
PPTX
Sql day2015 fts
DOCX
26th_Meetup_of_PLSSUG_WROCLAW-ColumnStore_Indexes_byBeataZalewa_scripts
PDF
SQLDay2013_Denny Cherry - SQLServer2012inaHighlyAvailableWorld
PDF
SQLDay2013_ChrisWebb_DAXMD
PDF
SQLDay2013_GrzegorzStolecki_RealTimeOLAP
PDF
SQLDay2013_PawełPotasiński_ParallelDataWareHouse
PDF
SQLDay2013_ChrisWebb_CubeDesign&PerformanceTuning
PDF
GoldenLine.pl - Od Startupu do... Startupu :-)
PDF
SQL DAY 2012 | DEV Track | Session 8 - Getting Dimension with Data by C.Tecta...
PDF
Maintenance_Plans_Zupełnie_Znienacka
PPT
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
PPT
Śniadanie Daje Moc
SQLDay2013_GrzegorzStolecki_KonsolidacjaBI
SQLDay2013_PawełPotasiński_GeografiaSQLServer2012
SQLDay2013_DennyCherry_GettingSQLServiceBrokerUp&Running
SQLDay2013_MaciejPilecki_Lock&Latches
SQLDay2013_ChrisWebb_SSASDesignMistakes
Sql day2015 fts
26th_Meetup_of_PLSSUG_WROCLAW-ColumnStore_Indexes_byBeataZalewa_scripts
SQLDay2013_Denny Cherry - SQLServer2012inaHighlyAvailableWorld
SQLDay2013_ChrisWebb_DAXMD
SQLDay2013_GrzegorzStolecki_RealTimeOLAP
SQLDay2013_PawełPotasiński_ParallelDataWareHouse
SQLDay2013_ChrisWebb_CubeDesign&PerformanceTuning
GoldenLine.pl - Od Startupu do... Startupu :-)
SQL DAY 2012 | DEV Track | Session 8 - Getting Dimension with Data by C.Tecta...
Maintenance_Plans_Zupełnie_Znienacka
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Śniadanie Daje Moc
Ad

Similar to SQLDay2013_MarekAdamczuk_Kursory (15)

PPTX
Jak szybko przetwarzasz hurtowe ilości XML?
PPTX
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
PDF
Skalowanie PostgreSQL @ DBConf.PL 2014
PPTX
Zasilanie hurtowni danych w SSIS w praktyce
PPTX
SQLDay 2014 - Change Tracking & Change Data Capture
PPTX
Podstawy ETL z SSIS
PPTX
Zautomatyzuj swój proces wdrażania projektów SSIS
PPSX
Change Tracking
PDF
Liquibase w praktyce
PPTX
Microsoft Business Intelligence w 2017 roku
PDF
OSGi, deklaratywnie
PPTX
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
PDF
MongoDB 2011
PDF
Automatyzacja utrzymania jakości w środowisku PHP
PPTX
SQL Server 2014: In-memory OLTP
Jak szybko przetwarzasz hurtowe ilości XML?
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
Skalowanie PostgreSQL @ DBConf.PL 2014
Zasilanie hurtowni danych w SSIS w praktyce
SQLDay 2014 - Change Tracking & Change Data Capture
Podstawy ETL z SSIS
Zautomatyzuj swój proces wdrażania projektów SSIS
Change Tracking
Liquibase w praktyce
Microsoft Business Intelligence w 2017 roku
OSGi, deklaratywnie
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
MongoDB 2011
Automatyzacja utrzymania jakości w środowisku PHP
SQL Server 2014: In-memory OLTP
Ad

More from Polish SQL Server User Group (8)

PDF
SQLDay2013_MarcinSzeliga_DataInDataMining
PDF
26th_Meetup_of_PLSSUG-ColumnStore_Indexes_byBeataZalewa_session
PDF
SQLDay2011_Sesja03_Fakty,MiaryISwiatRealny_GrzegorzStolecki
PDF
SQLDay2011_Sesja01_ModelowanieIZasilanieWymiarówHurtowniDanych_ŁukaszGrala
PDF
SQLDay2011_Sesja05_MicrosoftSQLServerExecutionPlansFromCompilationToCachingTo...
PDF
How to tune a database application without changing a single query - Maciej P...
PDF
Co nowego w SQL Server 11 – Denali CTP1 - Grzegorz Stolecki, Łukasz Grala i K...
PDF
Master Data Services – Po co nam kolejna usługa w Sql Server - Mariusz Koprowski
SQLDay2013_MarcinSzeliga_DataInDataMining
26th_Meetup_of_PLSSUG-ColumnStore_Indexes_byBeataZalewa_session
SQLDay2011_Sesja03_Fakty,MiaryISwiatRealny_GrzegorzStolecki
SQLDay2011_Sesja01_ModelowanieIZasilanieWymiarówHurtowniDanych_ŁukaszGrala
SQLDay2011_Sesja05_MicrosoftSQLServerExecutionPlansFromCompilationToCachingTo...
How to tune a database application without changing a single query - Maciej P...
Co nowego w SQL Server 11 – Denali CTP1 - Grzegorz Stolecki, Łukasz Grala i K...
Master Data Services – Po co nam kolejna usługa w Sql Server - Mariusz Koprowski

SQLDay2013_MarekAdamczuk_Kursory

  • 1. NASI SPONSORZY I PARTNERZY
  • 2. Kursory w SQL Server Marek Adamczuk marek.adamczuk@gmail.com
  • 3. O mnie • Przez 15 lat tworzę i wdrażam oprogramowanie klasy ERP • Z SQL Server znam się od wersji 6.5 • Aktualnie: Samozatrudniony, blisko związany z Grupą Skłodowscy (branża: doradztwo podatkowe) • MCP (od 1999), MSCE, MCDBA, MCTS • W latach 2009-2011 MVP w kategorii SQL Server • Prelegent (MTS, C2C, SQL Day, PLSSUG). Na SQL Day nieprzerwanie od 2009 roku • W wolnym czasie: tenis, gitara klasyczna i skrzypce SQLDay 2012
  • 4. O sesji • Dlaczego kursory są złe? • Kiedy kursory nie są złe? • Kursory SQL rozebrane na czynniki pierwsze – – – – LOCAL/GLOBAL? STATIC/DYNAMIC/KEYSET? SCROLL/FORWARD_ONLY? READ_ONLY/SCROLL_LOCKS/OPTIMISTIC? • Kursory API – jak to działa? SQLDay 2013
  • 5. Co to jest kursor? • Resultset – wynik zapytania! – Przystosowany do przetwarzania rekord po rekordzie, zazwyczaj w pętli – Można się po nim poruszać (przewijać) – Może być edytowalny SQLDay 2013
  • 6. Dlaczego kursory są złe? • Są znacznie wolniejsze niż przetwarzanie zbiorów, bo: – – – – Operacje wykonywane są w pętli Wymagają wielu drobnych operacji Czasami przy każdym odczycie odświeżają wynik Zajmują zasoby serwera SQLDay 2013
  • 7. Kiedy kursory nie są złe? • Przy bardzo skomplikowanych obliczeniach • Przy zagadnieniach iteracyjnych, w których kolejna iteracja zależy od wyników poprzedniej • Modyfikujemy dużo danych na tabeli o bardzo intensywnym wielodostępie SQLDay 2013
  • 8. Lokalny czy globalny? • Jak to działa? – Automatyka DEALLOCATE – Lokalny – „widziany” tylko przez bieżący zakres (tak jak zmienna) – Globalny – „widziany” przez całe połączenie • DEFAULT: – Opcja bazy CURSOR_DEFAULT (LOCAL/GLOBAL) – DEAULT DEFAULTU: GLOBAL! • Jak to obejrzeć? – sys.dm_exec_cursors() SQLDay 2013
  • 9. Aktualność rezultatu • Opcje: LOCAL, KEYSET, GLOBAL • LOCAL: cały rezultat zapamiętany od razu przy OPEN, modyfikacji nie widać • GLOBAL: każdy rekord odświeżany przy fetch • KEYSET: zapamiętane klucze, pola niekluczowe odświeżane SQLDay 2013
  • 10. Edytowalność/współbieżność • OPCJE: READ_ONLY, SCROLL_LOCKS, OPTIMISTIC • DEFAULT: to zależy  – Samego zapytania – Istnienia kluczy SQLDay 2013
  • 11. Nawigacja • OPCJE: FORWARD_ONLY, SCROLL • FETCH: – – – – NEXT PRIOR RELATIVE @n ABSOLUTE @n SQLDay 2013
  • 12. Kursory API • Specjalne API do dostępu kursorowego • Procedury (NIEUDOKUMENTOWANE): – – – – sp_cursoropen sp_cursorfetch sp_cursor sp_cursorclose • Używane automatycznie przez ADO/OLEDB gdy zdefiniujemy kursor po stronie serwera • Na profilerze – RPC:Starting, RPC:Completed • http://www.kaifa6.com/v/CSDNSQLDaimaShouce/sp_cur sor.htm SQLDay 2013
  • 13. NASI SPONSORZY I PARTNERZY Organizacja: Polskie Stowarzyszenie Użytkowników SQL Server - PLSSUG Produkcja: DATA MASTER Maciej Pilecki