SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Jak szybko przetwarzasz hurtowe ilości XML?
Bartosz Ratajczyk
b.ratajczyk@gmail.com
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
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
CHCĘ MIEĆ TE PLIKI W BAZIE
SQLDay 2016
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)
DEMO
Zasilmy dane
SQLDay 2016
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
SQLDay 2016
Zasilanie dużych plików
• Ograniczenie rozmiaru XML do 2GB
• Najlepiej zasilać przez OPENROWSET
• Mocno wpływa na tempdb
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)
NIE CHCĘ XML, CHCĘ SAME DANE
SQLDay 2016
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
SQLDay 2016
SSIS – XML Source (2)
http://blog.hoegaerden.be/2011/04/20/loading-complex-xml-using-ssis/
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
SQLDay 2016
Przykład użycia SQLXML - BulkLoad
DEMO
Jak wygląda XSD z adnotacjami?
SQLDay 2016
MAM XML W BAZIE, CO Z NIM MOGĘ ZROBIĆ?
SQLDay 2016
SQLDay 2016
XML Shredding
• XML Shredding, czyli rozbijanie danych XML do
postaci relacyjnej
• OPENXML
• XQuery - .nodes()
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
SQLDay 2016
MEMOBJ_MSXML + CMEMTHREAD
http://speedysql.com/2015/02/04/cmemthread-and-sp_xml_removedocument
SQL Server 2012, 800GB RAM
SQLDay 2016
OPENXML
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
SQLDay 2016
Używamy .nodes()
SQLDay 2016
Przykład szacowania .nodes()
XML A PLANY ZAPYTAŃ
SQLDay 2016
SQLDay 2016
OPENXML
SQLDay 2016
XQuery
• Operatory TVF występują jeśli nie ma indeksów XML
• Extended Operator (UDX) sygnalizuje operację XQuery/XPath
JAK TO PRZYSPIESZYĆ, BO WOLNO DZIAŁA?
Może jakieś indeksy pomogą?
SQLDay 2016
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
SQLDay 2016
Co taki indeks ma w środku?
SQLDay 2016
SECONDARY XML INDEX
Wymagają istnienia PRIMARY XML INDEX
DEMO
Przyspieszamy z indeksami
SQLDay 2016
SQLDay 2016
Ale czy naszego dysku to nie zaboli?
SQLDay 2016
SELECTIVE XML INDEX
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
DOBRE PRAKTYKI XQUERY
Jakich konstrukcji unikać, a jakich używać
SQLDay 2016
SQLDay 2016
Dobre praktyki XQuery – czego unikać (1)
• Odwołań do węzłów-rodziców (parent axis)
SQLDay 2016
Dobre praktyki XQuery – czego unikać (2)
• Wielokrotnego używania tej samej metody (wielokrotne
wyliczanie tego samego)
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])
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
DEMO
30 000% normy
SQLDay 2016
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”
Jak szybko przetwarzasz hurtowe ilości XML?

Weitere ähnliche Inhalte

Andere mochten auch

第7章 索引和视图
第7章 索引和视图第7章 索引和视图
第7章 索引和视图hanmo1988
 
Infografia smart energy managemet services 2.3
Infografia smart energy managemet services 2.3Infografia smart energy managemet services 2.3
Infografia smart energy managemet services 2.3jorge navas
 
A beginners guide
A beginners guideA beginners guide
A beginners guideASAFI
 
Resiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsResiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsjorge navas
 
Resiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsResiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsjorge navas
 
第9章 transact sql程序设计
第9章   transact sql程序设计第9章   transact sql程序设计
第9章 transact sql程序设计hanmo1988
 
第6章 数据查询
第6章 数据查询第6章 数据查询
第6章 数据查询hanmo1988
 
第5章 sql server表的管理
第5章 sql server表的管理第5章 sql server表的管理
第5章 sql server表的管理hanmo1988
 
第2章 关系数据库基本原理
第2章  关系数据库基本原理第2章  关系数据库基本原理
第2章 关系数据库基本原理hanmo1988
 

Andere mochten auch (12)

第7章 索引和视图
第7章 索引和视图第7章 索引和视图
第7章 索引和视图
 
Infografia smart energy managemet services 2.3
Infografia smart energy managemet services 2.3Infografia smart energy managemet services 2.3
Infografia smart energy managemet services 2.3
 
A beginners guide
A beginners guideA beginners guide
A beginners guide
 
Resiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsResiliency in the cloud myths versus facts
Resiliency in the cloud myths versus facts
 
Alerty WMI
Alerty WMIAlerty WMI
Alerty WMI
 
Resiliency in the cloud myths versus facts
Resiliency in the cloud myths versus factsResiliency in the cloud myths versus facts
Resiliency in the cloud myths versus facts
 
第9章 transact sql程序设计
第9章   transact sql程序设计第9章   transact sql程序设计
第9章 transact sql程序设计
 
第6章 数据查询
第6章 数据查询第6章 数据查询
第6章 数据查询
 
第5章 sql server表的管理
第5章 sql server表的管理第5章 sql server表的管理
第5章 sql server表的管理
 
第2章 关系数据库基本原理
第2章  关系数据库基本原理第2章  关系数据库基本原理
第2章 关系数据库基本原理
 
第11章
第11章 第11章
第11章
 
Podstawy ETL z SSIS
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSIS
 

Ähnlich wie Jak szybko przetwarzasz hurtowe ilości XML?

"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkHighWheelSoftware
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuHighWheelSoftware
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Divante
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz
 
Microsoft SQL Server 2000. Księga eksperta
Microsoft SQL Server 2000. Księga ekspertaMicrosoft SQL Server 2000. Księga eksperta
Microsoft SQL Server 2000. Księga ekspertaWydawnictwo Helion
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics SystemArtur Wronski
 
Zautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISZautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISBartosz Ratajczyk
 
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfLogi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfTameshi Team
 
Oracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQLOracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQLWydawnictwo Helion
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and AnalyticsŁukasz Grala
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr BuckiPROIDEA
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychWomen in Technology Poland
 
Projektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalistyProjektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalistyWydawnictwo Helion
 

Ähnlich wie Jak szybko przetwarzasz hurtowe ilości XML? (20)

"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Transact-SQL. Czarna księga
Transact-SQL. Czarna księgaTransact-SQL. Czarna księga
Transact-SQL. Czarna księga
 
Scala
ScalaScala
Scala
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFramework
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13
 
Sql day2015 fts
Sql day2015 ftsSql day2015 fts
Sql day2015 fts
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
 
Microsoft SQL Server 2000. Księga eksperta
Microsoft SQL Server 2000. Księga ekspertaMicrosoft SQL Server 2000. Księga eksperta
Microsoft SQL Server 2000. Księga eksperta
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System
 
Zautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSISZautomatyzuj swój proces wdrażania projektów SSIS
Zautomatyzuj swój proces wdrażania projektów SSIS
 
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdfLogi dla dużych firm_Tameshi na AWS Community Day .pdf
Logi dla dużych firm_Tameshi na AWS Community Day .pdf
 
Oracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQLOracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQL
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
 
SQLDay2013_MarekAdamczuk_Kursory
SQLDay2013_MarekAdamczuk_KursorySQLDay2013_MarekAdamczuk_Kursory
SQLDay2013_MarekAdamczuk_Kursory
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danych
 
Projektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalistyProjektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalisty
 
MongoDB 2011
MongoDB 2011MongoDB 2011
MongoDB 2011
 

Mehr von Bartosz Ratajczyk

SQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiSQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiBartosz Ratajczyk
 
OLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastOLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastBartosz Ratajczyk
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Bartosz Ratajczyk
 
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processSqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processBartosz Ratajczyk
 
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534Bartosz Ratajczyk
 
Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Bartosz Ratajczyk
 
Czy mi się przyda hierarchyid?
Czy mi się przyda hierarchyid?Czy mi się przyda hierarchyid?
Czy mi się przyda hierarchyid?Bartosz Ratajczyk
 

Mehr von Bartosz Ratajczyk (10)

SQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiSQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze kroki
 
OLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastOLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fast
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?
 
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processSqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment process
 
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
How minimalloggingcanhelpme bartoszratajczyk_sql_sat534
 
Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99
 
Po co mi Temporal Tables?
Po co mi Temporal Tables?Po co mi Temporal Tables?
Po co mi Temporal Tables?
 
Co to te CTE?
Co to te CTE?Co to te CTE?
Co to te CTE?
 
O co chodzi z FILESTREAM?
O co chodzi z FILESTREAM?O co chodzi z FILESTREAM?
O co chodzi z FILESTREAM?
 
Czy mi się przyda hierarchyid?
Czy mi się przyda hierarchyid?Czy mi się przyda hierarchyid?
Czy mi się przyda hierarchyid?
 

Jak szybko przetwarzasz hurtowe ilości XML?

  • 1. Jak szybko przetwarzasz hurtowe ilości XML? Bartosz Ratajczyk b.ratajczyk@gmail.com
  • 2.
  • 3. 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
  • 4. 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
  • 5. CHCĘ MIEĆ TE PLIKI W BAZIE SQLDay 2016
  • 6. 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)
  • 8. 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
  • 9. SQLDay 2016 Zasilanie dużych plików • Ograniczenie rozmiaru XML do 2GB • Najlepiej zasilać przez OPENROWSET • Mocno wpływa na tempdb
  • 10. 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)
  • 11. NIE CHCĘ XML, CHCĘ SAME DANE SQLDay 2016
  • 12. 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
  • 13. SQLDay 2016 SSIS – XML Source (2) http://blog.hoegaerden.be/2011/04/20/loading-complex-xml-using-ssis/
  • 14. 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
  • 15. SQLDay 2016 Przykład użycia SQLXML - BulkLoad
  • 16. DEMO Jak wygląda XSD z adnotacjami? SQLDay 2016
  • 17. MAM XML W BAZIE, CO Z NIM MOGĘ ZROBIĆ? SQLDay 2016
  • 18. SQLDay 2016 XML Shredding • XML Shredding, czyli rozbijanie danych XML do postaci relacyjnej • OPENXML • XQuery - .nodes()
  • 19. 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
  • 20. SQLDay 2016 MEMOBJ_MSXML + CMEMTHREAD http://speedysql.com/2015/02/04/cmemthread-and-sp_xml_removedocument SQL Server 2012, 800GB RAM
  • 22. 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
  • 25. XML A PLANY ZAPYTAŃ SQLDay 2016
  • 27. SQLDay 2016 XQuery • Operatory TVF występują jeśli nie ma indeksów XML • Extended Operator (UDX) sygnalizuje operację XQuery/XPath
  • 28. JAK TO PRZYSPIESZYĆ, BO WOLNO DZIAŁA? Może jakieś indeksy pomogą? SQLDay 2016
  • 29. 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
  • 30. SQLDay 2016 Co taki indeks ma w środku?
  • 31. SQLDay 2016 SECONDARY XML INDEX Wymagają istnienia PRIMARY XML INDEX
  • 33. SQLDay 2016 Ale czy naszego dysku to nie zaboli?
  • 35. 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
  • 36. DOBRE PRAKTYKI XQUERY Jakich konstrukcji unikać, a jakich używać SQLDay 2016
  • 37. SQLDay 2016 Dobre praktyki XQuery – czego unikać (1) • Odwołań do węzłów-rodziców (parent axis)
  • 38. SQLDay 2016 Dobre praktyki XQuery – czego unikać (2) • Wielokrotnego używania tej samej metody (wielokrotne wyliczanie tego samego)
  • 39. 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])
  • 40. 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
  • 42. 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”