Successfully reported this slideshow.

Jak szybko przetwarzasz hurtowe ilości XML?

0

Share

Upcoming SlideShare
XML w SQL Server w praktyce
XML w SQL Server w praktyce
Loading in …3
×
1 of 43
1 of 43

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Jak szybko przetwarzasz hurtowe ilości XML?

  1. 1. Jak szybko przetwarzasz hurtowe ilości XML? Bartosz Ratajczyk b.ratajczyk@gmail.com
  2. 2. SQLDay 2016 O czym będzie? • O różnych technikach, które mogą się przydać przy przetwarzaniu XML w SQL Server • Z naciskiem na sytuacje, kiedy tych danych jest dużo Czyli: • Zasilanie SQL Server plikami XML (również o rozmiarach wielu GB) • XML Shredding • Indeksy XML • Dobre praktyki XQuery
  3. 3. SQLDay 2016 Bartosz Ratajczyk Konsultant SQL Server związany z firmą 7N Bardziej programista niż administrator Udziela się na warszawskiej grupie PLSSUG MCSE Data Platform MCT http://bartekr.net | b.ratajczyk@gmail.com
  4. 4. CHCĘ MIEĆ TE PLIKI W BAZIE SQLDay 2016
  5. 5. SQLDay 2016 Jak możemy zasilać dane XML Przyjrzymy się trzem metodom: • Z poziomu SQL Server: OPENROWSET • Z zewnątrz (np. skrypt Powershell) • SSIS (czyli też z zewnątrz)
  6. 6. DEMO Zasilmy dane SQLDay 2016
  7. 7. SQLDay 2016 Zasilanie małych plików 0 50 100 150 200 250 300 1000 5000 10000 15000 20000 25000 Czaszasilaniawsekundach Ilość plików Invoke-Sqlcmd OPENROWSET SSIS
  8. 8. SQLDay 2016 Zasilanie dużych plików • Ograniczenie rozmiaru XML do 2GB • Najlepiej zasilać przez OPENROWSET • Mocno wpływa na tempdb
  9. 9. SQLDay 2016 Jeszcze o OPENROWSET https://msdn.microsoft.com/en-us/library/ms190312.aspx SINGLE_CLOB == VARCHAR(MAX) SINGLE_NCLOB == NVARCHAR(MAX) SINGLE_BLOB == VARBINARY(MAX)
  10. 10. NIE CHCĘ XML, CHCĘ SAME DANE SQLDay 2016
  11. 11. SQLDay 2016 SSIS – XML Source (1) • Rozbijanie danych XML do postaci relacyjnej na podstawie XSD • Dla prostych plików jak znalazł • Wymaga XML w formie DOKUMENTU, nie umie obsłużyć FRAGMENTÓW
  12. 12. SQLDay 2016 SSIS – XML Source (2) http://blog.hoegaerden.be/2011/04/20/loading-complex-xml-using-ssis/
  13. 13. SQLDay 2016 SQLXML - czyli można też inaczej • Przetwarza XML do postaci relacyjnej na podstawie XSD • Komponent COM instalowany niezależnie od SQL Server • Dostarczany przez Microsoft • Ma duże możliwości, ale też swoje ograniczenia (a jakże!) • Kontekstowy – obecny węzeł jest punktem odniesienia • Nie jest nachalny dla pamięci i daje radę dużym plikom • Dodatkowe adnotacje XSD
  14. 14. SQLDay 2016 Przykład użycia SQLXML - BulkLoad
  15. 15. DEMO Jak wygląda XSD z adnotacjami? SQLDay 2016
  16. 16. MAM XML W BAZIE, CO Z NIM MOGĘ ZROBIĆ? SQLDay 2016
  17. 17. SQLDay 2016 XML Shredding • XML Shredding, czyli rozbijanie danych XML do postaci relacyjnej • OPENXML • XQuery - .nodes()
  18. 18. SQLDay 2016 Ten stary, niedobry OPENXML • sp_xml_preparedocument, sp_xml_removedocument • Wycofywany/niezalecany • Umie przetworzyć tylko jeden dokument XML na raz • Wymaga zwalniania pamięci https://msdn.microsoft.com/en-us/library/ms187367.aspx
  19. 19. SQLDay 2016 MEMOBJ_MSXML + CMEMTHREAD http://speedysql.com/2015/02/04/cmemthread-and-sp_xml_removedocument SQL Server 2012, 800GB RAM
  20. 20. SQLDay 2016 OPENXML
  21. 21. SQLDay 2016 Ten nowoczesny .nodes() • Rozbija XML na rekordy (tak jak WITH w OPENXML) • Występuje razem z kolegami: o .query() o .value() o .exist() • Przyjaźni się bardzo z CROSS APPLY • Umie przetworzyć wiele dokumentów na raz • Zalecany model przetwarzania Ale: • Ma problemy z szacowaniem ilości rekordów • Mówią, że jest wolniejszy od OPENXML
  22. 22. SQLDay 2016 Używamy .nodes()
  23. 23. SQLDay 2016 Przykład szacowania .nodes()
  24. 24. XML A PLANY ZAPYTAŃ SQLDay 2016
  25. 25. SQLDay 2016 OPENXML
  26. 26. SQLDay 2016 XQuery • Operatory TVF występują jeśli nie ma indeksów XML • Extended Operator (UDX) sygnalizuje operację XQuery/XPath
  27. 27. JAK TO PRZYSPIESZYĆ, BO WOLNO DZIAŁA? Może jakieś indeksy pomogą? SQLDay 2016
  28. 28. SQLDay 2016 PRIMARY XML INDEX • Wymaga PRIMARY KEY CLUSTERED na tabeli z kolumną XML • Budowany jednym wątkiem (chociaż składnia dopuszcza MAXDOP) • Przebudowany wyłącznie OFFLINE • Nie obsługuje kompresji • Budowany na tych samych grupach plików co tabela
  29. 29. SQLDay 2016 Co taki indeks ma w środku?
  30. 30. SQLDay 2016 SECONDARY XML INDEX Wymagają istnienia PRIMARY XML INDEX
  31. 31. DEMO Przyspieszamy z indeksami SQLDay 2016
  32. 32. SQLDay 2016 Ale czy naszego dysku to nie zaboli?
  33. 33. SQLDay 2016 SELECTIVE XML INDEX
  34. 34. SQLDay 2016 Wnioski po indeksowaniu • Już sam PRIMARY XML INDEX potrafi przyspieszyć zapytanie (ale wcale nie musi) • SECONDARY XML INDEX potrafi mocno wydłużyć zapytanie • Indeksy PRIMARY i SECONDARY zajmują dużo miejsca • Rozwiązaniem problemów może być SELECTIVE XML INDEX
  35. 35. DOBRE PRAKTYKI XQUERY Jakich konstrukcji unikać, a jakich używać SQLDay 2016
  36. 36. SQLDay 2016 Dobre praktyki XQuery – czego unikać (1) • Odwołań do węzłów-rodziców (parent axis)
  37. 37. SQLDay 2016 Dobre praktyki XQuery – czego unikać (2) • Wielokrotnego używania tej samej metody (wielokrotne wyliczanie tego samego)
  38. 38. SQLDay 2016 Dobre praktyki XQuery – co stosować • Przy danych XML opartych na schemacie rzutować na typy schematu • Przy danych XML bez schematu porównywać dane jako tekst („”) • Stosować podpowiedzi przy elementach głównych (np. /root[1]/element zamiast /root/element) • Jeśli ma to sens – używać całej ścieżki na raz (np. (/a/b)[1] zamiast /a[1]/b[1])
  39. 39. SQLDay 2016 Nadmiar informacji dla optymalizatora Warto rozważyć podejście Adama Machanica: Zamiast stosować HINTS i wymuszać konkretne zachowania lepiej nakierować optymalizator na odpowiednie myślenie. Przykład: przyspieszenie przetwarzania 300x http://sqlblog.com/blogs/adam_machanic/archive/2010/01/12/t-sql- tuesday-002-is-it-xml-or-not.aspx
  40. 40. DEMO 30 000% normy SQLDay 2016
  41. 41. SQLDay 2016 Co dalej? • Channel9 – Michael Rys „Troubleshooting common XQuery and XML problems in Microsoft SQL Server based on real world examples” • Dmitri Korotkevich „Pro SQL Server Internals” • Kalen Delaney et. al. „SQL Server 2012 Internals” • Michael Coles „Pro SQL Server 2008 XML”

×