How to Use Parameters Like a Pro and Boost Performance by Guy Glantser

10. Mai 2017

Thema

Parameters are a fundamental part of T-SQL programming, whether they are used in stored procedures, in dynamic statements or in ad-hoc queries. Although widely used, most people aren’t aware of the crucial influence they have on query performance. In fact, wrong use of parameters is one of the common reasons for poor application performance.

Sprecher

Guy Glantser

Links

http://www.madeiradata.com/tag/parameterization-series

Notizen

Abfrage von PlanCacheDaten:

SELECT
    BatchText            = BatchTexts.text ,
    QueryPlan            = BatchPlans.query_plan ,
    ExecutionCount        = CachedPlans.usecounts ,
    ObjectType            = CachedPlans.objtype ,
    Size_KB                = CachedPlans.size_in_bytes / 1024
FROM
    sys.dm_exec_cached_plans AS CachedPlans
CROSS APPLY
    sys.dm_exec_query_plan (plan_handle) AS BatchPlans
CROSS APPLY
    sys.dm_exec_sql_text (plan_handle) AS BatchTexts;

Microsoft stellt Download für ISO von Windows 8.1 bereit

13. November 2014

Gut zu wissen:
Microsoft stellt Download für ISO von Windows 8.1 bereit

Create installation media for Windows 8.1

ASP.Net: Englische Fehlermeldungen auf deutschem System

19. August 2014

Will man bei ASP.Net englische Fehlermeldungen auf einer deutschen Installation bekommen, kann man in der web.config unter system.web das folgende Tag einfügen:

 <globalization uiCulture="en-US" />

Visual Studio fügt fortlaufende Nummer zu WebSites beim mehrmaligen Öffnen hinzu

6. August 2014

Visual Studio fügt fortlaufende Nummer zu WebSites hinzu, wenn man eine WebSite (Code-Ordner) öffnet, die Solution nicht speichert und dieselbe WebSite erneut öffnet.

In der Datei applicationhost.config im Verzeichnis %UserProfile%\Documents\IISExpress\config ist ein entsprechender Eintrag hinzugefügt worden, der wieder gelöscht werden kann.

Microsoft .NET Framework NuGet Packages

18. Oktober 2013

Liste der von MS selbst bereitgestellten NuGet Packages für Visual Studio

http://blogs.msdn.com/b/dotnet/p/nugetpackages.aspx

Windows 7: Alte Windows Update-Dateien entfernen

10. Oktober 2013

Auf heise.de wird beschrieben, wie man alte Windows Update-Dateien los wird.

Es gibt einen Patch (KB-Nummer 2852386) und wenn dieser installiert wurde, kann mit dem CleanMgr (Datenträgerbereinigung) eine entsprechende Option gewählt werden.

SQL Server: Interessanter Post über die Aktualisierung großer Datenmengen

6. September 2013

Panther erläutert unter Tipps & Tricks: Große Datenmengen in einer Produktionsumgebung aktualisieren, wie man ein Update auf eine größere Tabelle performant durchführt.

Sammlung von Büchern/EBooks

9. Juli 2013

Eine größere Sammlung von MS EBooks gibt’s hier:

http://blogs.msdn.com/b/mssmallbiz/archive/2013/06/18/huge-collection-of-free-microsoft-ebooks-for-you-including-office-office-365-sharepoint-sql-server-system-center-visual-studio-web-development-windows-windows-azure-and-windows-server.aspx

DNS Alias funktioniert nicht in UNC Pfad im Windows Explorer

20. Dezember 2012

Wir hatten einen DNS Alias einrichten lassen (DatenServer) der auf einen Windows Server 2008 R2 names ServerXY verweisen sollte.
Ein Ping funktionierte auch wunderbar mit dem Alias, allerdings konnte man den Alias nicht im Windows Explorer mit \\DatenServer verwenden, sondern nur \\ServerXY funktionierte.

Glücklicherweise stieß ich auf den KB-Artikel Connecting to SMB share on a Windows 2000-based computer or a Windows Server 2003-based computer may not work with an alias name

Nachdem ich auf dem ServerXY den folgenden Registry Key angelegt und den Server neu gestartet hatte, funktionierte das:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters

WertName: DisableStrictNameChecking
Datentyp: REG_DWORD
Basis: Decimal
Wert: 1

SQL Server 2008 R2 Reporting Services in ASP.Net 4.0 Webseite einbinden

13. Juni 2012

Die letzten Stunden habe ich damit verbracht, auf einem SQL Server 2008 R2 in den Reporting Services einen Bericht zu erstellen,
der auf eine Datenbank zugreift,
der eine Shared DataSource dazu verwendet,
der ein Shared DataSet verwendet,
der per Parameter über das DataSet gefilter wird,
der alle fünf Minuten als SnapShot historisiert wird,
und von dem die letzten 10 SnapShots gehalten werden.

Diesen Report wollte ich in einer ASP.Net Seite auf zwei Wegen bekommen:
1.) Anzeige des Reports im ReportViewer Control
2.) Report als PDF-Datei zum Download

1.) Anzeige des Reports im ReportViewer Control

Diese Variante war relativ einfach – Control auf die Seite ziehen und die Properties für den Report und den ReportServer angeben:

<ServerReport
 ReportPath="/ReportProject1/Report2"
 ReportServerUrl="http://meinServer/reportserver" />

Der ReportViewer zeigt so konfiguriert immer die Daten des aktuellsten SnapShot an.

2.) Report als PDF-Datei zum Download

Zunächst braucht man den NameSpace Microsoft.Reporting.WebForms bzw. in der web.config den folgenden Verweis (Version 10 = SSRS 2008 R2 ):

<add assembly=“Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A“/>

Im Code sieht das dann etwa so aus:

Dim bytes As Byte()
'// Instanz des ReportViewer-Steuerelements
Using rv = New ReportViewer
'// Festlegen des Verarbeitungsmodus des ReportViewer-Steuerelements.
 rv.ProcessingMode = ProcessingMode.Remote
'// Berichtsserver festlegen
 rv.ServerReport.ReportServerUrl = New Uri("http://meinServer/reportserver")
'// Festlegen des Pfades zum Bericht
 rv.ServerReport.ReportPath = "/ReportProject1/Report1"
'// Parameter aus der am Bericht hinterlegten Parameterliste auswählen
 Dim pars = rv.ServerReport.GetParameters
 Dim par0 = pars(0)
 Dim p = New ReportParameter(name:=par0.Name, value:=par0.ValidValues(0).Value) 'rv.ServerReport.ReportParameter()
 rv.ServerReport.SetParameters(p)
'// Verarbeitet den Bericht und rendert ihn im angegebenen Format und speichert diesen in ein byteArray
 bytes = rv.ServerReport.Render(format:="PDF", deviceInfo:=Nothing, _
 mimeType:=mimeType, encoding:=encoding, fileNameExtension:=extension, _
 streams:=streamIDs, warnings:=warnings)
End Using
'// Schreibt das Resultat in ein PDF
 Using fs = IO.File.Create(IO.Path.Combine(Server.MapPath("~/."), "result.pdf"), bytes.Length)
 fs.Write(bytes, 0, bytes.Length)
 fs.Close()
 End Using

Damit man auf Daten aus einem bestimmten SnapShot zugreifen kann, habe ich den SSRS WebService / SOAP Client verwendet:

Zunächst also eine ServiceReference setzen auf :

http://meinServer:80/ReportServer/ReportService2010.asmx?wsdl

Dann die paar folgenden Zeilen nach der Parameterübergabe und vor dem Rendern des Berichts im obigen Code eingefügt:

    Dim rs2010 As New ReportingService2010.ReportingService2010SoapClient
    Dim tuh2010 As New ReportingService2010.TrustedUserHeader
    Dim itemHist2010() As ReportingService2010.ItemHistorySnapshot = Nothing
    Dim sih2010 As ReportingService2010.ServerInfoHeader = rs2010.ListItemHistory( _
        TrustedUserHeader:=tuh2010 _
        , ItemPath:=rv.ServerReport.ReportPath _
        , ItemHistory:=itemHist2010 _
        )
    '// einfach mal den 5. Snapshot herausgepickt
    Dim histId = (From o In itemHist2010 Order By o.CreationDate Select o.HistoryID)(5)

    rv.ServerReport.HistoryId = histId

Dann gab’s ein paar Fehlerchen bzgl. irgendwelcher Anmeldewurschteleien. Diese konnte ich durch folgende Maßnahmen vermeinden:

In der web.config:

<!--<security mode="None">-->
<security mode="TransportCredentialOnly">
  <!--<transport clientCredentialType="None" proxyCredentialType="None" realm="" />-->
  <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />

Und im Code wie folgt entsprechende Benutzerdaten angeben:

    Dim cred As New System.Net.NetworkCredential(userName:="ich", password:="wirdnichtverraten", domain:="meinreich")
    rs2010.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation
    rs2010.ClientCredentials.Windows.ClientCredential = cred

Damit funktionierte dann alles wie gewünscht.

Ganz brauchbar dabei fand ich die folgenden Links:

SSRS Part 5 Demo2 – Configuring a Report Snapshot

Report Server Web Service

Developer’s Guide: Tutorials (Reporting Services)

Creating the Web Service Proxy

Viewing Report History Snapshot …