Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

SQLDay2013_MarekAdamczuk_Kursory

808 Aufrufe

Veröffentlicht am

Veröffentlicht in: Bildung
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

×