Zum Inhalt wechseln


Foto

Report Server lange Laufzeiten bei Abfrage mit Parameter


  • Bitte melde dich an um zu Antworten
10 Antworten in diesem Thema

#1 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 20. Juli 2016 - 12:04

Wir nutzen den SQL Server 2012 im Sharepoint 2010 integrierten Modus. Wir greifen über ODBC auf einen Sybase ASE 15 zu. Funktioniert soweit ganz gut. Wir haben nun Abfragen bei denen wir Parameter in in einem Where Like verwenden wollen. Auch das klappt. Nur bei einer etwas komplexeren Abfrage laufen wir damit gegen die Wand. Irgendwas sorgt dafür das die Abfrage dann so lange läuft das kein Ergebnis zurückkommt und der Reportserver die Abfrage auf Grund der Laufzeit killt.

 

Folgende Abfrage direkt klappt, Laufzeit irgendwo max. 1 Minute, 7340 Zeilen:

 

select d.d01ort, d.d01status, d.d01bnr, t.titel, t. titel_avs, t.autor_avs from sisis.d01buch d, sisis.titel_dupdaten t, sisis.titel_verbund tv, sisis.titel_buch_key tbk where d.d01mcopyno=tbk.mcopyno and tbk.katkey=tv.katkey and tbk.katkey=t.katkey and d.d01ort like "0001/8 85-%";

 

Die selbe Abfrage per Parameter dagegen nicht:

 

select d.d01ort, d.d01status, d.d01bnr, t.titel, t. titel_avs, t.autor_avs from sisis.d01buch d, sisis.titel_dupdaten t, sisis.titel_verbund tv, sisis.titel_buch_key tbk where d.d01mcopyno=tbk.mcopyno and tbk.katkey=tv.katkey and tbk.katkey=t.katkey and d.d01ort like @Teilsignatur

 

Wobei dann halt Teilsignatur 0001/8 85-% ist. Ich habe es auch mit 0001/8 85- probiert un das % angehängt, also d.d01ort like @Teilsignatur + "%"

 

Der Bericht ist super simpel, er zeigt einfach die Felder im Select an. Kein gruppieren, summieren, sortieren.

 

Wenn ich mir auf dem ReportServer die View ExecutionLog3 anschaue, in der ja die letzten ausgeführten Bericht protokolliert sind, sehe ich das der Reportserver die meiste Zeit in TimeProcessing hängt.

 

Ich bin etwas ratlos warum nur durch den Parameter plötzlich der Berichtsserver verrückt spielt. Es kommen ja letztlich die selben Daten aus der Datenbank zurück. Jemand eine Idee?


Bearbeitet von Doso, 20. Juli 2016 - 12:05.


#2 Sunny61

Sunny61

    Expert Member

  • 22.107 Beiträge

 

Geschrieben 20. Juli 2016 - 12:25

Hast Du dich bei 1 Minute verschrieben? Soll das 1 Sekunde evtl. heißen?  ;)

 

Auszug aus: http://stackoverflow...ameter-variable

 

Another option is dynamic SQL:
declare @sql nvarchar(max)
set @sql = 'Select Column1 From Table Where ' + @Variable + 
' Like ''%'' + Column2 + ''%'''
exec (@sql)

 

Dynamisches SQL ist so ziemlich das Letzte, was machen sollte. Dir wird aber möglicherweise nichts anderes übrig bleiben.

 

Im SQL kenn ich eigentlich nur die einfachen ' ' Anführungszeichen. Wird es mit denen besser? Wie ist @Teilsignatur deklariert? Du kannst auf dem MS SQL Server die Abfrage debuggen, lass dir den Inhalt von @Teilsignatur per print @Teilsignatur ausgeben. Evtl. siehst Du dann mehr.


Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#3 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 20. Juli 2016 - 12:43

Mit Crystal Reports geht diese Abfrage wohl recht flott, ohne Parameter auch. Es ist ein Sybase ASE per ODBC angebunden, da werde ich wenig debuggen können. Bei anderen kleineren Abfragen klappt dieser Syntax.



#4 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 21. Juli 2016 - 15:02

Crosspost: https://social.techn...portingservices



#5 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 22. Juli 2016 - 19:57

Die Tabelle hat irgendwo 5 Millionen Einträge ist also vermutlich ein Performance Problem. Evtl. ja irgendeine Konvertierungsgeschichte: https://blogs.msdn.m...rting-services/



#6 zahni

zahni

    Expert Member

  • 16.399 Beiträge

 

Geschrieben 24. Juli 2016 - 06:41

Hier steht was:

 

https://rajmsdn.word...or-not-to-like/

 

Bei Like mit WildCards am Ende macht Sybase wohl gern mal einen Full Table Scan.


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#7 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 26. Juli 2016 - 13:56

Das ist wahrscheinlich ein Teil des Problems. Ich habe mal die Timeout Werte massiv in die Höhe gestellt. Dadurch sehe ich das die TimeDataRetrival manchmal bis zu 15 Minuten sind. Das TimeProcessing ist dann 45 Minuten bis zum nächsten Timeout. Wieso das bei manchen Querys recht fix geht, und dann über eine Stunde verstehe ich aber nicht so recht. Da sollten eigtl. die halbwegs selben Daten zurückkommen.



#8 zahni

zahni

    Expert Member

  • 16.399 Beiträge

 

Geschrieben 26. Juli 2016 - 18:14

Einfach mal beim Hersteller schauen: Mitunter gibt es Bugs, die mit irgendeinem Update behoben sind.

Bei DB2 hatte ich da auch schon Einige und von IBM sogar "Special Builds" bekommen. Reichte vom Crash der Engine bis zum Sterben einzelner Connections, wenn ein bestimmter Index erstellt wurde...


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#9 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 27. Juli 2016 - 00:27

Ist ein gehosteter Dienst daher können wir da nicht selber dran basteln. Ist ein Sybase 15.0 und damit schon End of Life. Ist zwar doof aber, mit Crystal Reports hat man bei diesen Abfragen keinerlei Probleme. Gleiche Server, gleiche ODBC Schnittstelle.


Bearbeitet von Doso, 27. Juli 2016 - 00:28.


#10 zahni

zahni

    Expert Member

  • 16.399 Beiträge

 

Geschrieben 27. Juli 2016 - 10:45

Wie  gesagt, Ursache kann schon eine andere Art  der gegenseitigen Transaktion sein. Vielleicht kann man die ODBC-Treiber  updaten? Oder Du prüfst, ob es einen OLE DB Provider oder  ADO.NET. Das sollte der Sharepoint können (wobei ich mir bei SP2010 nicht  ganz sicher bin). ODBC  ist aber gefühlt die schlechteste Wahl.

Für den BCS kann ich  übrigens https://lightningtoo...-2010-and-2013/  empfehlen.


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#11 Doso

Doso

    Board Veteran

  • 2.461 Beiträge

 

Geschrieben 28. Juli 2016 - 18:26

Habe das Query nun anders zusammengebaut, damit geht es in wenigen Sekunden:

 

="select d.d01ort, d.d01status, d.d01bnr, t.titel, t.autor_avs from sisis.d01buch d, sisis.titel_dupdaten t, sisis.titel_verbund tv, sisis.titel_buch_key tbk where d.d01mcopyno=tbk.mcopyno and tbk.katkey=tv.katkey and tbk.katkey=t.katkey and d.d01ort like " + Chr(34) + Parameters!Signaturparam.Value + "%" + Chr(34) + ";"