Optimizacion Indices

31/03/2005 - 00:15 por Natacha | Informe spam
Hola

Por favor resuelvanme la siguiente inquietud:

Tengo una tabla que es el centro de todo un aplicativo transaccional y en
ella confluyen mas o menos 100 usuarios concurrentes, esta tabla tiene en
total 1 millon de registros.
Durante el dia esta tabla solo tiene procesos de Update para varios
registros (Aprox 50000), en la noche se le borran e insertan masivamente
tambien varios registros (Aprox 30000).

Es conveniente que una vez se ejecute el proceso que inserta y borra
registros, genere una sentencia que borre los indices de esta tabla y los
vuelva a crear??

Con agendar el proceso de actualizacion de estadisticas es suficiente y mas
bien no me pongo a borrar y reconstruir los indices todas las noches??

Muchas gracias a todos

Preguntas similare

Leer las respuestas

#1 MAXI
31/03/2005 - 00:36 | Informe spam
Hola, no veo porque debas borrar los indices, solo con reindexarlos o la
actualizacion de estadisticas alcanza



Maxi
Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)



"Natacha" escribió en el mensaje
news:
Hola

Por favor resuelvanme la siguiente inquietud:

Tengo una tabla que es el centro de todo un aplicativo transaccional y en
ella confluyen mas o menos 100 usuarios concurrentes, esta tabla tiene en
total 1 millon de registros.
Durante el dia esta tabla solo tiene procesos de Update para varios
registros (Aprox 50000), en la noche se le borran e insertan masivamente
tambien varios registros (Aprox 30000).

Es conveniente que una vez se ejecute el proceso que inserta y borra
registros, genere una sentencia que borre los indices de esta tabla y los
vuelva a crear??

Con agendar el proceso de actualizacion de estadisticas es suficiente y
mas
bien no me pongo a borrar y reconstruir los indices todas las noches??

Muchas gracias a todos






Respuesta Responder a este mensaje
#2 Isaías
31/03/2005 - 00:41 | Informe spam
En mi pobre experiencia, si hay muchos UPDATE's y muchos
DELETE's, yo haria una re-generacion de INDICES todas las
noches (madrugadas).
Respuesta Responder a este mensaje
#3 Alejandro Mesa
31/03/2005 - 15:21 | Informe spam
Natacha,

Como dice Maxi, con actualizar las estadisticas seria suficiente, pero (y
aqui coincido con Isaias) debido a la cantidad de registros que se borran y
añaden, asi como los que se actualizan, los indices pueden fragmentarse con
el tiempo. Puedes usar el comando DBCC SHOWCONTIG para ver el nivel de
defragmentacion (Ve los libros en linea, ademas encontraras un script que
analiza el nivel de defragmentacion y en base a cierto valor ejecuta DBCC
INDEXDEFRAG, este escript lo puedes adaptar a tus necesidades y correrlo
despues de tus procesos y de actualizar las estadisticas) y puedes usar DBCC
INDEXDEFRAG para defragmentarlos. Claro esta, que si los reindexas usando
DBCC DBREINDEX pues entonces no necesitarias lo anterior pero es bueno
saberlo pues DBCC INDEXDEFRAG, a diferencia de DBCC DBREINDEX, puede ser
usado en linea sin preocuparte de que este bloqueara algun proceso.


AMB

"Natacha" wrote:

Hola

Por favor resuelvanme la siguiente inquietud:

Tengo una tabla que es el centro de todo un aplicativo transaccional y en
ella confluyen mas o menos 100 usuarios concurrentes, esta tabla tiene en
total 1 millon de registros.
Durante el dia esta tabla solo tiene procesos de Update para varios
registros (Aprox 50000), en la noche se le borran e insertan masivamente
tambien varios registros (Aprox 30000).

Es conveniente que una vez se ejecute el proceso que inserta y borra
registros, genere una sentencia que borre los indices de esta tabla y los
vuelva a crear??

Con agendar el proceso de actualizacion de estadisticas es suficiente y mas
bien no me pongo a borrar y reconstruir los indices todas las noches??

Muchas gracias a todos






Respuesta Responder a este mensaje
#4 Natacha
31/03/2005 - 18:47 | Informe spam
Mil gracias

A todos por las respuestas.

Me queda perfectamente claro,



"Natacha" escribió:

Hola

Por favor resuelvanme la siguiente inquietud:

Tengo una tabla que es el centro de todo un aplicativo transaccional y en
ella confluyen mas o menos 100 usuarios concurrentes, esta tabla tiene en
total 1 millon de registros.
Durante el dia esta tabla solo tiene procesos de Update para varios
registros (Aprox 50000), en la noche se le borran e insertan masivamente
tambien varios registros (Aprox 30000).

Es conveniente que una vez se ejecute el proceso que inserta y borra
registros, genere una sentencia que borre los indices de esta tabla y los
vuelva a crear??

Con agendar el proceso de actualizacion de estadisticas es suficiente y mas
bien no me pongo a borrar y reconstruir los indices todas las noches??

Muchas gracias a todos






Respuesta Responder a este mensaje
#5 Víctor
04/04/2005 - 13:32 | Informe spam
Buenas.

He pobrado el comande éste con all_index, y me ha devuelto lo siguiente:

DBCC SHOWCONTIG scanning 'ic_numaco' table...
Table: 'ic_numaco' (219915905); index ID: 1, database ID: 10
TABLE level scan performed.
- Pages Scanned: 10603
- Extents Scanned..: 1335
- Extent Switches..: 1334
- Avg. Pages per Extent: 7.9
- Scan Density [Best Count:Actual Count]...: 99.33% [1326:1335]
- Logical Scan Fragmentation ..: 9.67%
- Extent Scan Fragmentation ...: 15.06%
- Avg. Bytes Free per Page.: 5.2
- Avg. Page Density (full).: 99.94%
DBCC SHOWCONTIG scanning 'ic_numaco' table...
Table: 'ic_numaco' (219915905); index ID: 2, database ID: 10
LEAF level scan performed.
- Pages Scanned: 6233
- Extents Scanned..: 784
- Extent Switches..: 783
- Avg. Pages per Extent: 8.0
- Scan Density [Best Count:Actual Count]...: 99.49% [780:784]
- Logical Scan Fragmentation ..: 12.39%
- Extent Scan Fragmentation ...: 9.06%
- Avg. Bytes Free per Page.: 16.8
- Avg. Page Density (full).: 99.79%
DBCC execution completed. If DBCC printed error messages, contact your
system administrator.

Esta tabla tiene un total de 2522857 registros.

¿Me podeis explciar lo que me ha devuelto? Esta tabla se actualiza (UPDATES)
unas 600 veces cada día (es una tabla de 8 campos, y sólo se actualizan 3
campos).

"Alejandro Mesa" escribió en el
mensaje news:
Natacha,

Como dice Maxi, con actualizar las estadisticas seria suficiente, pero (y
aqui coincido con Isaias) debido a la cantidad de registros que se borran


y
añaden, asi como los que se actualizan, los indices pueden fragmentarse


con
el tiempo. Puedes usar el comando DBCC SHOWCONTIG para ver el nivel de
defragmentacion (Ve los libros en linea, ademas encontraras un script que
analiza el nivel de defragmentacion y en base a cierto valor ejecuta DBCC
INDEXDEFRAG, este escript lo puedes adaptar a tus necesidades y correrlo
despues de tus procesos y de actualizar las estadisticas) y puedes usar


DBCC
INDEXDEFRAG para defragmentarlos. Claro esta, que si los reindexas usando
DBCC DBREINDEX pues entonces no necesitarias lo anterior pero es bueno
saberlo pues DBCC INDEXDEFRAG, a diferencia de DBCC DBREINDEX, puede ser
usado en linea sin preocuparte de que este bloqueara algun proceso.


AMB

"Natacha" wrote:

> Hola
>
> Por favor resuelvanme la siguiente inquietud:
>
> Tengo una tabla que es el centro de todo un aplicativo transaccional y


en
> ella confluyen mas o menos 100 usuarios concurrentes, esta tabla tiene


en
> total 1 millon de registros.
> Durante el dia esta tabla solo tiene procesos de Update para varios
> registros (Aprox 50000), en la noche se le borran e insertan masivamente
> tambien varios registros (Aprox 30000).
>
> Es conveniente que una vez se ejecute el proceso que inserta y borra
> registros, genere una sentencia que borre los indices de esta tabla y


los
> vuelva a crear??
>
> Con agendar el proceso de actualizacion de estadisticas es suficiente y


mas
> bien no me pongo a borrar y reconstruir los indices todas las noches??
>
> Muchas gracias a todos
>
>
>
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida