Sunteți pe pagina 1din 14

Josue Álvarez Moreno

Análisis

de

Fernando Pulido Maleno

rendimiento

en

Josue Álvarez Moreno Análisis de Fernando Pulido Maleno rendimiento en 10G Josué Álvarez Moreno y Fernando

10G

Josué Álvarez Moreno y Fernando Pulido Maleno

Pág. 1 de 14

Josue Álvarez Moreno

Índice

Fernando Pulido Maleno

Objetivos...............................................................................................................................................3

¿Que son las vistas dinámicas de rendimiento?....................................................................................3

Statspack...............................................................................................................................................5

¿Que es Statspack?...........................................................................................................................5 ¿Por qué usar Statspack?..................................................................................................................5 ¿Que es una snapshot?.....................................................................................................................5 Funcionamiento general de Statspack ..............................................................................................6 Instalando Statspack ........................................................................................................................6 Requisitos ....................................................................................................................................6

Proceso........................................................................................................................................6

Tomar nuestra primera snapshot ......................................................................................................7 Listar todas las snapshots de nuestra base de datos .........................................................................7 Borrar snapshots ..............................................................................................................................7 Ajustar el nivel de detalle de las snapshots ......................................................................................7 Programar la toma de snapshots ......................................................................................................8 Creación de informes .......................................................................................................................8 Análisis del informe .........................................................................................................................9

Cabecera......................................................................................................................................9

Perfil de carga ...........................................................................................................................10 Porcentaje de eficiencia de la instancia .....................................................................................10 Top 5 eventos............................................................................................................................12 Top de consultas que consumen más tiempo de CPU..............................................................12 Resumen de estadísticas de E/S para cada tablespace ..............................................................13

Pág. 2 de 14

Josue Álvarez Moreno

Objetivos

Fernando Pulido Maleno

  • - Conocer las vistas dinámicas que proporcionan información sobre el rendimiento de la instancia.

  • - Instalar y configurar statspack entendiendo la estructura de la aplicación y los diferentes niveles de recogida de datos existentes.

  • - Comprender la información más relevante recogida por statspack de forma que se detecten los

problemas de rendimiento de la instancia, los posibles cuellos de botella de la base de datos y las

sentencias o procedimientos que generan problemas de carga de la base de datos.

  • - Aprender a redactar una documentación concisa y útil sobre procedimientos de administración.

¿Que son las vistas dinámicas de rendimiento?

Proporcionan información en tiempo real acerca de las entrañas de nuestra base de datos. La estructura de la base de datos, información de rendimiento, parámetros de inicialización son algunos ejemplos de los datos que podemos obtener de ellas.

Las vistas proporcionadas por Oracle tienen siempre el prefijo V_$, pertenecen a SYS, y por defecto sólo están disponibles a SYS y a usuarios con el privilegio SELECT ANY TABLE. También encontraremos vistas que comienzan por V$, que son sinónimos que apuntan a las anteriores.

Algunas de estas vistas dinámicas son:

V$OPEN_CURSOR

Cursores abiertos durante la sesión en curso.

  • V$SESSION Sesiones en ejecución en esta instancia.

V$SESSION_WAIT

Recursos solicitados por las sesiones.

V$DB_OBJECT_CACHE

Estadísticas a nivel de objeto de la shared pool.

  • V$FILESTAT Resumen de la actividad de E/S a nivel de archivo

V$LIBRARYCACHE

Pág. 3 de 14

Josue Álvarez Moreno

Fernando Pulido Maleno

Resumen de los contenidos de la shared pool a nivel de namespace.

V$LIBRARY_CACHE_MEMORY

Resumen del uso de memoria de la library cache, según el tipo de objeto.

  • V$MYSTAT Informe de uso de recursos para tu sesión.

    • V$ROLLSTAT Estado del segmento de rollback

V$ROWCACHE

Actividad del diccionario de datos.

  • V$SEGSTAT Estadísticas de segmentos.

V$SESSION_EVENT

Resumen de todos los waits relacionados con esta sesión.

  • V$SESSTAT Uso de recursos de la sesión.

V$SQL
V$SQL

Sentencias en ejecución.

  • V$SYSSTAT Uso de recursos de la instancia.

  • V$SGAINFO Tamaño de todos elementos de la SGA.

    • V$UNDOSTAT Histograma de uso de Undo, por intervalos de 10 minutos.

V$PARAMETER y V$SYSTEM_PARAMETER

Pág. 4 de 14

Josue Álvarez Moreno

Paramétros de tu sesión e instancia.

  • V$PROCESS Procesos de servidor

    • V$SQL_PLAN

Fernando Pulido Maleno

Plan de ejecución para sentencias ejecutadas recientemente.

V$SQL_PLAN_STATISTICS

Estadísticas de ejecución de cada operación en el plan de ejecución.

  • V$SQLTEXT Texto de sentencias SQL en la shared pool Podríamos examinar cada una de estas vistas y anotar sus valores para conseguir información sobre como afectan los cambios de configuración al rendimiento. Por suerte, Oracle proporciona una serie de scripts agrupados bajo el nombre de Statspack que se encargarán de hacer la mayor parte del trabajo sucio en nuestro lugar. Statspack ¿Que es Statspack? Statspack es un conjunto de scripts para medir la productividad de la base de datos. Recopila información de las vistas dinámicas de rendimiento y, comparando diferentes snapshots, genera informes sobre el rendimiento de nuestra base de datos. ¿Por qué usar Statspack? Para poder optimizar el rendimiento de la instacia, es vital saber cual es nuestro nivel actual para poder comparar en un futuro. Sin un nivel base, es dificíl averiguar a que se debe el problema que afecta a nuestra base de datos. ¿Que es una snapshot? El término 'snapshot' describe un conjunto de estadísticas tomadas en un momento concreto, almacenadas con un identificador único. No confundir con Oracle Snapshot Replication.

Pág. 5 de 14

Josue Álvarez Moreno

Funcionamiento general de Statspack.

Fernando Pulido Maleno

El proceso de instalación crea un usuario, de nombre PERFSTAT propietario de todos los objetos necesarios por este paquete. Después se le conceden únicamente privilegios de consulta sobre las vistas dinámicas necesarias para recopilar la información.

Una snapshot tiene como identificador único la combinación de su snap_id (generada automáticamente en el momento de la creación de dicha snapshot), el dbid, y el número de instancia.

Una vez hemos tomados varias snapshots, es posible generar un informe de rendimiento, proporcionando las id de las dos snapshots que queremos comparar.

Instalando Statspack.

Requisitos.

Un tablespace dedicado para almacenar los objetos necesarios. El tamaño mínimo necesario es 250 megabytes, aunque varía de instalación en instalación y Oracle no proporciona ninguna cifra orientativa. Para ser consistentes, Oracle recomienda llamarlo PERFSTAT. Es importante mantener vigilado el tamaño del tablespace para que no se llene.

SQL> CREATE TABLESPACE perfstat DATAFILE 'C:\app\Usuario\oradata\orcl\perfstat.dbf' SIZE 1000M REUSE EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K SEGMENT SPACE MANAGEMENT AUTO PERMANENT ONLINE;

Proceso

Nos conectamos como algún usuario con privilegios de SYSDBA

SQL> @?/rdbms/admin/spcreate.sql SQL>[password para el usuario perfstat]

Nombre del tablespace a utilizar:

SQL>PERFSTAT

Que tablespace temporal usara el usuario PERFSTAT SQL>TEMP

Revisar los archivos de log spcusr.lis, spctab.lis, spcpkg.lis en busca de “ORA-”, por si ha habido algún error. En ese caso, hay que corregir el error, desinstalar Statspack y volver a iniciar el

Pág. 6 de 14

Josue Álvarez Moreno

proceso de instalación.

Fernando Pulido Maleno

SQL> @?/rdbms/admin/spdrop.sql SQL> @?/rdbms/admin/spcreate.sql

Tomar nuestra primera snapshot.

Nos conectamos como perfstat y ejecutamos la siguiente consulta:

SQL>exec statspack.snap; Procedimiento PL/SQL terminado correctamente.

Listar todas las snapshots de nuestra base de datos.

select name,snap_id,to_char(snap_time,'DD.MM.YYYY:HH24:MI:SS') "Date/Time" from stats$snapshot,v$database;

Borrar snapshots.

@?/rdbms/admin/sppurge;

Ajustar el nivel de detalle de las snapshots.

Nivel 0: Este nivel almacena estadísticas generales, incluyendo segmentos de rollback, caché de filas, SGA, eventos de sistema, procesos de fondo, eventos de sesión, estadísticas de sistema, estadísticas de tiempos de espera, bloqueos de objetos e información de cerrojos. Nivel 5: Este nivel almacena datos sobre consultas SQL que consuman muchos recursos, junto con todos los datos capturados por niveles inferiores. Nivel 6: Este nivel almacena el plan de ejecución de consultas SQL que consuman muchos recursos, junto con todos los datos capturados por niveles inferiores. Nivel 7: Este nivel recoge estadísticas a nivel de segmento, incluyendo lecturas físicas y lógicas, bloqueos de filas, tiempos de espera de buffers y todos los datos capturados por niveles inferiores. Nivel 10: Este nivel almacena estadísticas sobre cerrojos hijos, junto con todos los datos capturados por niveles inferiores.

Para modificar el nivel de detalle de nuestras snapshots futuras usamos el siguiente comando, cambiando 6 por el nivel deseado.

exec statspack.snap(i_snap_level => 6, i_modify_parameter => 'true');

Pág. 7 de 14

Josue Álvarez Moreno

Programar la toma de snapshots.

Fernando Pulido Maleno

@?/rdbms/admin/spauto.sql

Este script de ejemplo programará la toma de una snapshot cada hora. Para modificar la programación de esta tarea o de cualquier otra, podemos utilizar el comando dbms_job.

Creación de informes.

Nota: No deben compararse snapshots procedentes de diferentes ejecuciones de instancias. La instancia no debe haber sido apagada entre la snapshot inicial y la final. La razón es que los valores recopilados por Statspack proceden de vistas que residen en memoria, por lo que apagar la instancia resetaría los valores a 0. Dado que Statspack resta los valores iniciales a los finales, el resultado sería inválido.

SQL*PLUS>@?/rdbms/admin/spreport.sql

Pág. 8 de 14

Josue Álvarez Moreno

Fernando Pulido Maleno

Análisis del informe.

Cabecera

STATSPACK report for

Database

DB Id

Instance

Inst Num Startup Time

Release

RAC

~~~~~~~~ ----------- ------------ -------- --------------- ----------- ---

1270876239 orcl

1 15-Mar-11 00:58 11.2.0.1.0 NO

Host Name

Platform

CPUs Cores Sockets

Memory (G)

~~~~ ---------------- ---------------------- ----- ----- ------- ------------

PINGU

Microsoft Windows IA (

1

1

1

1.3

Snapshot

Snap Id

Snap Time

Sessions Curs/Sess Comment

~~~~~~~~

---------- ------------------ -------- --------- ------------------

Begin Snap:

1 15-Mar-11 02:07:29

30

4.2

End Snap:

2 15-Mar-11 02:09:08

33

4.0

Elapsed:

1.65 (mins) Av Act Sess:

0.2

DB time:

0.31 (mins)

DB CPU:

0.17 (mins)

 

Cache Sizes

Begin

End

~~~~~~~~~~~

---------- ----------

Buffer Cache:

124M

Std Block Size:

8K

Shared Pool:

200M

Log Buffer:

5,480K

Campo importante: Elapsed time. Merece la pena repetirlo: Si no ha pasado tiempo suficiente entre cada snapshot o ha pasado demasiado, los valores que se obtengan no serán representativos.

Pág. 9 de 14

Josue Álvarez Moreno

Perfil de carga.

Fernando Pulido Maleno

Load Profile

Per Second

Per Transaction

Per Exec

Per Call

~~~~~~~~~~~~

------------------ ----------------- ----------- -----------

DB time(s):

0.2

1.4

0.01

0.05

DB CPU(s):

0.1

0.7

0.00

0.02

Redo size:

16,031.7

113,366.9

Logical reads:

288.0

2,036.3

Block changes:

48.0

339.7

Physical reads:

5.9

41.4

Physical writes:

0.1

0.5

User calls:

4.2

29.6

Parses:

16.9

119.3

Hard parses:

1.4

10.2

W/A MB processed:

0.5

3.8

Logons:

0.1

0.6

Executes:

32.0

226.2

Rollbacks:

0.0

0.0

Transactions:

0.1

Executes: Cuantas sentencias se procesan por segundo. Cuantas más mejor. Transactions: Cuantas transaciones por segundo se procesan. Cuantás más mejor.

En este caso, la carga de nuestra base de datos es muy ligera.

Porcentaje de eficiencia de la instancia.

Cuanto más cerca de 100% de eficiencia, mejor.

Instance Efficiency Indicators ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Buffer Nowait %:

99.97

Redo NoWait %: 100.00

Buffer Hit

%:

97.97 Optimal W/A Exec %: 100.00

Library Hit %: 92.23 Soft Parse %: 91.44

Execute to Parse %:

47.27

72.63

Latch Hit %: 100.00

Parse CPU to Parse Elapsd %:

% Non-Parse CPU:

82.80

Shared Pool Statistics

Begin

End

------ ------

Memory Usage %:

78.96

79.27

% SQL with executions>1:

71.09

76.20

% Memory for SQL w/exec>1:

76.59

84.09

Si el procentaje de Library Hits es muy bajo, deberiamos examinar el tamaño de la shared pool para verificar que no es demasiado pequeña.

Pág. 10 de 14

Josue Álvarez Moreno

Fernando Pulido Maleno

Pág. 11 de 14

Josue Álvarez Moreno

Top 5 eventos

Fernando Pulido Maleno

Top 5 Timed Events

Avg %Total

~~~~~~~~~~~~~~~~~~

wait

Call

Event

Waits

Time (s)

 

(ms)

 

Time

----------------------------------------- ------------ ----------- ------ ------

CPU time

12

55.0

 

buffer busy waits

4

6

1379

 

26.2

db file sequential read

446

1

3

6.3

control file sequential read

511

1

2

3.8

log file parallel write

28

1

19

2.5

CPU time no es en realidad un evento de espera, sino la suma de la CPU usada durante la sesión.

Db file sequential read - Aparece con mayor frecuencia cuando hay esperas a la hora escribir en el espacio temporal.

Top de consultas que consumen más tiempo de CPU

SQL ordered by Gets DB/Inst: ORCL/orcl Snaps: 1-2

-> End Buffer Gets Threshold:

-> Captured SQL accounts for

10000 Total Buffer Gets:

60.4% of Total Buffer Gets

28,508

-> SQL reported below exceeded 1.0% of Total Buffer Gets

 

CPU

Elapsd

Old

Buffer Gets

Executions Gets per Exec %Total Time (s) Time (s) Hash Value

--------------- ------------ -------------- ------ -------- --------- ----------

14,183

1

14,183.0

49.8

3.27

17.11 2522684317

Module: SQL*Plus BEGIN statspack.snap; END;

 

10,151

3

3,383.7

35.6

2.63

3.18 1279382630

Module: SQL Developer select 'TABLE' type, ''||o.owner# owner, name object_name, null

column_name, null column_id, null data_type FROM sys.obj$ o whe re o.name not like 'BIN%' and o.type# = 2 and rownum <=50 and

name like :1

union all select 'VIEW' type, ''||o.owner# owne

704

3

234.7

2.5

2.02

3.69 1656426908

Module: SQL Developer SELECT /*OracleDictionaryQueries.ALL_TABLE_ORACLE_QUERY*/

X.TABLE_NAME ,

'TABLE' OBJECT_TYPE ,

(SELECT O.OBJECT_I

  • D FROM

ALL_OBJECTS O

WHERE O.OWNER = X.OWNER

AND O.OBJECT_TYPE = 'TABLE'

AND O.OBJECT_NAME = X.TA

650

54

12.0

2.3

0.03

0.13 3285818817

select owner#,name,namespace,remoteowner,linkname,p_timestamp,p_

Pág. 12 de 14

Josue Álvarez Moreno

Fernando Pulido Maleno

obj#, nvl(property,0),subname,type#,d_attrs from dependency$ d, obj$ o where d_obj#=:1 and p_obj#=obj#(+) order by order#

Resumen de estadísticas de E/S para cada tablespace.

Tablespace IO Stats

------------------------------

 

Av

Av

Av

Av

Buffer Av Buf

 

Reads Reads/s Rd(ms) Blks/Rd

Writes Writes/s

Waits Wt(ms)

-------------- ------- ------ ------- ------------ -------- ---------- ------

TAB

1,643

4

1.0

19.2

16,811

 

39

0

0.0

UNDO

166

0

0.5

1.0

5,948

14

0

0.0

SYSTEM

813

 

2

2.5

1.6

167

0

0

0.0

PERFSTAT

146

 

0

0.3

1.1

277

1

0

0.0

SYSAUX

18

 

0

0.0

1.0

29

0

0

0.0

IDX

18

0

0.0

1.0

18

0

0

0.0

USER

18

0

0.0

1.0

18

0

0

0.0

-------------------------------------------------------------

Material utilizado como referencia en la preparación de este documento

Oracle Statspack Survival Guide:

http://www.akadia.com/services/ora_statspack_survival_guide.html Manual de Statspack de Oracle: Disponible en dbhome_1/RDBM/ADMIN/spdoc.txt

Pág. 13 de 14

Josue Álvarez Moreno

(Parte de Puli)

Fernando Pulido Maleno

Pág. 14 de 14