terça-feira, 6 de abril de 2010

Volume de IO por Banco de Dados

Versões do SQL Server: 2005 e 2008.

Após um longo período sem publicar posts estou de volta... Venho publicando vários posts extensos que demandavam muito tempo de pesquisa e escrita, resultando neste longo período de inatividade. Resolvi publicar posts menores, mais simples, abortando temas relacionados ao meu dia a dia como consultor.

Uma instância do SQL Server pode ter vários bancos de dados, seria muito útil para o DBA ter informações estatísticas da atividade de cada banco. Um modo simples de obter estatísticas de IO é o uso da função dinâmica de sistema sys.dm_io_virtual_file_stats. Rode o script abaixo no seu servidor:

with IO_por_Banco as (
select db_name(database_id) as Banco,
cast(sum(num_of_bytes_read + num_of_bytes_written) / 1048576 as decimal(12,2))

as IO_Total_MB,
cast(sum(num_of_bytes_read) / 1048576 as decimal(12,2)) as IO_Leitura_MB,
cast(sum(num_of_bytes_written) / 1048576 as decimal(12,2)) as IO_Escrita_MB
from sys.dm_io_virtual_file_stats(NULL,NULL) as dm
group by database_id)

select row_number() over (order by IO_Total_MB DESC) as Ranking,
Banco, IO_Leitura_MB, IO_Escrita_MB,
IO_Total_MB, cast(IO_Total_MB / sum(IO_Total_MB) over() * 100 as decimal(5,2))

as Percentual
from IO_por_Banco
order by Ranking

O resultado traz o ranking por volume de IO do maior para o menor. O DBA pode utilizar estas informações para planejar a realocação de bancos entre servidores, ou em um projeto de consolidação.

Até o próximo post,
Landry.

Um comentário:

Unknown disse...

Olá, vc pode por gentileza me passar como podemos nos comunicar, estou precisando de uma ajuda em um cliente meu para recuperar um arquivo de duas semanas atras. obrigada! Tarcilla .. tarcillab@hotmail.com