Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SQLDay2013_MarekAdamczuk_Kursory

809 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

SQLDay2013_MarekAdamczuk_Kursory

  1. 1. NASI SPONSORZY I PARTNERZY
  2. 2. Kursory w SQL Server Marek Adamczuk marek.adamczuk@gmail.com
  3. 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. 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. 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. 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. 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. 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. 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. 10. Edytowalność/współbieżność • OPCJE: READ_ONLY, SCROLL_LOCKS, OPTIMISTIC • DEFAULT: to zależy  – Samego zapytania – Istnienia kluczy SQLDay 2013
  11. 11. Nawigacja • OPCJE: FORWARD_ONLY, SCROLL • FETCH: – – – – NEXT PRIOR RELATIVE @n ABSOLUTE @n SQLDay 2013
  12. 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. 13. NASI SPONSORZY I PARTNERZY Organizacja: Polskie Stowarzyszenie Użytkowników SQL Server - PLSSUG Produkcja: DATA MASTER Maciej Pilecki

×