Aviso...



Hola...

No fallecí , ni perdí la memoria, tampoco me casé..

Sólo que estoy en un momento de reflexión reventado de trabajo , después del cual volveré a escribir :>>

Gracias a todos... ;)


by Ligarius
23.01.13. 12:22:45. 33 words, 3657 views. Categories: Cosas varias ,

¿Qué es un INDEX SKIP SCAN?



Siempre hemos escuchado que el no ocupar la cabecera del índice hará que simplemente no ocupemos el índice (índices compuestos) ... pues bien esto se mantuvo por harto tiempo, hasta la versión 9i de Oracle.




Quizás es algo que quedo en la retina y que casi siempre forzábamos haciendo un típico "campo1 > 0" para que realmente ocupará el índice, pero eso es lo más malo y erróneo que podemos hacer... teniendo en cuenta que hacer un FULL sobre una tabla no es siempre malo.


Un INDEX SKIP SCAN permite usar sólo una parte del índice cuando no estamos utilizando su cabecera, esto es muy provechoso ya que de todas formas no estamos haciendo un FULL sobre la tabla, todo esto es analizado por el CBO , con lo cual "siempre" elige el mejor plan de ejecución, es más , CBO podría dejar fuera de acción la cabecera de un índice y solamente ocupar "su cuerpo". Esta opción solamente está disponible para índices del tipo B*Tree


Para graficar de mejor forma el comportamiento de un INDEX SKIP SCAN , va un ejemplo


- Creamos una tabla
create table at2(a varchar2(3),b varchar2(10),c varchar2(5));


- La cargamos de información

begin
  for i in 1..1000 loop
      insert into at2 values('M', i, 'M');
      insert into at2 values('F', i, 'F');
  end loop;
end;
/


- Creamos un índice sobre la tabla

create index at2_i on at2(a,b,c);


- Analizamos la tabla con el método "FOR ALL COLUMNS SIZE 1" que significa, tomar estadísticas básicas del objeto, sin necesidad de histogramas, datos estadísticos como mínimo, máximo ,cantidad de valores distintos, etc.

exec dbms_stats.gather_table_stats(OWNNAME => NULL, TABNAME => 'at2', 
 CASCADE => TRUE, method_opt => 'FOR ALL COLUMNS SIZE 1');


- Seteamos el trace de la consulta y ejecutamos la query , pero ocupando el segundo campo del índice

SQL- set autotrace on exp stat

SQL> select * from at2 where b='352';

A   B          C
--- ---------- -----
F   352        F
M   352        M


Execution Plan
----------------------------------------------------------
Plan hash value: 1279236776

--------------------------------------------------------------------------
| Id  | Operation        | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT |       |     2 |    16 |     3   (0)| 00:00:01 |
|*  1 |  INDEX SKIP SCAN | AT2_I |     2 |    16 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("B"='352')
       filter("B"='352')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        728  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed


Ciertas cosas que mencionar...

- Aparece claramente en el plan de ejecución lo siguiente "INDEX SKIP SCAN" , pues está es la sentencia que buscábamos, pues el plan de ejecución indica que lo mejor es ocupar el índice AT2_I , a pesar de que ocupemos sólo el segundo campo .

- Hay que tener en cuenta la estadística el valor de "consistent gets" que en este caso es 8 y que representa la cantidad de veces que se obtiene información desde un bloque Oracle que se encuentra en memoria (Buffer Cache)


Ahora bien, si ejecutamos la misma consulta , pero le indicamos que no ocuparemos el índice, pues la cantidad de "consistents gets" sube, por ende no es lo óptimo.. y esto se desprende del FULL SCAN que está haciendo sobre la tabla.

SQL- select /*+ no_index (at2) */ * from at2 where b='352'

A   B          C
--- ---------- -----
M   352        M
F   352        F


Execution Plan
----------------------------------------------------------
Plan hash value: 2725892949

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     2 |    16 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| AT2  |     2 |    16 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("B"='352')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        728  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed



Referencias
[Metalink] : Index Skip Scan Feature [ID 212391.1]
Index Skip Scan Oracle 10g

Espero les sea de utilidad

by Ligarius
26.12.12. 06:17:36. 672 words, 6021 views. Categories: Tuning / Performance ,

Graficar información de crecimiento de tablespaces



Siempre estamos pensando el como obtenemos información de crecimiento de un tablespaces, algo así como para saber mes a mes o semana a semana como ha crecido .


Pues bien, existe una forma muy útil que les paso a comentar...


Lo primero que debemos tener en cuenta es desde que fecha a que fecha queremos generar la información , para ello ocupamos la información de los Snapshots que ha producido nuestra base de datos mediante la siguiente consulta.

select instance_number , snap_id ,
to_char(begin_interval_time,'dd-mm-yyyy hh24:mi:ss') "Intervalo inicio",
to_char(end_interval_time,'dd-mm-yyyy hh24:mi:ss') "Intervalo termino" ,
snap_level
from dba_hist_snapshot
order by snap_id asc


Desde acá debemos obtener los snap_id de inicio y término , para el caso de ejemplo que desarrollamos pues tomaremos el mes completo de Noviembre del 2012.

Además de lo anterior, incorporamos el número del tablespaces, está información la podemos obtener desde la siguiente consulta

select ts# , name from v$tablespace


Ejecutamos la siguiente consulta que trae los datos que necesitamos para saber el crecimiento semana a semana de nuestro tablespaces..

select max(vt.NAME) "Nombre tablespace" ,
to_char(to_date(tb.rtime,'mm-dd-yyyy hh24:mi:ss'),'yyyy-ww') "Fecha de la muestra",
max(round(tb.tablespace_size * dt.block_size/1024/1024/1024,2)) "Tamaño GB",
max(round(tb.tablespace_usedsize * dt.block_size/1024/1024/1024,2)) "Tamaño usado GB"
from SYS.WRH$_TABLESPACE_SPACE_USAGE tb ,
v$tablespace vt ,
dba_tablespaces dt
where vt.TS# = tb.tablespace_id
and vt.NAME = dt.tablespace_name
and vt.ts# = 0
and tb.snap_id <= 123450
and tb.snap_id >= 103947
group by to_char(to_date(tb.rtime,'mm-dd-yyyy hh24:mi:ss'),'yyyy-ww')
order by 3


Ciertas cosas a tener en cuenta :

- Los datos que aparecen en la tabla SYS.WRH$_TABLESPACE_SPACE_USAGE relacionados a espacios , son presentados como número de bloques, por ende hay que realizar la multiplicación con el tamaño del bloque que le corresponde a cada tablespaces.

- En la consulta realizamos el filtro por el número del tablespace, específicamente el campo vt.ts#

- La tabla SYS.WRH$_TABLESPACE_SPACE_USAGE forma parte de la vista dba_hist_tbspc_space_usage , la información de la vista es similar a la información de la tabla , pero tiene otros filtros asociados a los snap_id

- La información del tamaño del tablespace y de su tamaño utilizado se expresa por semanas


Una vez ejecutada la consulta obtenemos los datos para poder armar un gráfico..


Y el gráfico, una vez construído con Excel o hasta con Open Office :) , quedaría así...


Se puede apreciar que por cada semana , se ve en el gráfico el tamaño del tablespace versus el tamaño realmente utilizado, con ello podemos analizar si llevamos a cabo una asignación de espacio, quizás sea conveniente verificar los niveles de fragmentación, también reasignar espacio para tablespaces con mucho espacio libre , etc , etc...

Para tomar medidas hay que estar informado :>>

by Ligarius
20.12.12. 11:14:44. 509 words, 5937 views. Categories: Base de datos ,

Volver a empezar ....



Hace 2 años comenté que me iba a HP muy contento y con ganas de demostrar muchas cosas... claro que lo hice, pero por los avatares de la vida, que siempre cambia :) hoy en día me encuentro en otra empresa , llamada Inmetrics , está empresa de orígen brasileño ya es grande en su país y de a poco se está haciendo un nombre en Chile..

Y bueno .. a ver lo que la vida me tiene deparado... ;)



Empresa Inmetrics


Acá el relato de mi cambio a HP
http://www.oracleyyo.com/index.php/2010/11/03/un-pequeno-cambio-en-la-vida


by Ligarius
17.12.12. 07:07:10. 96 words, 3202 views. Categories: Cosas varias ,

Por fin el 1z0-536 es mío..



Hoy fuí a dar el exámen 1z0-536 Oracle Exadata 11g Essentials y por fin lo pasé...

Después de 2 intentos fallidos..



http://www.oracleyyo.com/index.php/2011/12/26/resultado_exadata

Así que ahora a estudiar RAC 11gr2 y claro, la actualización del exámen de Exadata, pues ya salió la nueva versión .


Y lo más importante, esperar Oracle Database versión 12c, que debiese salir a la luz , en Enero del 2013 :>>


La nueva certificación de Exadata se llama "Oracle Exadata Database Machine Administration, Software Release 11.x" , cerca de 150 preguntas en 3 horas de exámen , es un exámen BETA :P , pero lo voy a comprar para darlo al final de Febrero , más o menos...




¿Cómo queda mi historial de certificaciones?

1.- Certificación : Oracle Exadata 11g : Essentials (OCE 11g Exadata) New
Exámenes rendidos
1z0-054 : Oracle Database 11g : Performance Tuning


2.- Certificación : Oracle Database 11g : Performance Tuning Certified Expert (OCE 11g Tuning)
Exámenes rendidos
1z0-054 : Oracle Database 11g : Performance Tuning

3.- Certificación : Oracle Database 10g : Managing Oracle on Linux Certified Expert (OCE 10g Linux)
Exámenes rendidos
1z0-046 : Oracle Database 10g : Managing Oracle on Linux for Database Administrators

4.- Certificación : Oracle Database 10g : Real Application Cluster Administrator Certified Expert (OCE 10g RAC)
Exámenes rendidos
1z0-048 : Oracle Database 10gR2 : Administering RAC

5.- Certificación : Database 11g Administrator Certified Professional (OCP 11g DBA)
Exámenes rendidos
1z0-050 : Oracle Database 11g : New Features for Administrators

6.- Certificación : Oracle Database : SQL Certified Expert (OCE 10g SQL)
Exámenes rendidos
1z0-047 : Oracle Database SQL Expert Exam

7.- Certificación : Database 10g Administrator Certified Professional (OCP 10g DBA)
Exámenes rendidos
1z0-043 : Oracle Database 10g : Administration II

8.- Certificación : Database 10g Administrator Certified Associated (OCA 10g DBA)
Exámenes rendidos
1z0-042 : Oracle Database 10g : Administration I

9.- Certificación : Oracle Forms Developer Certified Professional (OCP Forms 6i)
Exámenes rendidos
1z0-131 : Oracle Forms Build Internet Applications I
1z0-132 : Oracle Forms Build Internet Applications I

10.- Certificación : Oracle Pl/Sql Developer Certified Associate (OCA SQL Pl/Sql 8i)
Exámenes rendidos
1z0-101 : Develop Pl/Sql Program Unit
1z0-001 : Introduction to Oracle : SQL and Pl/Sql

by Ligarius
28.11.12. 10:16:43. 375 words, 5114 views. Categories: Certificaciones, Oracle Exadata ,

<< 1 ... 9 10 11 12 13 14 15 16 17 18 19 ... 44 >>