Beruflich Dokumente
Kultur Dokumente
Se debe ejecutar el siguiente script para la creacin de la tabla de los planes (plan_table)
@utlxplan.sql
Explained.
Parse Tree
1 TABLE ACCESS BY INDEX ROWID BITMAP CONVERSION TO ROWIDS 2
BITMAP AND
Ejemplos de AUTOTRACE
set autotrace on
SELECT * FROM products WHERE prod_category = 'Men' AND prod_subcategory = 'Jeans - Men';
Statistics ------------------------------------------------0 0 173 139 0 38030 741 24 0 0
recursive calls db block gets consistent gets physical reads redo size bytes sent via SQL*Net to client bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts (memory) sorts (disk)
Se habilita a nivel de la instacia o sesin Recolecta estadsticas reales para las instrucciones SQL Produce una salida que debe formatearse usando TKPROF
Parmetros de Inicializacin
TIMED_STATISTICS = {false|true} MAX_DUMP_FILE_SIZE = {n|unlimited} USER_DUMP_DEST = directory_path
MAX_DUMP_FILE_SIZE medido en bloques del sistema de operacin Por defecto USER_DUMP_DEST se ubica en directorio de background dump.
Optimizacin de Consultas
Pasos en la Optimizacin
Evaluacin de las expresiones y condiciones. Transformacin de las condiciones Seleccin del enfoque del optimizador: reglas/costos Seleccin de los caminos de acceso Seleccin del Orden de Join Seleccin de los mtodos de join
Cost-based transformations.
IN->OR/JOIN Expansin del OR ORs ->UNION ALL. Concatenacin: OR, uso de ndices vs full table scan. ANY/SOME-> OR/EXISTS All->AND BETWEEN -> RANGE( y<= x and x=>z) Simplificacin del not: not a>b-> a<=b Transitividad (column1 comp_oper constant AND column1 = column2) -> (column2 comp_oper constant) Fusin de Vistas Reescrituras en funcin de Vistas Materializadas Transformacin Estrella Conversin del operador intersect en join y minus en antijoin
Caminos de Acceso
Full Table Scans Sample Table Scans Rowid Scans Index Scans Cluster Scans Hash Scans
Ineficiente para el manejo de gran cantidad registros. Se considera gran cantidad mas de10.000 registros.
costo = costo_acceso(A )+ (costo_acceso(B) * #registros(A))
CBO: hash join es definido como el ms eficientepara retornar gran cantidad de registros a large number or rows. costo = (costo_acceso(A) * #particiones_hash(B)) + costo_acceso(B) RBO: merge join se considera el ms eficiente para retornar gran cantidad de registros. costo = costo_acceso(A) + costo_acceso(B) + (costo_ordenamiento(A) + costo_ordenamiento(B))
El optimizador primero determina cuando el resultado del join entre dos o ms tablas retorna ms de un registro (UNIQUE y PRIMARY KEY). El optimizador ubica primero en el orden del join aquellas tablas que retornen un slo registro y luego optimiza el join del conjunto de tablas restantes. Outer joins: la tabla con el operador de outer join, debe venir despus de la tabla que aparece en la condicin join. El optimizador no considera joins que violen esa regla.
El CBO genera un conjunto de planes de evaluacin segn posibles rdenes de join, mtodos de join y caminos de acceso disponibles. Luego estima el costo de cada plan y escoge aquel con menor costo. Los costos se estiman de la siguiente manera: El costo de una operacin de nested loops est basado en el costo de lectura de cada registro en la tabla outer y los de la tabla inner que hagan match. El optimizador estima esos costos usando las estadsticas del diccionario de datos. El costo del merge join se basa principalmente en el costo de la lectura de todos los registros en la memoria y su ordenamiento.
El optimizador tambin considera otros factores en el momento de determinar los costos de cada operacin. Por ejemplo: Un rea de ordenamiento pequea incrementa el costo del merge join (SORT_AREA_SIZE).
Un gran contador de lecturas multibloque tiende a disminuir el costo de una operacin de sort merge join en relacin a nested loop join (DB_FILE_MULTIBLOCK_READ_COUNT).
Con el CBO, la escogencia del orden del join puede ser sobreescrita con el hint ORDERED. Si el hint ORDERED especifica un orden de join que viola la regla de un outer join, entonces el optimizador ignora el hint y escoge el orden. Se pueden sobreescribir las escogencias del optimizador mediante hints.
Mejor rendimiento
Respuesta rpida
Al nivel de la instancia:
OPTIMIZER_MODE = {CHOOSE|RULE|FIRST_ROWS_n|ALL_ROWS}
Use hints cuidadosamente porque implican alta carga de mantenimiento. Cuide el impacto en el desempeo de hardcoded hints cuando quedan invlidos.
Sintaxis de Ejemplo
SQL> 2 3 4 5 6 7 8 9 10 UPDATE --+ INDEX(p PROD_CATEGORY_IDX) products p SET p.prod_min_price = (select (pr.prod_list_price*.95) from products pr where p.prod_id = pr.prod_id) WHERE p.prod_category = 'Men' AND p.prod_status = 'available, on stock' /
Categoras de Hints
Enfoque de optimizacin y objetivos Caminos de Acceso Transformacin de Consultas Orden del Join Operador del Join Ejecucin Paralela Otros
FIRST_ROWS(n)
CHOOSE
RULE
HASH
NO_EXPAND REWRITE
STAR_ Seleccin de plan con TRANSFORMATION transformacin estrella. FACT NO_FACT Indica que la tabla ser tratada como una tabla de hechos Indica que la tabla no debe ser tratada como una tabla de hechos
Otros hints
APPEND NOAPPEND ORDERED_PREDICATES CURSOR_SHARING_ EXACT DYNAMIC_SAMPLING Habilita los INSERT con directpath Habilita INSERT regulares Forza a preservar el orden de evaluacin de los predicados Evita el reemplazo de literales con variables ligadas. Habilita dynamic sampling para mejorar el desempeo.
SELECT L_SHIPMODE, SUM(CASE WHEN o.O_ORDERPRIORITY = '1-URGENT' OR o.O_ORDERPRIORITY = '2-HIGH' THEN 1 ELSE 0 END) AS HIGH_LINE_COUNT, SUM(CASE WHEN o.O_ORDERPRIORITY <> '1-URGENT' AND o.O_ORDERPRIORITY <> '2-HIGH' THEN 1 ELSE 0 END) AS LOW_LINE_COUNT FROM CI531301.ORDERS o, CI531301.LINEITEM WHERE L_SHIPMODE IN ('AIR', 'TRUCK') AND L_COMMITDATE < L_RECEIPTDATE AND L_SHIPDATE < L_COMMITDATE AND L_RECEIPTDATE >= DATE '1995-01-01' AND L_RECEIPTDATE < DATE '1995-01-01' + INTERVAL '1' YEAR AND o.O_ORDERKEY = L_ORDERKEY GROUP BY L_SHIPMODE ORDER BY
Lineitem
L_shipmode tiene 7 valores distintos La condicin sobre l_shipmode retorna el 28,63% de las tuplas en la tabla L_receiptdate tiene informacin para 6 aos distintos Selectividad de la condicn para el rango de 1 ao: 100/6=15.2305036 l_commitdate<l_receiptdate retorna 63.20% Selectividad las 3 condiciones 5.21%. Selectividad todas las condiciones: 0.52%
Para evaluar l_commitdate es necesario conocer primeros los valores vlidos para l_receiptdate, si no habra que hacer full index scan. L_shipdate<l_commitdate es necesario conocer el l_commitdate para que filtre. ndice propuesto: (l_shipmode, l_receiptdate, l_commitdate, l_shipdate) Segunda propuesta: (l_shipmode, l_receiptdate, l_commitdate, l_shipdate, l_orderkey) Tercera propuesta: Tabla organizada por ndice
Orders
Indice (o_orderkey, o_orderpriority). Resulve la consulta sin consultar la tabla. o_orderkey va primero porque es el que se utiliza en el join, o_orpriority slo se proyecta
CREATE TABLE LINEITEM ( L_SHIPMODE CHAR(10), L_RECEIPTDATE DATE, L_COMMITDATE DATE, L_SHIPDATE DATE, L_ORDERKEY NUMBER(10) NOT NULL, L_LINENUMBER NUMBER(6) NOT NULL, L_PARTKEY NUMBER(6) NOT NULL, L_SUPPKEY NUMBER(6) NOT NULL, L_QUANTITY NUMBER(12,2) NOT NULL, L_EXTENDEDPRICE NUMBER(12,2) NOT NULL, L_DISCOUNT NUMBER(12,2) NOT NULL, L_TAX NUMBER(12,2) NOT NULL, L_RETURNFLAG CHAR(1) NOT NULL, L_LINESTATUS CHAR(1) NOT NULL, L_SHIPINSTRUCT CHAR(25), L_COMMENT VARCHAR(44), CONSTRAINT PK_LINEITEM PRIMARY KEY (L_SHIPMODE,L_RECEIPTDATE,L_COMMITDATE,L_ SHIPDATE,L_ORDERKEY, L_LINENUMBER), CONSTRAINT FK_LINEITEM_PARTSUP FOREIGN KEY(L_PARTKEY, L_SUPPKEY) REFERENCES CI531301.PARTSUPPLIER) ORGANIZATION INDEX COMPRESS TABLESPACE TPC_DATA STORAGE(INITIAL 232M NEXT 116M PCTINCREASE 0) INCLUDING L_LINENUMBER OVERFLOW TABLESPACE CURSOS_DATA STORAGE (INITIAL 352M NEXT 176M PCTINCREASE 0);
Resultados
CPU vs. Ao
16 14 12 10 8 6 4 2 0 1993 1994 1995 1996 1997 1998 Ao
CPU
Referecias
Oracle Database Data Warehousing Guide. 10g Release 2 (10.2). Part Number B14223-02 18 Advanced Query Rewrite http://download.oracle.com/docs/cd/B19306_ 01/server.102/b14223/qradv.htm#sthref1357 Oracle Database Performance Tuning Guide. 10g Release 1 (10.1). Part Number B10752-01 http://download.oracle.com/docs/cd/B14117_ 01/server.101/b10752/optimops.htm#76331