Gibts ne Möglichkeit bei Oracle, MySQL oder MSSQL einen Query zu pausieren? Ich meine, so dass ich einen anderen Query dem laufenden vorziehen kann...?
Das Problem ist eigendlich, dass ich nicht genügend leistung aufbringe um 2 fette Querys gleichzeitig flüssig auszuwerten...
Was kann ich da machen...? (!Außer neue Hardware kaufen!)
Bezugnehmend auf Khalid's Antwort muss ich leider widersprechen.
Es gibt unter MSSQL die Möglichkeit CLR-Procedures zu schreiben welche mit jeder beliebigen .Net-Sprache geschrieben werden könnne. Du könntest dir also eine "spPause" als CLR-Procedure bauen und an jeder stelle die du möchtest verwenden.
Sinnvoll ist es sicherlich aber nicht.
Besser wäre es den Ausführungsplan sich anzuschauen und dich geschickte Optimierungen die Engpässe zu entfernen.
Folgende Optimierungsmöglichkeiten würde ich als erstes probieren: - Index-Optimierung - mit dem Tool Contig von Sysinternals (Microsoft) das Datenbank-File zu defragmentieren - mit der Procedure "sp_updatestats" die Index-Statistiken neu berechnen
Und was soll die Prozedur "spPause" dann bringen? Eine laufende Query nach dem Motto "SELECT..." kann man nicht pausieren. Da hilft auch eine SP nicht weiter.
Von externen Tools zum Defragmentieren rate ich ab. Damit bringt man sämtliche Statistiken und Indizes durcheinander, da sich die Pages ändern und der SQL Server davon nichts mitbekommt.
Dafür gibt es Wartungspläne mit Index Defragmentierung und ähnliches.
Ein Query, welches zum Server gesendet wurde, kann nur komplett abgebrochen werden. Pausieren ist nicht möglich. Als erstes würde ich dir empfehlen die Ausführungspläne der Abfragen anzuschauen und zu überprüfen wo engpässe bestehen. Meist lassen sich längere Abfragen durch geschicktes setzen von Indizes um ein vielfaches beschleunigen.
Wenn du z.B. im Ausführungsplan Index Scans, oder gar Table Scans hast, würde ich dir raten die Abfragen zu überarbeiten oder halt - wie gesagt - bessere Indizes zu platzieren.
ich hab die Indizes denk ich schonmal ganz gut platziert... eine normale abfrage dauert nurnoch 10-30min unstadt 4-5h... ich sollte wohl dazu sagen, dass in meiner db mehr als 4mio Datensätze sind...
4mio Datensätze sind ja nicht viel. Hinzu kommen noch Dinge wie Normalisierung usw. Ganz wichtig bei komplexen Queries ist es, die Ausführungspläne zu verstehen.
4 mio datensätze sind eigentlich nicht allzuviel. wieviele davon entsprechen den in der where klausel angegebenen werten? ich kann mich erinnern, aus 300 millionen datensätzen mit einer vernünftigen where klausel innerhalb von sekunden daten bekommen zu haben. daher denke ich, dass 10 bis 30 minuten eher schwach sind.
Ich versuchs mal ordendlich dazustellen: SP1 | SP2 | SP3 | SP4 1 | la | la8 | dat 2 | lo | put | dat 3 | lu | 89e | dat Das iss so mein system... das problem ist, das ich bei normalen abfragen SP2 abfrage, bei anderen SP2 und SP3 und bei wieder anderen sogar SP2, SP3 und SP4... ich hab da schon viel mit den indexen rumgespielt, und hab jetz ein wie folgt (glauch is doof): Index:(SP2; SP3; SP4)
Der Index über 3 Spalten ist garnicht mal so schlecht. Wichtig ist das du in der Where-Klausel auch die richtige reihenfolge einhällst, also nicht "where sp4=1 and sp2=2 and sp3=0" sondern "where sp2=2 and sp3=0 and sp4=1" sonst kommt der Optimizer durcheinander.
Von externen Tools zum Defragmentieren rate ich ab. Damit bringt man sämtliche Statistiken und Indizes durcheinander, da sich die Pages ändern und der SQL Server davon nichts mitbekommt.
Dafür gibt es Wartungspläne mit Index Defragmentierung und ähnliches.