Está en la página 1de 60

Afinamiento SQL y PL/SQL para

Desarrolladores

MSc. Lina Forero

1
Afinamiento SQL y PL/SQL
para Desarrolladores

Introducción

2
Objetivos del Curso

qEntender la arquitectura de la base de datos Oracle y su


relación con el diseño de código SQL y PL/SQL
qAfinamiento Proactivo
q Causas de los problemas de Performance
q El Optimizador de Oracle
q Modelo físico de datos y como cambiarlo para prevenir
problemas de Performance
q Afinamiento Reactivo
qHerramientas de Diagnóstico

3
Desarrollando Aplicaciones de
Base de Datos exitosas

qUna aplicación dependiente de una base de datos, será


exitosa o fallida de acuerdo a cómo use la base de datos.
qQue aplicaciones no giran en torno a una base de datos ?
q El equipo de desarrollo requiere en su equipo de trabajo
responsables de asegurar que la lógica del código en la base
de datos es sólida y que el sistema está diseñado para entregar
el mejor desempeño desde el primer día.
qEl afinamiento debe empezar desde el diseño de la
aplicación.

4
Objetivos  del  Afinamiento

Reducir  el  tiempo  que  toma  realizar  una  tarea  ,  ó los  recursos  que  se  
necesitan  para  ejecutarla  en  el  mismo  tiempo.
Los  componentes  del  sistema  que  se  deben  examinar  en  caso  de  
problemas  de  desempeño  son:
1. Diseño de  la  aplicación
2. Código  de  la  aplicación
3. Memoria
4. I/O
5. Contención  de  recursos
6. Sistema  Operativo
7. CPU

5
Objetivos  del  Afinamiento  de  Base  
de  Datos
1. Minimizar  tiempo  de  respuesta
• Reduciendo  o  eliminando  las  esperas
• Poner  en  cache  la  mayor  cantidad  de  bloques  de  datos
• Acceder  al  mínimo  número  de  datos  en  disco.
2. Maximizar  la  cantidad  de  trabajo  hecha  con  los  mismos  
recursos
• Reduciendo  la  utilización  de  memoria  del  sistema
• Eliminando  paging y  swapping
• Reduciendo  tiempos  de  I/O  

6
Metodología  Oracle  de  Afinamiento
1. Obtener  mediciones  del  comportamiento  del  sistema
2. Revisión  de  los  10  errores  más  frecuentes  que  se  presentan  
en  Oracle
3. Construir  un  modelo  conceptual  de  lo  que  está  sucediendo,  
basándose  en  los  síntomas  que  se  presentan
4. Proponer  una  serie  de  medidas  correctivas,  y  aplicarlas  en  
orden  de  mayor  a  menor  beneficio.
5. Validar  el  efecto  de  los  cambios.    Determinar  si  se  cumplió  el  
objetivo  ,  o  se  debe  continuar  investigando.
6. Repetir  los  últimos  3  pasos  hasta  que  se  resuelvan  los  
problemas.

7
Errores   Top  Ten

1. Mal  manejo  de  conexiones


2. Mal  uso  de  cursores    y  del  shared pool
3. Mal  SQL
4. Parámetros  de  inicialización  que  no  son  estándar
5. Mal  diseño  de  I/O
6. Problemas de  setup  con  los  redo  logs.
7. Serialización de  data  blocks en  el  buffer  cache
8. Long  Full  Table Scans
9. Grandes  cantidades  de  SQL  recursivo  (SYS)
10. Errores de  deployment  y  de  migración.

8
Por  qué  afinar  SQL  y  PL/SQL ?

• El  mayor  impacto  en  el  desempeño de  una  aplicación  


se  logra  afinando  las  sentencias  SQL  y  el  código  
PL/SQL.    
• El  afinamiento  de  la  instancia,  parámetros  de  
memoria  y  configuración  de  sistema  operativo  no  
son  suficientes.
• Un  mal  diseño  de  aplicación  no  se  arregla  
adicionando  más  recursos  al  servidor.

9
Decisiones  de    Diseño

• Al  escoger  en  que  lenguaje  debemos  codificar  la  


funcionalidad  de  nuestra  aplicación:
1. Escribirlo en  SQL!
2. Si  no  se  puede en  SQL,  entonces en  PL/SQL.
3. Si  no  es posible en  PL/SQL  ,  entonces como Java  
almacenado en  la  base  de  datos.
4. Si  no  es posible,  escribamos entonces un  
procedimiento C  externo.
5. Si  no  se  puede de  ninguna de  las anteriores formas,  
evaluar por qué  se  necesita  J

10
Afinamiento SQL y PL/SQL
para Desarrolladores

SQL  Tuning

11
Agenda
• Qué es  SQL  Tuning?
• DB  Tuning  vs  SQL  Tuning
• Problemas  más  comunes
• Uso  de  variables  Bind
Qué  es  SQL  Tuning?
• Proceso  de  construcción  de  sentencias  SQL  
óptimas  que  logren  resultados  de  la  manera  
mas  efectiva  y  eficiente  posible.
• SQL  tuning  empieza  desde  el  diseño  de  las  
cláusulas  de  la  sentencia.
– Principalmente  se  revisa  las  cláusulas  FROM  y  
WHERE.  A  partir  de  éstas  dos  el  optimizador  toma  
las  decisiones  sobre  el  plan  de  ejecución.
Database  vs.  SQL  Tuning
• Database  tuning es  el  proceso  de  afinamiento  de  la  base  de  
datos,  lo  que  incluye  la  memoria  asignada,  el  uso  de  disco,  
CPU,  I/O,  y  demás  procesos  que  componen  a  la  base  de  datos.  
• El  proceso  de  afinamiento  de  la  base  de  datos    también  
consiste  en  la  administración  y  manipulación  de  las  
estructuras  de  la  base  de  datos  como  tablas  e  índices.
• Estas  y    otras  actividades  le  corresponden  al  DBA.
• El  objetivo  del  afinamiento  de  base  de  datos  es  asegurar  que  
la  base  de  datos  soporta  la  actividad  esperada  con  los  tiempos  
de  respuesta  requeridos.
Database  vs.  SQL  Tuning
• SQL  tuning es  el  proceso  de  afinar  las  sentencias  SQL  
que  acceden  a  la  base  de  datos.
• Estas  sentencias  SQL  incluyen  queries  y  operaciones  
transaccionales    como  inserts,  updates,  y  deletes
• El  objetivo  del  afinamiento  SQL  es  escribir  sentencias  
que  accedan  a  la  base  de  datos  de  la  manera  más  
efectiva  aprovechando  los  recursos  de  la  base  de  
datos  y  los  índices.  
Database  vs.  SQL  Tuning
• Para  obtener  resultados  óptimos,  se  requieren  
los  dos  tipos  de  Afinamiento.
• Una  base  de  datos  bien  afinada,  pero  con  
queries  SQL  mal  diseñados  no  tiene  un  buen  
desempeño.  (y  viceversa)
Sistema  complejo
• Al  afinar  la  base  de  datos  ,  
debemos  recordar  que  forma  
parte  de  un  sistema  complejo  
con  muchos  componentes  
interrelacionados.
Problemas  más  comunes
• Mal  manejo  de  conexiones  desde  la  aplicación  
hacia  la  base  de  datos.
• No  utilizar  variables  bind.
• Falta  de  índices  – full  table  scan  innecesarios
• Degradación  de  los  planes  de  ejecución
Manejo  de  conexiones
• El  proceso  de  establecer  una  conexión  a  la  
base  de  datos  es  costoso  y  no  escalable.
• El  número  de  conexiones  concurrentes  a  la  
base  de  datos  debe  minimizarse.
• Para  una  aplicación,  esto  requiere  manejo  de  
un  pool  de  conexiones.
• Evitar  conexiones  y  desconexiones  para  cada  
requerimiento  del  usuario.
SQL  Tuning:  Variables  Bind
• Una  de  las  mayores  causas  de  problemas  de  
desempeño  en  sentencias  SQL  es  no  usar  variables  
Bind.
select *  from emp where empno=123;
select *  from emp where empno=:empno
• :empno es una variable  que se  reemplaza en  tiempo
de  ejecución con  el  valor  que  se  requiera  para  
ejecutar  la  consulta.
SQL  Tuning:  Variables  Bind

• Si  no  se  usan  variables  bind,  cada  vez  que  se  ejecuta  un  query  
que  usa  constantes  ,  la  base  de  datos  los  considera  como  
nunca  antes  vistos.
• Esto  quiere  decir  que  el  query  deberá  pasar  por  todas  las  
fases  de  parsing,  optimización  y  demás  pre-­‐procesos.
• Esto  se  conoce  como  hard  parsing.
• En  contraste,  el  query  que  usa  variables  bind,  pasa  por  la  
etapa  de  parse  la  primera  vez,  y  las  ejecuciones  siguientes  
pueden  reutilizar  el  plan  de  ejecución  que  queda  en  el  Library  
cache.
Variables  Bind:    Ejemplo
1

2
Variables  Bind:    Ejemplo
Qué  es  un Latch  ?

• Tipo  de  candado  o  lock  que  se  usa  para  


controlar  el  acceso  a  las  estructuras  
compartidas  utilizadas  por  la  base  de  
datos.
• Una  de  éstas  estructuras  es  el  Shared  
Pool,   que  forma  parte  de  la  SGA.
• En  el  Shared  Pool  se  almacena  todo  el  
SQL  que  ha  pasado  por   la  fase  de  parse  
y  está  compilado.
• Esta  estructura  compartida   requiere  
control  para  que  solo  un  proceso   tenga  
acceso  a  la  vez,  usando  latches.
Full  Table  Scans

• Cuando  no  existen  los  índices  correctos,  es  posible  que  un  
query  o  sentencia  DML  realice  un  FTS  ,  lo  que  quiere  decir  un  
barrido  de  todas  las  filas  de  la  tabla.
• Se  debe  analizar  si  esto  constituye  un  problema  de  
performance,  ya  que  dependiendo  del  tamaño  de  la  tabla  esta  
opción  puede  ser  válida.
• En  el  proceso  de  afinamiento  de  queries,  es  importante  
identificar  para  consultas  problemáticas  si  se  están  realizando  
FTS  innecesarios.
Aprenda   de  los  mejores

Características SQL de Oracle


para mejorar Performance

26
Introducción
• Aplicaciones  actuales  demandan  menores  tiempos  de  
respuesta  de  las  bases  de  datos
• Sentencias  SQL  eficientes  necesarias  para  cumplir  SLAs
– Fracción  de  un  segundo  para  transacciones  en  línea
– Menos  de  un  segundo  para  operaciones  gráficas
– Pocos  segundos  para  reportes  en  línea  
• Obtener    el  mejor  rendimiento  a  medida  que  incrementa  
el  número  de  usuarios  no  es  una  tarea  sencilla
El  Problema  ?  

• Programadores  utilizan  características  antiguas  de  


SQL
• Sentencias  tradicionales  ‘SELECT’  con  sub  queries  
y  tablas  intermedias  o  de  paso
• Afinamiento  adicional  requerido  para  escalar
• Múltiples  copias  de  SQL  ineficientes  pueden  
afectar  el  rendimiento  del  sistema
La  Solución

• Potenciar  su  SQL


• 10  características que  ayudan  a  resolver  la  
mayoría  de  problemas  de  SQL
• Procesamiento  más  rápido  con  las  nuevas  
características  SQL
• Funciones  avanzadas  de  SQL  que  no  necesitan  
Afinamiento
Construcción 1:  Cláusula With  en SQL
• With  Clause  en sentencias Select
– Sólo   se  puede  usar  en  sentencias   WITH
SELECT query_name1(alias11,  alias12,..)  AS
(Select  subquery1)
– Datos pre-­‐construidos para  una
consulta compleja query_name2  (alias21,  alias22,..)  AS
(Select  subquery2)
– Crea y  trabaja en un  conjunto de  
SELECT  col1,  col2,..
resultados
FROM  query_name1,  query_name2
– Referencia  el  conjunto   de   WHERE  <join  condition>;
resultados  varias  veces

Beneficios
– Eliminar tablas de  paso y  escrituras relacionadas
– Excelente alternativa a  tablas temporales globales
– Mejora el  rendimiento
– Usado en  consultas adhoc en  grandes bases  de  datos
Construcción 1:  Cláusula  With  en  SQL
WITH a1  AS  – definir subquery,  salario por departamento y  job  type
(  select  department_id,job_title,sum(salary)  salary  
from  employees,  jobs
where  a.job_id=b.job_id
group  by  department_id,job_title),
b1  AS    -­-­ definir subquery,  d epartamentos y  sus países
(select  department_id,  country_name
from  departments  a,  locations  b,  countries  c
where  a.location_id=b.location_id
and  b.country_id=c.country_id)
SELECT country_name,  job_title,  sum(salary)    -­-­ seleccionar a  p artir de  los  resultados
FROM a1,  b1
WHERE a1.department_id=b1.department_id
GROUP  BY  country_name,  job_title
Construcción 1:  Cláusula  With  en  SQL
• Recursive  With  Clause WITH  emp(first_name,  employee_id,job_title,  
managers_name) AS
– Nested  With  clause (
Select  first_name,  employee_id,job_title,'  '  
– Reuse  result  set  in  a   from  employees  a,  jobs  b
where  a.job_id=b.job_id
nested  loop and  b.job_id='AD_PRES'
UNION  ALL
• Beneficios: Select  first_name,a.employee_id,b.job_title,c.first_name
managers_name
– Menor I/Os from  employees  a,  jobs  b,  emp c
– Rendimiento extremo where  a.job_id=b.job_id
and  a.manager_id=c.employee_id
)
SELECT  first_name employee_name,  job_title,  
managers_name
FROM  emp
Construcción 1:  Cláusula  With  en  SQL
Construcción  1:  Cláusula  With  en  SQL  
Matriz  de  Compatibilidad

Característica Oracle  version

With clause 9i y  superior


Recursive 11gR2  únicamente
With clause

Valor  agregado  para  diferentes  ambientes


OLTP DSS/Reporting Data  
Warehouse
No Sí Sí
Construcción  2:  Insert    Multitabla
• Insert  Multi-­‐tabla INSERT  ALL
INTO  TABLE1  (values….)
– Inserta  datos  en  muchas   INTO  TABLE2  (values…)
tablas  a  la  vez INTO  TABLE3  (values…)
– Insert  condicionales SELECT  col1,  col2,..
FROM  table1,  table2,  …
• Beneficios
WHERE  <join  condition>;;
– En  una  sola  sentencia  inserta  
los  datos  actuales,  de   INSERT  ALL  
auditoria  e  históricos WHEN  <condition>  THEN  
– Una  sola  pasada  al   INTO  TABLE1  (values..)
compilador WHEN  <condition>  THEN
INTO  TABLE2  (values..)
– Mejora  al  menos  50%  el   SELECT  col1,  col2,..
rendimiento  dependiendo  del   FROM  table1,  table2,  …
número  de  tablas WHERE  <join  condition>;
Construcción  2:  Insert    Multitabla
INSERT  ALL      -­-­ Inserta  en  3  tablas  conditionalmente
WHEN (SALARY  >15000)  THEN
INTO EMP_HIGH_SALARY
WHEN (SALARY>5000  AND  SALARY<=15000)  THEN
INTO  EMP_MED_SALARY
ELSE
INTO EMP_LOW_SALARY
SELECT  *  FROM  EMPLOYEES;;

INSERT  ALL  -­-­Inserta  al  mismo  tiempo  en  tabla  actual  e  histórica
INTO EMPLOYEE_SALARY(employee_id,first_name,last_name,salary)
VALUES (employee_id,first_name,last_name,salary)
INTO EMPLOYEE_SALARY_HISTORY(employee_id,first_name,last_name,salary,  update_date)
VALUES (employee_id,first_name,last_name,salary,  update_date)
SELECT  employee_id,  first_name,  last_name,  salary,  sysdate  update_date  
FROM  EMPLOYEES;;
Característica 2:  Insert    Multitabla
Matriz  de  Compatibilidad

Característica Oracle  version


Multi-­‐table Inserts 9i  y  superior
Conditional Insert 10g  y  superior

Valor  agregado  para  diferentes  ambientes

OLTP DSS/Reporting Data  


Warehouse
Sí Sí Sí*

*  No  puede  paralelizarse  en  tablas  con  bitmap  indexes  o  index  organized  tables
Característica 3:  Funciones  Analíticas  Avanzadas  
• Funciones   Analíticas
– Comparar  filas  dentro  de  la  
misma  tabla  o  result  set SELECT
analytic_function(arg1)  
– Aplicar  particiones y  
over  (partition  by  expr -­‐-­‐partition  clause
ventanas  para  la  
order  by  expr )                            -­‐-­‐order  by  clause
comparación
rows  between  <rows>    -­‐-­‐ windowing  clause
– Rangos  y  percentiles,  
FROM  table1,  table2,  .  .  .  
Análisis  Primero/Ultimo,  
WHERE  <join  condition>;;
Análisis  lag/lead  
– Top-­‐N,  Movimientos  
agregados
• Beneficios
– Elimina  los  self  joins
– Mejora  el  rendimiento
– Más  fácil  de  codificar
– No  requiere   afinamiento!
Característica  3:  Funciones  Analíticas  Avanzadas  
Sintaxis
Analytic-­Function(<Argument>,<Argument>,...)
OVER  (
<Query-­Partition-­Clause>
<Order-­By-­Clause>
<Windowing-­Clause>
)
PARTITION  BY  – divide  los  datos  en  grupos
ORDER  BY  – ordena  los  datos  dentro  de  cada  partición
WINDOWING  – filas  o  rangos  de  filas  sobre  las  que  se  va  a  trabajar  
Característica  3:  Funciones  Analíticas  Avanzadas  

Filas
Proceso Analítico
Evaluación Ordenamiento
Evaluación Agrupamiento HAVING Intermedio
WHERE

Función
Analítica

ORDER BY
Final
Resultado
Característica  3:  Funciones  Analíticas  Avanzadas  
RANK()  y  DENSE_RANK()
SELECT ROW_NUMBER() OVER(ORDER BY sal DESC) rownumber
,RANK() OVER(ORDER BY sal DESC) rank
,DENSE_RANK() OVER(ORDER BY sal DESC) denserank
,sal
,ename
FROM emp
ORDER BY sal DESC,ename;
ROWNUMBER RANK DENSERANK SAL ENAME
--------- ---- ---------- ----- ------
1 1 1 5000 KING
2 2 2 3000 FORD
3 2 2 3000 SCOTT
4 4 3 2975 JONES
5 5 4 2850 BLAKE
6 6 5 2450 CLARK
7 7 6 1600 ALLEN
8 8 7 1500 TURNER
9 9 8 1300 MILLER
10 10 9 1250 MARTIN
11 10 9 1250 WARD
12 12 10 1100 ADAMS
13 13 11 950 JAMES
14 14 12 800 SMITH
Particionamiento
Las  funciones analíticas  pueden  aplicarse  a  grupos  lógicos  dentro  del  conjunto  de  
resultados
Partitions
... OVER(PARTITION BY mgr ORDER BY sal DESC)

PARTITION  BY  especifica el  agrupamiento


ORDER  BY  especifica el  ordenamiento dentro de  cada grupo
No  esta relacionado con  el  particionamiento de  tablas
Si  no  se  especifica la  partición ,  se  toma al  resultado completo como una partición.
Los  valores NULL  se  agrupan juntos,  como en el  GROUP  BY
Pueden usarse diferentes funciones analíticas con  distintas subcláusulas de  
particionamiento.
Particionamiento:    Ejemplo
Clasificar  los  empleados  en  orden  de  salario  por  gerente.

SELECT ename
,mgr
,sal
,RANK() OVER(PARTITION BY mgr ORDER BY sal DESC) m_rank
FROM emp
ORDER BY mgr
,m_rank;
ENAME MGR SAL M_RANK
---------- ---------- ---------- ----------
SCOTT 7566 3000 1
FORD 7566 3000 1
ALLEN 7698 1600 1
TURNER 7698 1500 2
WARD 7698 1250 3
MARTIN 7698 1250 3
JAMES 7698 950 5
MILLER 7782 1300 1
ADAMS 7788 1100 1
JONES 7839 2975 1
BLAKE 7839 2850 2
CLARK 7839 2450 3
SMITH 7902 800 1
KING 5000 1
Agregación:    La  cláusula  OVER
SELECT deptno
,AVG(sal)
FROM emp SELECT deptno
GROUP BY deptno; ,AVG(sal) OVER (PARTITION BY deptno) avg_dept
,AVG(sal) OVER () avg_all
DEPTNO AVG(SAL) FROM emp;
---------- ---------- No  subclause
30 1566.66667 DEPTNO AVG_DEPT AVG_ALL
20 2175 ---------- ---------- ----------
10 2916.66667 10 2916.66667 2073.21429
10 2916.66667 2073.21429
10 2916.66667 2073.21429
20 2175 2073.21429
20 2175 2073.21429
20 2175 2073.21429 Agregaciones
20 2175 2073.21429 analíticas
20 2175 2073.21429 no  reducen el  
30 1566.66667 2073.21429
número de  filas
30 1566.66667 2073.21429
30 1566.66667 2073.21429
30 1566.66667 2073.21429
30 1566.66667 2073.21429
30 1566.66667 2073.21429
Analytics  vs  SQL  convencional
Si  se  requiere  datos  a  distintos  niveles  de  agrupación

Salario promedio
por departamento
ENAME SAL DEPTNO AVG_DEPT AVG_ALL
------ ---- ------ ---------- ----------
CLARK 2450 10 2916.66667 2073.21429
KING 5000 10 2916.66667 2073.21429
MILLER 1300 10 2916.66667 2073.21429 Salario promedio
JONES 2975 20 2175 2073.21429 total
FORD 3000 20 2175 2073.21429
ADAMS 1100 20 2175 2073.21429
SMITH 800 20 2175 2073.21429
SCOTT 3000 20 2175 2073.21429
WARD 1250 30 1566.66667 2073.21429
TURNER 1500 30 1566.66667 2073.21429
ALLEN 1600 30 1566.66667 2073.21429
JAMES 950 30 1566.66667 2073.21429
BLAKE 2850 30 1566.66667 2073.21429
MARTIN 1250 30 1566.66667 2073.21429
Performance del SQL  convencional
SELECT r.ename,r.sal,g.deptno,g.ave_dept,a.ave_all
FROM emp r
,(SELECT deptno,AVG(sal) ave_dept
FROM emp GROUP BY deptno) g
,(SELECT AVG(sal) ave_all
FROM emp) a
WHERE g.deptno = r.deptno
ORDER BY r.deptno;
-----------------------------------------------
| Id | Operation | Name | Rows |
-----------------------------------------------
| 0 | SELECT STATEMENT | | 15 |
| 1 | MERGE JOIN | | 15 |
| 2 | SORT JOIN | | 3 | 1M  de  empleados
| 3 | NESTED LOOPS | | 3 |
| 4 | VIEW | | 1 | 48.35  segundos
| 5 | SORT AGGREGATE | | 1 |
| 6 | TABLE ACCESS FULL| EMP | 14 |
| 7 | VIEW | | 3 |
| 8 | SORT GROUP BY | | 3 |
| 9 | TABLE ACCESS FULL| EMP | 14 |
|* 10 | SORT JOIN | | 14 |
| 11 | TABLE ACCESS FULL | EMP | 14 |
-----------------------------------------------
Performance del SQL  analítico

SELECT ename,sal,deptno
,AVG(sal) OVER (PARTITION BY deptno) ave_dept
,AVG(sal) OVER () ave_all
FROM emp;

-------------------------------------------
| Id | Operation | Name | Rows |
-------------------------------------------
| 0 | SELECT STATEMENT | | 14 |
| 1 | WINDOW SORT | | 14 | 1M  de  empleados
| 2 | TABLE ACCESS FULL| EMP | 14 |
------------------------------------------- 21.20  segundos
Característica  3:  Funciones  Analíticas  Avanzadas  
SELECT  first_name,  department_id,  salary,
RANK()  OVER  (PARTITION  BY  department_id  ORDER  BY  salary  DESC  )  RANK,  -­-­function  Rank()
LAG(salary)  OVER  (PARTITION  BY department_id  ORDER  BY  salary  DESC  )  PREV_HIGH_SAL  
-­-­ function  Lag()
FROM  employees
WHERE  department_id  IN  (10,  20,30,40)  
ORDER  BY  2,  RANK;;
Característica  3:  Funciones  Analíticas  Avanzadas  
Matriz  de  Compatibilidad

Característica Oracle  versión

Funciones   Analíticas 9i  y  superior

Soporte   Window functions 9i  y  superior

Valor  agregado  para  diferentes  ambientes

OLTP DSS/Reporting Data  


Warehouse
No Sí Sí
Característica 5:  Result  Cache
• Cache  de  los  resultados  de  las  
consultas ALTER  TABLE  <table_name>  result_cache  
– Cache  de  todo   el  resultado,  no   (mode  force);;

solo  los  bloques   de  datos


• 3  «result cache» SELECT  /*+  result_cache  */  col1,  col2,…
FROM  tab1,  tab2
– query result cache WHERE  <join_condition>
– PL/SQL  function result cache
– client OCI  result cache CREATE  OR  REPLACE  FUNCTION  
FN_ABC  (var1  datatype)
• Beneficios RETURN  NUMBER
– Mejora  el  rendimiento   RESULT_CACHE  RELIES_ON  (tab1)
IS
exponencialmente BEGIN
– Evita  fetch repetidos   en  funciones  
PL/SQL END;;
Característica 5:  Result  Cache
SELECT  /*+  result_cache  */
department_name,  listagg(first_name,',')  within  group  (order  by  salary),  sum(salary)
from  hr.employees  a,  hr.jobs  b,  hr.departments  c
where  a.job_id=b.job_id
and  a.department_id=c.department_id
group  by  department_name;

Sin “result cache” Con  “result  cache”


Característica 5:  Result  Cache
Matriz  de  Compatibilidad

Característica Oracle  versión


Query  Result Cache 11gR1 y  superior
Function Result  Cache 11gR1 y  superior

Valor  agregado  para  diferentes  ambientes

OLTP DSS/Reporting Data  


Warehouse
Sí Sí Sí
Característica 8:  SQL/XML
• Construir  XML  dentro  de  la  base  de  
datos
– Recuperar  data  como  XML  usando  
funciones   SQL
SELECT  XML_FUNCTION(…)
– XMLELEMENT,  XMLAGG,   etc
FROM  tab1,  tab2
– SQL/XML  es  parte  de  SQL  2003
WHERE  <  join_conition>;;
• Beneficios
– Añadir   funcionalidad   XML  a  
consultas  SQL
– Crear  estructuras  XML  con  
poderosa   funciones   de  publicación  
XML
– Esquema  XML  mejorado   y  
administración  del  ciclo  de  vida
Característica 8:  SQL/XML
SELECT   XMLELEMENT("Emp",
XMLATTRIBUTES(e.employee_id   AS  "ID",   e.last_name),
XMLELEMENT("Dept",   e.department_id),
XMLELEMENT("Salary",   e.salary))   AS  "Emp   Element"
FROM  employees   e
WHERE   e.employee_id   =   206;

<Emp  ID="206"  LAST_NAME="Gietz">


<Dept>110</Dept>  
<Salary>8300</Salary>  
</Emp>
Característica 8:  SQL/XML
Matriz  de  Compatibilidad

Característica Oracle versión


XML  functions 10g  y  superior
Native  XML Storage   10g y  superior
(XML  data  type)

Valor  agregado  para  diferentes  ambientes

OLTP DSS/Reporting Data  


Warehouse
Sí Sí Sí
Característica 9:  Java  Calls  
desde la  DB
• Java  stored  procedures
loadjava -­‐user  scott/tiger  Hello.class
– Definir y  compilar una clase Java
CREATE  OR  REPLACE  FUNCTION  helloworld
– Subir la  clase a  la  database
RETURN  VARCHAR2  AS  LANGUAGE  JAVA  
– Publicar la  clase en una funcion o  
NAME  'Hello.world ()  return  java.lang.String';;  
procedimiento almacenado
/
– Llamar al  procedimiento almacenado
SQL>  VARIABLE  myString VARCHAR2(20);;
– Corre sobre Oracle  JVM
SQL>  CALL  helloworld()  INTO  :myString;;
• Beneficios
Call  completed.  
– Use  advanced  Java  library  functions  
SQL>  PRINT  myString;;
(tales  como DNS,  Encryption)   en la  
-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
base
DBMS_JAVA:
– Funcionalidad extendida a  la  base  de  
datos para  incluir programas Java FUNCTION  runjava_in_current_session(cmdline
VARCHAR2)  RETURN  VARCHAR2;;
Característica 9:  Java  Calls  from  DB
• Crear una clase Java
• Subir la  clase java  a  la  BD
– loadjava -­‐user  scott/tiger  Hello.class
• Insertar la  clase en un  objeto PLSQL
CREATE   OR  REPLACE  FUNCTION  helloworld
RETURN  VARCHAR2  
AS  
LANGUAGE  JAVA  NAME   'Hello.world ()  return  j ava.lang.String';

• Invocar la  clase java


SQL>VARIABLE  myStringARCHAR2(20);
SQL>  CALL  helloworld()  INTO  :myString;
Call  c ompleted.  
SQL>  PRINT  myString;
Característica 9:  Java  Calls  from  DB
Matriz  de  Compatibilidad
Característica Oracle  versión
Java calls  from   DB 8i y  superior

Valor  agregado para  diferentes ambientes

OLTP DSS/Reporting Data  


Warehouse
Sí No No
Resumen
Característica Mejor Menor mant Beneficios
Rendimiento de  código adicionales
SQL  With and  Recursive   X X Recursive lookups
With  clause
Multi-­‐table inserts X X Single pass  through

Advanced  Analytic  functions X X Window comparison

Advanced Data  aggregation X X Additional   group  by  


operators
SQL result  cache X Store  result  sets  in  
memory
SQL/XML X XML  within  the  
database
Java calls  from  DB X Java functionality   in  
DB
Preguntas ?

60

También podría gustarte