Unsichtbare Indizes in Oracle 11g Ralf Durben, 03.03.2009
Im Bereich der Indizes hat gibt es in Oracle 11g ein neues Feature, welches zwar nicht im Fokus der üblichen Publikationen steht, jedoch sehr wichtig für die Datenbankadministration bzw. Entwicklung sein kann: Der unsichtbare Index
Ein unsichtbarer Index ist zwar vorhanden, jedoch wird er vom Optimizer nicht in Betracht gezogen, wird also bei Leseoperationen nicht verwendet. Da er aber existiert, also die Speicherung der eines normalen Index entspricht, wird er durch DML Kommandos normal gepflegt.
Wozu kann nun ein solcher Index gebraucht werden, der zwar Speicher und Pflege in Anspruch nimmt, aber nicht für Leseoperationen benutzt wird? Wenn in einer gegebenen Datenbank die Verwendung eines neuen Index geplant ist, kann man diesen erstellen und dann prüfen, ob dieser neue Index wirklich nutzbringend ist und keinen Schaden anrichtet. Da neue Indizes auch negativen Einfluss auf Leseoperationen haben können begibt man sich mit dieser, bislang einzigen, Methode auf einen Blindflug, denn der neue Index ist sofort für alle Datenbanksitzungen sichtbar und wird vom Optimizer bei der Erstellung eines Ausführungsplans in Betracht gezogen.
Gerade in Produktivdatenbanken kann ein solcher Blindflug fatale Folgen haben. Aus diesem Grund benötigte man bislang eigentlich immer ein Testsystem mit gleicher Datenmenge und Workload. Dieser grosse Aufwand wird von vielen aber nicht betrieben, sodass es letztlich beim Blindflug bleibt.
Ab Oracle 11g kann man nun den neuen Index so anlegen, dass dieser zwar existiert, aber noch nicht verwendet wird. Dazu wird der Index als unsichtbar angelegt. Mit einem Datenbankparamater auf Datenbanksitzungsebene kann man nun für eine einzelne Datenbanksitzung die Nutzung der unsichtbaren Indizes aktivieren und so den neuen Index testen, ohne dass die restlichen Datenbankbenutzer bzw. Datenbanksitzungen davon betroffen wären.
Wenn der neue Index für gut befunden wurde kann er anschließend sichtbar gemacht werden und ist damit für alle Datenbanksitzungen nutzbar. Dieses ist eine sehr schnelle Operation!
Mit dieser neuen Funktionalität kann man genau prüfen, ob ein neuer Index sinnvoll ist oder nicht. Damit kann man einen Blindflug, der unangenehme Folgen haben kann, vermeiden. Desweiteren kann man die Ausführungspläne viel einfacher vergleichen (mit und ohne Index), indem man zwei Datenbanksitzungen nutzt (eine mit Verwendung der unsichtbaren Indizes und eine normale Datenbanksitzung).
Die Syntax dieses neuen Features ist sehr einfach. Einen unsichtbaren Index erstellen Sie indem Sie der CREATE INDEX Syntax einfach das Wort INVISIBLE hinzufügen.
|