SQL-Abfrage Timeout problem

Ein Index ist die erste, einfachste und beste Methode um eine Abfrage zu beschleunigen, ich denke, da sind wir uns einig.
Ja, da sind wir uns definitiv einig...

Aber... Ich würde niemals darauf bestehen einen Index anzulegen, anhand von Vermutungen...

Die Frage des Warum ist immer noch nicht geklärt... Einfach mal zu sagen "Ja, dann versuch mal diesen Index..." ist definitiv keine Lösung...

Das erste was mir auffällt... Das Statement wird zur Laufzeit erstellt... Keine Bind-Variablen, sondern es wird hart der Code geändert...
Zumindest Oracle wäre so intelligent zu sagen -> Hey, ich muss einen neuen Ausführungsplan generieren...
Ich weiß nicht wie MS SQL das handhabt... Aber ich denke dort wird es genau das gleiche sein?

Es ist jetzt definitiv nicht die Ursache für eine extrem lange Durchlaufzeit, aber wenigstens ein Punkt wo ich sagen würde: Hey... Dieses Statement / oder eher der Aufruf durch die Applikation ist nicht optimiert...

Und das lässt bei mir zumindest schoneinmal eine Glocke läuten: Um was geht es denn? Ist dieses Modell überhaupt optimiert worden? Oder ist das ein komplett neues Statement komplett losgelöst von bestehender Businesslogik ?

Naja, ich sag mal so:
Wenn es sich hierbei um ein Modell eines professionellen Anbieters handelt und der TO einfach nur ein paar Ansichten für die User haben will (Beispielsweise ein ERP-Modell), ist das was ihr da gerade gemacht habt zu 99.9999%-iger Wahrscheinlichkeit ein Vertragsbruch... Sämtliche Tabellen/Strukturen etc. müssten so bleiben wie sie sind und Änderungen dürften nur über den Anbieter/Hersteller gemacht werden. Alles andere führt zum Verfall jeder Art von Wartung/Garantie und kann unter Umständen sogar rechtliche Schritte nach sich ziehen...

Ich meine Ok... Euch kann es ja egal sein, ihr seid in dem Vertrag nicht drinn... Aber dem TO ist es höchstwahrscheinlich nicht egal...

An bestehenden Statements rumwurschteln und Vermutungen anstellen ist eine Sache... Aber einfach so ein bestehendes Modell zu ändern ne ganz andere...

Das ganze hier ist zwar nur ein Forum... Aber selbst hier erwarte ich doch ein gewisses Maß an Professionalität...
 
Werbung:
Um mein (sicherlich sehr schwerwiegendes) Argument etwas auszuführen:
Nur weil der TO nicht das nötige Wissen hat... Heißt das nicht das ihr ihm diese Aufgabe komplett abnehmen könnt. Die eigentliche Verantwortung gegenüber seiner Firma oder ggbfs. sogar eines Drittanbieters liegt immer noch bei ihm, also wäre es wohl wesentlich sinnvoller ihm das Wissen zu geben, statt eine Lösung von der er sowieso nichts versteht... Findet ihr nicht?

Und soweit hat es sich nicht so angehört als sei er geschult in irgendeiner Art und Weise. Eher so als sei er auch einfach nur ein User der durch diverse Excel-Anfragen die Grundprinzipien von SQL verstanden hat und durch sein Hobby (zuhause hier und da ein bisschen programmieren) auf die grandiose Idee gekommen ist das ganze einfach selbst in die Hand zu nehmen...
Dabei spreche ich leider auch aus Erfahrung... Solche Mitarbeiter gibt es bei mir leider auch... :oops:

Der echte DBA wird sich bestimmt nicht gerade freuen wenn er davon erfährt... Und wenn es sich bei dem Modell wirklich um ein vertraglich gebundenes Produkt handelt die Firma bei der er arbeitet sicher auch nicht :)

Und sollte ich aus irgendwelchen Gründen total falsch liegen und er das ganze selbst aufgesetzt hat:
Umso mehr ein Grund ihm das Wissen zu vermitteln und nicht einfach nur den IST-Zustand zu optimieren ;)
Sonst steht er in einer Woche wieder hier vor der Tür und bittet um Hilfe, weil er immer noch nicht weiß was ein Index ist :)

Und da ich wohl manchmal etwas unhöflich rüber komme:
Ich will hier keinen Beleidigen... Ist lediglich meine Meinung bezüglich eines Themas das doch recht schnell sehr stark ausarten kann...
Und nur weil man selbst nicht betroffen ist sollte man nicht einfach so mit irgendwelchen Vorschlägen um die Ecke kommen, ohne irgendwelche stichhaltigen Grundlagen zu haben.
Besonders nicht wenn es sich, wie in diesem Fall, um eine produktiv eingesetzte Datenbank handelt und man die Folgen seines "Vorschlags" in keiner Weiße einschätzen kann.

Und deswegen verweise ich hier auf folgendes:
- Indizes
http://de.wikipedia.org/wiki/Datenbankindex
- Partitionierung
http://www.kronester.com/?p=82


Beides kann das derzeitige Probleme beheben. Sind aber nicht die einzigen Möglichkeiten...
Wichtig dabei: Wann du welche DB-Funktionalität nutzen solltest hängt von 3 Dingen ab.
1. Deine Datenmodell
2. Deine Daten
3. Die Menge deiner Daten

Es gibt kein Gesetz was wie, wann und wo genutzt wird. Das ist und bleibt deiner Erfahrung und deinem Wissen überlassen.
Das kann dir hier auch niemand abnehmen. Wir können dir anhand unserer Erfahrung Ratschläge geben... aber mehr auch nicht. Ob du Sie nutzt bleibt deine Entscheidung und auch innerhalb deiner Verantwortung :)

Wer dir was anderes erzählt überschreitet (zumindest meiner Meinung nach) schlichtweg seine Kompetenzen.
 
Zur Sache möchte ich noch ergänzen: Wenn du den Index testest den der Optimizier vorschlägt solltest du andere Indexe, die du zuvor zu Testzwecken erstellt hast erstmal wieder raus nehmen.

Zur Diskussion um Verantwortung:
Klar viele "professionelle" Anbieter sagt erstmal finger Weg von der DB, die ist ja schon optimal. Nur mit ganz viel Erfahrung, Zertifizierung, Testumgebung, Datensicherungen und Prüfung auf allen folgenden Updates darf da was verändert werden. Ich kenne da sehr restriktive Anbieter und welche die einem nichts Krumm nehmen, am Ende bleibt die Entscheidung einem selbst überlassen und man muss mit gesundem IT-Verstand abwägen, und zwar jeder für sich selbst.
Wenn ich für jedes Windows Update erst die Freigabe bei unseren Softwarelieferanten prüfen würde, ich würde wahnsinnig werden. Das ist jetzt aber ein Risiko das ich für mich eingehe, wie viele andere Dinge auch.
Wir können dir anhand unserer Erfahrung Ratschläge geben... aber mehr auch nicht. Ob du Sie nutzt bleibt deine Entscheidung und auch innerhalb deiner Verantwortung :)
Ich denke das gilt für jede Information die ich im Internet, im besonderen in Foren, bekomme und die keine offizielle Aussage des Herstellers darstellt. Ich denke auch das muss absolut jedem klar sein und ist jedem klar, der hier fragt. Wenn ich davon nicht ausgehen kann und ich jeden Anfragesteller hier erstmal erkären muss auf was meine Vermutung beruht, wo die Risiken sind und mir seine Umgebung detailiert anschaue dann fehlt mir die Zeit, das zu tun.
Ich werte deine Meinung nicht als Beleidigung aber das, ich nenne es mal "absolut verantwortungsvolle Handeln" halte ich hier für illusorisch.
 
Werbung:
Ich sage nicht es muss absolut verantwortungsvoll sein.
Aber wenn ich sehe (und wenn die Person es sogar selbst sagt) dass es sich um einen Laien handelt... Kann ich wohl davon ausgehen das er mir Blind folgen wird, selbst wenn ich ihn ins Nirvana schicke... Gerade weil er es selbst nicht besser weiß und überhaupt nicht einschätzen kann was es für Folgen haben kann :)

Ich will nicht das ihr ein Pflichtenheft schreibt... Aber ich wette keiner von euch würde zulassen das ich bei euch einfach mal ein paar Indizes anlege, aufgrund basisloser Vermutungen... und dass in eurer produktiv Umgebung.
Der Grund dafür? Ihr wisst was es für Folgen haben kann...
 
Zurück
Oben