Upload
polish-sql-server-user-group
View
432
Download
0
Embed Size (px)
Citation preview
NASI SPONSORZY I PARTNERZY
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_cursor.htm
SQLDay 2013
NASI SPONSORZY I PARTNERZY
Organizacja: Polskie Stowarzyszenie Użytkowników SQL Server - PLSSUGProdukcja: DATA MASTER Maciej Pilecki