Tengo una tabla en Oracle db, que consigue un par de millones de filas nuevas cada mes. Cada fila tiene una columna que indica la fecha en la que fue creado.

Me gustaría realizar una consulta que obtiene el espacio de disco crecimiento en los últimos 6 meses. En otras palabras, el resultado sería una tabla con dos columnas, en la que cada fila tiene el nombre del mes y el espacio en disco usado durante ese mes.

Gracias,

InformationsquelleAutor wsb3383 | 2010-09-17

2 Comentarios

  1. 4

    Este artículo presenta un método de obtención de la tabla de crecimiento: http://www.dba-oracle.com/t_table_growth_reports.htm

    column "Percent of Total Disk Usage" justify right format 999.99
    column "Space Used (MB)" justify right format 9,999,999.99
    column "Total Object Size (MB)" justify right format 9,999,999.99
    set linesize 150
    set pages 80
    set feedback off
    
    select * from (select to_char(end_interval_time, 'MM/DD/YY') mydate, sum(space_used_delta) / 1024 / 1024 "Space used (MB)", avg(c.bytes) / 1024 / 1024 "Total Object Size (MB)", 
    round(sum(space_used_delta) / sum(c.bytes) * 100, 2) "Percent of Total Disk Usage"
    from 
       dba_hist_snapshot sn, 
       dba_hist_seg_stat a, 
       dba_objects b, 
       dba_segments c
    where begin_interval_time > trunc(sysdate) - &days_back
    and sn.snap_id = a.snap_id
    and b.object_id = a.obj#
    and b.owner = c.owner
    and b.object_name = c.segment_name
    and c.segment_name = '&segment_name'
    group by to_char(end_interval_time, 'MM/YY'))
    order by to_date(mydate, 'MM/YY');
  2. 2

    DBA_TABLES (o el equivalente) da una AVG_ROW_LEN, así que usted podría simplemente multiplicar por el número de filas creado por mes.

    Las salvedades a que se parte del supuesto de que la longitud de la fila de nuevas filas es similar a la de las filas existentes. Si tienes un montón de datos históricos que fueron los ‘pequeños’ (por ejemplo, el 50 bytes), pero las nuevas filas son más grandes (150 bytes), a continuación, las estimaciones serán demasiado bajos.

    También, cómo hacer las actualizaciones de la figura en las cosas ? Si una fila comienza en 50 bytes y crece a 150 por dos meses más tarde, ¿cómo dar cuenta de los 100 bytes ?

    Finalmente, las tablas no crecen para cada fila de inserción. Cada tan a menudo el espacio asignado se llenan y se va a ir y asignar otro fragmento. Dependiendo de los valores de la tabla, que el siguiente fragmento puede ser, por ejemplo, el 50% de la existente en el tamaño de la tabla. Por lo que quizás no físicamente crecer durante tres meses y luego tiene un enorme salto, luego no crecer por otros seis meses.

    • Uso DBA_SEGMENTS en lugar de DBA_TABLES. Que le dirá exactamente cuánto espacio de un objeto está utilizando en el disco, y no depende de las estimaciones o de estadísticas.
    • Recuerde, una tabla de particiones que DBA_TABLES no cuenta. Como jonearles sugiere, DBA_SEGMENTS y cuenta para las particiones, también, si desea incluir objeto binario columnas (BLOB, CLOB) DBA_LOBS también porque Lob no se almacenan en línea en su propio segmento.
    • Que yo sepa AVG_ROW_LEN es un optimizador de la estadística, y no una medida real. Quiero decir, con los permisos apropiados, puede sobrescribir su valor. Consulte download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/…

Dejar respuesta

Please enter your comment!
Please enter your name here