<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MSSQL &#8211; Rößler Developments GmbH</title>
	<atom:link href="https://roessler-developments.de/tag/mssql/feed/" rel="self" type="application/rss+xml" />
	<link>https://roessler-developments.de</link>
	<description>Software, IT-Dienstleistungen &#38; mehr...</description>
	<lastBuildDate>Tue, 15 Jun 2021 07:19:16 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://roessler-developments.de/wp-content/uploads/2020/07/cropped-RD_Firmenlogo-1-32x32.png</url>
	<title>MSSQL &#8211; Rößler Developments GmbH</title>
	<link>https://roessler-developments.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Optimierung Schnittstelle &#8211; Teil II</title>
		<link>https://roessler-developments.de/optimierung-schnittstelle-teil-ii/</link>
		
		<dc:creator><![CDATA[Max Rößler]]></dc:creator>
		<pubDate>Wed, 16 Dec 2020 12:19:00 +0000</pubDate>
				<category><![CDATA[Datenmigration]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[VB.net]]></category>
		<category><![CDATA[Webservice]]></category>
		<guid isPermaLink="false">https://roessler-developments.de/?p=547</guid>

					<description><![CDATA[Wie schon unter Optimierung Schnittstelle berichtet, konnte der Datenabruf über eine Schnittstelle von etwa 40min auf 3min Verarbeitungsdauer reduziert werden. Die Ursache für die lange Verarbeitungsdauer war die Nutzung einer String-Variable anstelle des StringBuilders in VB.net. Allerdings waren wir auch der Ansicht, dass da noch viel Zeit verloren geht bei mehr als 260.000 Einzel-Inserts in &#8230; <p class="link-more"><a href="https://roessler-developments.de/optimierung-schnittstelle-teil-ii/" class="more-link"><span class="screen-reader-text">„Optimierung Schnittstelle &#8211; Teil II“ </span>weiterlesen</a></p>]]></description>
										<content:encoded><![CDATA[
<p>Wie schon unter <strong><a href="https://roessler-developments.de/optimierung-schnittstelle" data-type="URL" data-id="https://roessler-developments.de/optimierung-schnittstelle" target="_blank" rel="noreferrer noopener">Optimierung Schnittstelle</a></strong> berichtet, konnte der Datenabruf über eine Schnittstelle von etwa 40min auf 3min Verarbeitungsdauer reduziert werden. Die Ursache für die lange Verarbeitungsdauer war die Nutzung einer String-Variable anstelle des StringBuilders in VB.net. </p>



<p>Allerdings waren wir auch der Ansicht, dass da noch viel Zeit verloren geht bei mehr als 260.000 Einzel-Inserts in die Datenbank. Also haben wir uns noch einmal ein halbe Stunde mit der Thematik beschäftigt und eine DataTable erstellt, die die Felder dynamisch ermittelt und die richtigen Datentypen setzt.</p>



<p>Diese wird dann zunächst mit den Daten aus dem Webservice befüllt und dann in 10.000er Blöcken per BulkInsert in die Zieldatenbank übertragen.</p>



<p>Der Effekt war dieser Modifikation besser als erhofft: <br>Anstelle der 3min geht die Verarbeitung damit nun in etwa 20s. Eine ordentliche Steigerung, wenn man sich die ursprünglichen 40min Verarbeitungszeit vor Augen führt. </p>



<p>So machen Optimierungen Spass!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Datenbanken optimieren &#8211; ein Rückblick</title>
		<link>https://roessler-developments.de/datenbanken-optimieren/</link>
		
		<dc:creator><![CDATA[Max Rößler]]></dc:creator>
		<pubDate>Mon, 07 Dec 2020 08:45:00 +0000</pubDate>
				<category><![CDATA[IT-Dienstleistung]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://roessler-developments.de/?p=487</guid>

					<description><![CDATA[Vor ziemlich genau einem Jahr haben wir an vier Tagen in kleiner Runde vom fundierten Wissen von Torsten Strauss profitiert. Das Ergebnis kann sich sehen lassen wie wir finden &#8211; und kommt natürlich unmittelbar unseren Kunden zu Gute, für die wir IT-Dienstleistungen erbringen. Danke Torsten!]]></description>
										<content:encoded><![CDATA[
<p>Vor ziemlich genau einem Jahr haben wir an vier Tagen in kleiner Runde vom fundierten Wissen von Torsten Strauss profitiert. Das Ergebnis kann sich sehen lassen wie wir finden &#8211; und kommt natürlich unmittelbar unseren Kunden zu Gute, für die wir IT-Dienstleistungen erbringen.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="966" height="743" src="https://roessler-developments.de/wp-content/uploads/2020/10/PerformanceTuning.jpg" alt="" class="wp-image-492" srcset="https://roessler-developments.de/wp-content/uploads/2020/10/PerformanceTuning.jpg 966w, https://roessler-developments.de/wp-content/uploads/2020/10/PerformanceTuning-300x231.jpg 300w, https://roessler-developments.de/wp-content/uploads/2020/10/PerformanceTuning-768x591.jpg 768w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /></figure>



<p>Danke Torsten!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Optimierung Schnittstelle</title>
		<link>https://roessler-developments.de/optimierung-schnittstelle/</link>
		
		<dc:creator><![CDATA[Max Rößler]]></dc:creator>
		<pubDate>Tue, 10 Nov 2020 12:35:00 +0000</pubDate>
				<category><![CDATA[Datenmigration]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Laufzeitoptimierung]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[VB.net]]></category>
		<category><![CDATA[Webservice]]></category>
		<guid isPermaLink="false">https://roessler-developments.de/?p=471</guid>

					<description><![CDATA[Kürzlich kam ein Kunde auf uns zu, dem das Laufzeitzeitverhalten für eine Schnitsttelle nicht gefiel..]]></description>
										<content:encoded><![CDATA[
<p>Kürzlich kam ein Kunde auf uns zu, dem das Laufzeitzeitverhalten für eine Schnitsttelle nicht gefiel:</p>



<h2 class="wp-block-heading">Ausgangsituation</h2>



<p>Über einen Webservice werden täglich in einem Teilschritt rund 270.000 Datensäze abgerufen. Diese müssen zum Teil umformatiert werden und das Ergebnis (die Anzahl der Zeilen bleibt dabei unverändert) in eine Datenbanktabelle (MSSQL) eingefügt werden.</p>



<h2 class="wp-block-heading">Erster Modifikationsversuch</h2>



<p>Zunächst lag Nahe, dass das Schreiben mit Einzel-Inserts zu den langen Laufzeiten führt. Also wurde VB.net-Code derart modifiziert, dass immer 10.000 Zeilen zunächst in eine lokale DataTable im Arbeitsspeicher geschrieben wurden und diese dann per Bulk-Insert in die Zieltabelle eingefügt wurden.</p>



<p>Die Verarbeitung war zunächst &#8220;gefühlt&#8221; schneller, wurde dann aber zusehends langsamer. Also musste noch ein weiterer Grund für den Performanceeinbruch vorliegen.</p>



<h2 class="wp-block-heading">Die Lösung</h2>



<p>Zur Verarbeitung der Daten wurde der XML-Node als String verarbeitet. Dabei mussten Bestandteile der Daten per replace für die Aufbereitung der Zieldatenbank geändert bzw. neu formatiert werden. </p>



<p>Die Lösung bestand darin die Verarbeitung von Strings zu verhindern und die Daten, soweit es geht im StringBuilder zu verarbeiten. Erst am Ende ist eine Konvertierung zu einem String notwendig, um die Daten per split() in ein Array zu übernehmen.</p>



<p>Außerdem wurde die For&#8230;Next-Schleife derart modifziert, dass nicht erst der jeweilige XML-Node gesucht werden muss. Mit For..Each werden einfach der Reihe nach alle Knoten durchlaufen.</p>



<p>Im Gegensatz zum BulkInsert, gab es nun keinen Geschwindigkeitsverlust mehr. Die Verarbeitungszeit konnte damit von ursprünglich mehr als 40min auf etwa 4min gesenkt werden &#8211; und das noch ohne BulkInsert. Den Einfluss von BulkInsert testen wir aber auch noch in den kommenden Tagen.</p>



<pre class="wp-block-code"><code>' Vorher:
For i = 0 To colmax - 1

	result = XmlDecodeData(xmldoc.GetElementsByTagName("data:Result").Item(i).InnerXml.ToString)

	' Umstellung Trennzeichen damit Semikolons in Textfeldern nicht stören
	result = Replace(result, """;""", """||""")
	cols = Split(result, "||")
	
	' ...weiterer Code
	
Next</code></pre>



<p>Im ursprünglichen Code, gab es durch die String-Variablen gleich mehrere Stellen, die in StringBuilder-Funktionen konvertiert werden mussten. Die XmlDecodeData wurde ebenfalls in eine StringBuilder-fähige Version umgebaut:</p>



<pre class="wp-block-code"><code>' Nachher:
Dim result As StringBuilder = New Stringuilder("")
Dim cols() As String

For Each XmlRow In xmldoc.GetElementsByTagName("data:Result")

	result.Clear()
	result.Append(XmlRow.InnerXml.Replace(""";""", """||""") 
	result = XmlDecodeDataSB(result)
    cols = Split(result.ToString(), "||")
	
	'... weiterer Code
Next</code></pre>



<p>Weitere Vorschläge Willkommen! Update folgt..</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
