Halo Andi!
ich habe in einer Datenbank einige Indizes neu angelegt nun
gehen viele Statments nicht mehr und enden mit Timeout
Welche Fehlermeldung genau kommt beim Timeout?
oder ORA-01652: Temp-Segment kann nicht um 640 in Tablespace
ORATEMP erweitert werden
Sieh dir mal den Tablespace an und gib ihm u.U mehr Platz.
Ich bin mir nicht sicher, ob es an diesen Indizes liegt.
Der Index selbst sollte nach dem CREATE keinen Platz in temporären Segmenten brauchen (ausser es ist ein Index auf eine temporäre Tabelle). Allerdings kann ein Index sehr wohl zu erhöhtem Platzbedarf beim Sortieren (–>passiert häufig in einem temporären Segment) führen. Sieh dir mal die execution plans der betroffenen Statements mit/ohne Index an.
Wird der Tablespace wieder freigegeben, wenn ich die Indizes
droppe?
Der Tablespace braucht nicht freigegeben werden, weil er nicht besetzt sein kann. Lediglich voll kann das Ding werden (ja, da ist ein Unterschied!). Wie schon gesagt, nachdem der Index höchstwahrscheinlich einen anderen execution plan zur Folge hat, kann das Löschen des Indexes das Problem durchaus lösen. Allerdings macht man ja Indizes in der Regel nicht, weil’s lustig ist, sondern weil man sich davon was verspricht. Ich würde also empfehlen ein paar Dinger herauszufinden, bevor du die Indizes wieder löschst:
- Geht’s, wenn du dem ORATEMP mehr Platz gibst (sehr wahrscheinlich)
- Bringen die Indizes einen Performancegewinn (bitte nicht nur mit _einem_ select testen)
- Tritt der Fehler auch auf, wenn ein Statement mit Sicherheit keine Sortierung braucht (ACHTUNG: Sorts können sich ziemlich gut verstecken, immer mit execution plan gegenprüfen!).
- Wie sieht’s mit der sort area im Hauptspeicher aus? (eventuell vergrössern)
Das sind mal ein paar Schüsse ins Blaue, für Näheres müsstest du dann schon ein paar Details mehr rausrücken…
Gruß
Martin