Oracle Datenbank - Tuning H.-G. Hopf Georg-Simon-Ohm Fachhochschule Nürnberg Datenbank Tuning / 1 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 2 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 3 Η. G.Hopf / 10.04.2003
Tuning Durch einen Abstimmungsvorgang soll erreicht werden, dass» auf einer bestimmten Rechnerplattform» mit einem bestimmten Lastprofil» mit einem bestimmten Datenstrukturprofil eine optimale Leistung erreicht wird. Datenbank Tuning / 4 Η. G.Hopf / 10.04.2003
Tuning Ein gut abgestimmtes System liegt vor, wenn» eine bestimmte Anwendung» mit einem bestimmten Lastprofil» mit möglichst wenig Systemressourcen eine optimale Performance liefert Datenbank Tuning / 5 Η. G.Hopf / 10.04.2003
Tuning Tuning Ebenen» Rechnersystem» Datenstruktur» SQL-Operationen» Anwendung» DB-Server» Datenbank Datenbank Tuning / 6 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 7 Η. G.Hopf / 10.04.2003
Datenstruktur-Ebene Ableitung des relationalen Schemas semantisches Datenmodell anwendungsspezifische Randbedingungen Transformation relationales Schema technische Randbedingungen Datenbank Tuning / 8 Η. G.Hopf / 10.04.2003
Datenstruktur-Ebene Optimierungsmethoden» Denormalisierung» Partitionierung»Cluster» Sequence» Snapshot / materialized view Datenbank Tuning / 9 Η. G.Hopf / 10.04.2003
Datenstruktur-Ebene Empfehlungen» Index (unique) für Primary Key» Unique Constraint für Alternate Keys» Index für Foreign Keys» weitere Indizes nach Bedarf Datenbank Tuning / 10 Η. G.Hopf / 10.04.2003
Datenstruktur-Ebene Guidelines to Creating an Index» Create an index, if: The column is used frequently in the WHERE clause or in a join condition. The column contains a wide range of values. The column contains a large number of null values. Two or more columns are frequently used together in a WHERE clause or a join condition. The table is large and most queries are expected to retrieve less than 2 4% of the rows. Datenbank Tuning / 11 Η. G.Hopf / 10.04.2003
Datenstruktur-Ebene Guidelines to Creating an Index» Do not create an index if: The table is small The columns are not often used as a condition in the query Most queries are expected to retrieve more than 2 4% of the rows The table is updated frequently Datenbank Tuning / 12 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 13 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene Der Optimierer entscheidet über die Auswertung eines SQL-Befehls Optimierer-Methoden» Regel-Methode» Statistische Methode» Statistische Methode und Hinweise Kriterien» angesprochene DB-Objekte» WHERE-Bedingung Datenbank Tuning / 14 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene Stürner, 1993 Datenbank Tuning / 15 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene Statistische Optimierer-Methoden» Methoden COMPUTE STATISTICS ESTIMATE STATISTICS DELETE STATISTICS»DB-Objekte TABLE,, COLUMN, INDEX, CLUSTER Schema» Ergebnisse verfügbar im Data Dictionary user_tables, dba_tables user_tab_columns, dba_tab_columns user_indexes, dba_indexes Datenbank Tuning / 16 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene dba_tables OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) TABLESPACE_NAME VARCHAR2(30) CLUSTER_NAME VARCHAR2(30) IOT_NAME VARCHAR2(30) PCT_FREE NUMBER PCT_USED NUMBER INI_TRANS NUMBER MAX_TRANS NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER FREELISTS NUMBER FREELIST_GROUPS NUMBER LOGGING VARCHAR2(3) BACKED_UP VARCHAR2(1) NUM_ROWS NUMBER BLOCKS NUMBER EMPTY_BLOCKS NUMBER AVG_SPACE NUMBER CHAIN_CNT NUMBER AVG_ROW_LEN NUMBER AVG_SPACE_FREELIST_BLOCKS NUMBER NUM_FREELIST_BLOCKS NUMBER DEGREE VARCHAR2(10) INSTANCES VARCHAR2(10) CACHE VARCHAR2(5) TABLE_LOCK VARCHAR2(8) SAMPLE_SIZE NUMBER LAST_ANALYZED DATE PARTITIONED VARCHAR2(3) IOT_TYPE VARCHAR2(12) TEMPORARY VARCHAR2(1) NESTED VARCHAR2(3) BUFFER_POOL VARCHAR2(7) Datenbank Tuning / 17 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene dba_tab_columns OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) COLUMN_NAME NOT NULL VARCHAR2(30) DATA_TYPE VARCHAR2(30) DATA_TYPE_MOD VARCHAR2(3) DATA_TYPE_OWNER VARCHAR2(30) DATA_LENGTH NOT NULL NUMBER DATA_PRECISION NUMBER DATA_SCALE NUMBER NULLABLE VARCHAR2(1) COLUMN_ID NOT NULL NUMBER DEFAULT_LENGTH NUMBER DATA_DEFAULT LONG NUM_DISTINCT NUMBER LOW_VALUE RAW(32) HIGH_VALUE RAW(32) DENSITY NUMBER NUM_NULLS NUMBER NUM_BUCKETS NUMBER LAST_ANALYZED DATE SAMPLE_SIZE NUMBER CHARACTER_SET_NAME VARCHAR2(44) Datenbank Tuning / 18 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene dba_indexes OWNER NOT NULL VARCHAR2(30) INDEX_NAME NOT NULL VARCHAR2(30) INDEX_TYPE VARCHAR2(12) TABLE_OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) TABLE_TYPE VARCHAR2(11) UNIQUENESS VARCHAR2(9) TABLESPACE_NAME VARCHAR2(30) INI_TRANS NUMBER MAX_TRANS NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER PCT_THRESHOLD NUMBER INCLUDE_COLUMN NUMBER FREELISTS NUMBER FREELIST_GROUPS NUMBER PCT_FREE NUMBER LOGGING VARCHAR2(3) BLEVEL NUMBER LEAF_BLOCKS NUMBER DISTINCT_KEYS NUMBER AVG_LEAF_BLOCKS_PER_KEY NUMBER AVG_DATA_BLOCKS_PER_KEY NUMBER CLUSTERING_FACTOR NUMBER STATUS VARCHAR2(8) NUM_ROWS NUMBER SAMPLE_SIZE NUMBER LAST_ANALYZED DATE DEGREE VARCHAR2(40) INSTANCES VARCHAR2(40) PARTITIONED VARCHAR2(3) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) BUFFER_POOL VARCHAR2(7) Datenbank Tuning / 19 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene Statistische Optimierer-Methoden» Erzeugung von Statistiken wird explizit angestoßen ANALYZE TABLE <tabellenname> COMPUTE STATISTICS ANALYZE TABLE <tabellenname> ESTIMATE STATISTICS ANALYZE INDEX <indexname> ESTIMATE STATISTICS DBMS_UTILITY.ANALYZE_SCHEMA ( <schemaname>, <analysemethode> Datenbank Tuning / 20 Η. G.Hopf / 10.04.2003
SQL-Befehls-Ebene Statistische Optimierer-Methoden Aktivieren einer Methode» auf Instanzen-Ebene INIT.ORA-Parameter: optimizer_mode = choose/rule» auf Session Ebene ALTER SESSION SET optimizer_mode = choose/rule» auf Befehls-Ebene SELECT /*+rule*/ * FROM <tabellenname> WHERE... Datenbank Tuning / 21 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 22 Η. G.Hopf / 10.04.2003
Anwendungs-Ebene Optimierungsmethoden» Konfigurationsart Dedicated Server (DS) Konfiguration: Anwendung mit großer Datenbanklast Multi-Threaded Server (MTS) Konfiguration: Online-Anwendung» prozedurale Integritätsbedingungen» gespeicherte PL/SQL-Programme Datenbank Tuning / 23 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 24 Η. G.Hopf / 10.04.2003
DB-Server-Ebene Optimierungsmethoden» Konfiguration des DB-Cache Größe DB-Block-Puffer v_$sysstat Größe des shared-pool-bereichs v_$librarycache v_$rowcache Datenbank Tuning / 25 Η. G.Hopf / 10.04.2003
DB-Server-Ebene Stürner, 1993 Datenbank Tuning / 26 Η. G.Hopf / 10.04.2003
DB-Server-Ebene Stürner, 1993 Datenbank Tuning / 27 Η. G.Hopf / 10.04.2003
Inhaltsverzeichnis Tuning Datenstruktur-Ebene SQL-Befehls-Ebene Anwendungsebene DB-Server-Ebene Datenbank-Ebene Datenbank Tuning / 28 Η. G.Hopf / 10.04.2003
Datenbank-Ebene Optimierungsprinzipien» REDO-LOG-Dateien sollten auf die schnellsten Festplatten» der System-Tablespace sollte dem Data- Dictionary vorbehalten bleiben» temporäre Segmente sollten in einen eigenen Tablespace» Rollback Segmente sollten in einen eigenen Tablespace» Rollback Segmente sollten mit Speicherungsparametern versehen werden» Daten- und Index-Segmente des gleichen DB- Objekts sollten in verschiedene Tablespaces auf unterschiedlichen Festplatten Datenbank Tuning / 29 Η. G.Hopf / 10.04.2003