Samstag, Dezember 20, 2008
manuelle Einstellung der sort_area_size
bei Jonathan Lewis gibt's mal wieder einen wichtigen Hinweis: in 10.2.0.4 und diversen 11er Versionen gibt es einen Bug, der dafür sorgt, dass ein ALTER SESSION zur Abschaltung der automatischen PGA-Verteilung nicht unmittelbar wirksam wird: die Details dazu gibt es hier. In einem Kommentar zum Eintrag wird darauf hingewiesen, dass dieses Verhalten schon in 10.2.0.3 vorliegen soll. Das sollte ich mir bei Gelegenheit mit einem 10032er Trace anschauen.
Freitag, Dezember 12, 2008
INSERT ALL
kein ganz neues Feature aber sehr praktisch ist das INSERT ALL-Statement, mit dem man z.B. den Inhalt einer großen Tabelle auf mehrere kleine Tabellen verteilen kann. Das Vorgehen dabei sieht etwa folgendermaßen aus:
Nützlich an diesem Feature ist vor allem, dass hier nur ein FTS erforderlich ist, während das Füllen der Zieltabellen über mehrere Statements natürlich mehrere Zugriffe erfordern würde.
SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL ---------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17.12.1980 800 7499 ALLEN SALESMAN 7698 20.02.1981 1600 7521 WARD SALESMAN 7698 22.02.1981 1250 7566 JONES MANAGER 7839 02.04.1981 2975 7654 MARTIN SALESMAN 7698 28.09.1981 1250 7698 BLAKE MANAGER 7839 01.05.1981 2850 7782 CLARK MANAGER 7839 09.06.1981 2450 7788 SCOTT ANALYST 7566 19.04.1987 3000 7839 KING PRESIDENT 17.11.1981 5000 7844 TURNER SALESMAN 7698 08.09.1981 1500 7876 ADAMS CLERK 7788 23.05.1987 1100 7900 JAMES CLERK 7698 03.12.1981 950 7902 FORD ANALYST 7566 03.12.1981 3000 7934 MILLER CLERK 7782 23.01.1982 1300 14 Zeilen ausgewõhlt. SQL> create table emp_old 2 as 3 select * from emp where 1 = 0; Tabelle wurde erstellt. SQL> create table emp_new 2 as 3 select * from emp where 1 = 0 Tabelle wurde erstellt. SQL> insert all 2 when HIREDATE <= to_date('31.12.1981') 3 then into emp_old values(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL) 4 when HIREDATE > to_date('31.12.1981') 5 then into emp_new values(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL) 6 select EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO 7 from emp; 14 Zeilen wurden erstellt. SQL> select * from emp_old; EMPNO ENAME JOB MGR HIREDATE SAL ---------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17.12.1980 800 7499 ALLEN SALESMAN 7698 20.02.1981 1600 7521 WARD SALESMAN 7698 22.02.1981 1250 7566 JONES MANAGER 7839 02.04.1981 2975 7654 MARTIN SALESMAN 7698 28.09.1981 1250 7698 BLAKE MANAGER 7839 01.05.1981 2850 7782 CLARK MANAGER 7839 09.06.1981 2450 7839 KING PRESIDENT 17.11.1981 5000 7844 TURNER SALESMAN 7698 08.09.1981 1500 7900 JAMES CLERK 7698 03.12.1981 950 7902 FORD ANALYST 7566 03.12.1981 3000 11 Zeilen ausgewõhlt. SQL> select * from emp_new; EMPNO ENAME JOB MGR HIREDATE SAL ---------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19.04.1987 3000 7876 ADAMS CLERK 7788 23.05.1987 1100 7934 MILLER CLERK 7782 23.01.1982 1300
Nützlich an diesem Feature ist vor allem, dass hier nur ein FTS erforderlich ist, während das Füllen der Zieltabellen über mehrere Statements natürlich mehrere Zugriffe erfordern würde.
Mittwoch, Dezember 03, 2008
Bitmap Indizes
dunkel erinnere ich mich daran, dass es - seltene - Fälle gibt, in denen ein Bitmap-Index über mehrere Spalten sinnvoll sein kann, obwohl die Grundidee dieses Indextyps ja eher in der Kombination von Einzelindizes liegt. Was aber bei der Kombination mehrerer Spalten im Bitmap-Index berücksichtigt werden muss, ist, dass zwei zentrale Vorteile der Bitmap-Indizes bei Verwendung mehrerer Spalten verloren gehen: der Index ist dann nicht mehr klein und der Aufbau wird deutlich verlängert:
In diesem Fall zumindest ist ein Bitmap-Index über die Spaltenkombination offenbar komplett nutzlos ...
Nachtrag 23.04.2011: der hier beschriebene Effekt ergibt sich aus der Clusterung der Daten in der Tabelle, wie ich später herausgefunden habe: http://martinpreiss.blogspot.com/search/label/Bitmap%20Index
- Fakten-Tabelle mit einer Größe von 18 GB.
- der Aufbau von Bitmap-Indizes auf Einzelspalten benötigt jeweils ca. 25 min und die Größe der Indizes liegt bei < 2 GB.
- der Aufbau eines kombinierten Index über 4 Spalten dauerte fast 5 h und die Größe des Index erreichte fast 60 GB (er ist also wahrscheinlich sogar größer als ein entsprechender B*Tree-Index).
In diesem Fall zumindest ist ein Bitmap-Index über die Spaltenkombination offenbar komplett nutzlos ...
Nachtrag 23.04.2011: der hier beschriebene Effekt ergibt sich aus der Clusterung der Daten in der Tabelle, wie ich später herausgefunden habe: http://martinpreiss.blogspot.com/search/label/Bitmap%20Index
Abonnieren
Posts (Atom)