Estadisticas Automaticas

08/11/2005 - 14:05 por Costilla Jorge | Informe spam
Estimados:

Queria saber si es normal la siguiente situacion:

Tengo habilitado Estadisticas Automaticas en las opciones de la base de
datos.
Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me dice
que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
regenero el indice).
Esto no tendria que se automatico?

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
08/11/2005 - 14:34 | Informe spam
Y lo es, pero si los datos no han cambiado significativamente, el
trabajo que se encarga de actualizar las estadísticas no se ejecuta


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Costilla Jorge" escribió en el mensaje
news:
Estimados:

Queria saber si es normal la siguiente situacion:

Tengo habilitado Estadisticas Automaticas en las opciones de la base de
datos.
Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me


dice
que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
regenero el indice).
Esto no tendria que se automatico?


Respuesta Responder a este mensaje
#2 Carlos Sacristán
08/11/2005 - 14:34 | Informe spam
Se me olvidaba decirte que puedes echar un vistazo al tema 'Información
estadística' en los BOL.


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Costilla Jorge" escribió en el mensaje
news:
Estimados:

Queria saber si es normal la siguiente situacion:

Tengo habilitado Estadisticas Automaticas en las opciones de la base de
datos.
Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me


dice
que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
regenero el indice).
Esto no tendria que se automatico?


Respuesta Responder a este mensaje
#3 Costilla Jorge
08/11/2005 - 15:54 | Informe spam
Estoy chequeando tablas que son modificadas constantemente y veo que la
ultima actulizacion no es al dia de hoy. Sigue la fecha de creacion de
indice.

"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
Y lo es, pero si los datos no han cambiado significativamente, el
trabajo que se encarga de actualizar las estadísticas no se ejecuta


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Costilla Jorge" escribió en el mensaje
news:
Estimados:

Queria saber si es normal la siguiente situacion:

Tengo habilitado Estadisticas Automaticas en las opciones de la base de
datos.
Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me


dice
que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
regenero el indice).
Esto no tendria que se automatico?






Respuesta Responder a este mensaje
#4 Alejandro Mesa
08/11/2005 - 19:28 | Informe spam
Costilla Jorge,

Puede ser que el optimizador de queries de sql server no haya necesitado
esas estadisticas y por tanto no se han actualizado. SQL Server auto update
las estadisticas basado en la cantidad de filas modificadas (insert, update,
delete), este valor se ve en la columna rowmodctr de la tabla sysindexes en
el indice 0 (heap) o 1 (si la tabla tiene clustered index) y cuando el
optimizador de queries las necesitas.

Fijate en este script. En el creo una tabla, luego creo tres indices, uno
clustered por orderid y los otros nonclustered por employeeid y por
customerid. Despues de creados los indices, el valor de rowmodctr es 0. Luego
actualizo la columna employeeid y veremos que el valor de rowmodctr se
incremento, pero las estadisticas siguen igual. Luego hacemos una "select"
que hace uso del indice por employeeid y luego vemos que las estadisticas
fueron actualizadas para ese indice. Lo mismo pasaria si ejecutas
sp_updatestats o si usas "update statistics orders_1
ix_nc_orders_1_employeeid". Lo mismo pasa con el otro indice nonclustered que
cree por customerid, fijate que no se actualizan sus estadisticas hasta que
el optimizador de queries lo necesita.

Se recomienda que las estadisticas se actualizen diariamente, al menos que
la carga sea mucha para el servidor.

use northwind
go

select *
into orders_1
from orders
go

create unique clustered index ix_u_c_orders_1_orderid on orders_1(orderid asc)
go

create nonclustered index ix_nc_orders_1_employeeid on orders_1(employeeid)
go

create nonclustered index ix_nc_orders_1_customerid on orders_1(customerid)
go

exec sp_helpindex 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

update orders_1
set employeeid = 8
where employeeid < 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

delete orders_1
where orderid > 10250
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
customerid = 'hanar'
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

drop table orders_1
go


AMB

"Costilla Jorge" wrote:

Estoy chequeando tablas que son modificadas constantemente y veo que la
ultima actulizacion no es al dia de hoy. Sigue la fecha de creacion de
indice.

"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
> Y lo es, pero si los datos no han cambiado significativamente, el
> trabajo que se encarga de actualizar las estadísticas no se ejecuta
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Costilla Jorge" escribió en el mensaje
> news:
>> Estimados:
>>
>> Queria saber si es normal la siguiente situacion:
>>
>> Tengo habilitado Estadisticas Automaticas en las opciones de la base de
>> datos.
>> Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me
> dice
>> que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
>> regenero el indice).
>> Esto no tendria que se automatico?
>>
>>
>
>



Respuesta Responder a este mensaje
#5 Alejandro Mesa
08/11/2005 - 19:58 | Informe spam
Se me olvido incorporar "dbcc show_statistics" para mas claridad.

use northwind
go

select *
into orders_1
from orders
go

create unique clustered index ix_u_c_orders_1_orderid on orders_1(orderid asc)
go

create nonclustered index ix_nc_orders_1_employeeid on orders_1(employeeid)
go

create nonclustered index ix_nc_orders_1_customerid on orders_1(customerid)
go

exec sp_helpindex 'orders_1'
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

update orders_1
set employeeid = 8
where employeeid < 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

waitfor delay '00:01:00'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

delete orders_1
where orderid > 10250
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

waitfor delay '00:01:00'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

waitfor delay '00:01:00'
go

select top 5
*
from
orders_1
where
customerid = 'hanar'
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

waitfor delay '00:01:00'
go

update statistics orders_1 ix_nc_orders_1_employeeid
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

drop table orders_1
go


AMB


"Alejandro Mesa" wrote:

Costilla Jorge,

Puede ser que el optimizador de queries de sql server no haya necesitado
esas estadisticas y por tanto no se han actualizado. SQL Server auto update
las estadisticas basado en la cantidad de filas modificadas (insert, update,
delete), este valor se ve en la columna rowmodctr de la tabla sysindexes en
el indice 0 (heap) o 1 (si la tabla tiene clustered index) y cuando el
optimizador de queries las necesitas.

Fijate en este script. En el creo una tabla, luego creo tres indices, uno
clustered por orderid y los otros nonclustered por employeeid y por
customerid. Despues de creados los indices, el valor de rowmodctr es 0. Luego
actualizo la columna employeeid y veremos que el valor de rowmodctr se
incremento, pero las estadisticas siguen igual. Luego hacemos una "select"
que hace uso del indice por employeeid y luego vemos que las estadisticas
fueron actualizadas para ese indice. Lo mismo pasaria si ejecutas
sp_updatestats o si usas "update statistics orders_1
ix_nc_orders_1_employeeid". Lo mismo pasa con el otro indice nonclustered que
cree por customerid, fijate que no se actualizan sus estadisticas hasta que
el optimizador de queries lo necesita.

Se recomienda que las estadisticas se actualizen diariamente, al menos que
la carga sea mucha para el servidor.

use northwind
go

select *
into orders_1
from orders
go

create unique clustered index ix_u_c_orders_1_orderid on orders_1(orderid asc)
go

create nonclustered index ix_nc_orders_1_employeeid on orders_1(employeeid)
go

create nonclustered index ix_nc_orders_1_customerid on orders_1(customerid)
go

exec sp_helpindex 'orders_1'
go

dbcc show_statistics (orders_1, ix_nc_orders_1_employeeid)
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

update orders_1
set employeeid = 8
where employeeid < 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

delete orders_1
where orderid > 10250
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
employeeid = 8
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

select top 5
*
from
orders_1
where
customerid = 'hanar'
go

select
object_name([id]),
[name],
Indid,
rowcnt,
rowmodctr
from
sysindexes
where
object_name([id]) = 'orders_1'
go

drop table orders_1
go


AMB

"Costilla Jorge" wrote:

> Estoy chequeando tablas que son modificadas constantemente y veo que la
> ultima actulizacion no es al dia de hoy. Sigue la fecha de creacion de
> indice.
>
> "Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
> news:
> > Y lo es, pero si los datos no han cambiado significativamente, el
> > trabajo que se encarga de actualizar las estadísticas no se ejecuta
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > "Costilla Jorge" escribió en el mensaje
> > news:
> >> Estimados:
> >>
> >> Queria saber si es normal la siguiente situacion:
> >>
> >> Tengo habilitado Estadisticas Automaticas en las opciones de la base de
> >> datos.
> >> Al correr el comando DBCC SHOW_STATISTICS sobre uno de los indices, me
> > dice
> >> que la ultima vez que se actualizo fue hace como 20 dias atras (cuando se
> >> regenero el indice).
> >> Esto no tendria que se automatico?
> >>
> >>
> >
> >
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida