Usuário com melhor resposta
Quantas vezes a tabela foi acessada

Pergunta
-
Boa noite,
Existe alguma maneira de saber quantas vezes uma determinada tabela foi acessada?
Obrigado!!segunda-feira, 13 de julho de 2009 00:42
Respostas
-
Bom Dia,
No SQL Server 2005 é complicado mas é possível. Na parte de consultas você pode pesquisar na sys.dm_db_index_usage_stats para verificar a quantidade de Seeks e Scans de cada índice da tabela. Na parte de INSERTs, UPDATEs e DELETEs só mesmo com o uso de triggers. Outra possibilidade é o uso do SQL Trace, mas dependendo do acesso essa saída pode provocar um overhead indesejável.Existem ferramentas de terceiros especialistas em estatísticas de dados e acessos e servem exatamente para esse tipo de métrica. No SQL Server 2008 podemos fazer esse controle de forma nativa através do SQL Audit.
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comPivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 14 de julho de 2009 00:29
- Marcado como Resposta sergioduarte terça-feira, 14 de julho de 2009 00:36
terça-feira, 14 de julho de 2009 00:29
Todas as Respostas
-
Ola Sergio.
Explique melhor sua necessidade..
Quantas vezes = qnt de insert ou update?Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!segunda-feira, 13 de julho de 2009 12:18Moderador -
Olá, boa noite
Quero saber quantas vezes a tabela foi referenciada por queries, para ter uma noção do uso em relação as consultas; se fosse possível saber também a quantidade de inserts e updates também seria ótimo
Valeu.terça-feira, 14 de julho de 2009 00:25 -
Bom Dia,
No SQL Server 2005 é complicado mas é possível. Na parte de consultas você pode pesquisar na sys.dm_db_index_usage_stats para verificar a quantidade de Seeks e Scans de cada índice da tabela. Na parte de INSERTs, UPDATEs e DELETEs só mesmo com o uso de triggers. Outra possibilidade é o uso do SQL Trace, mas dependendo do acesso essa saída pode provocar um overhead indesejável.Existem ferramentas de terceiros especialistas em estatísticas de dados e acessos e servem exatamente para esse tipo de métrica. No SQL Server 2008 podemos fazer esse controle de forma nativa através do SQL Audit.
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comPivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 14 de julho de 2009 00:29
- Marcado como Resposta sergioduarte terça-feira, 14 de julho de 2009 00:36
terça-feira, 14 de julho de 2009 00:29 -
Bom Dia,
Segue um método um pouco rudimentar... Não é preciso, mas dá pra se ter uma idéia...USE TEMPDB GO -- Cria uma tabela CREATE TABLE tbl (CODIGO INT, NOME CHAR(1000), Tipo INT) -- Insere 10.000 registros DECLARE @i INT SET @i = 1 WHILE @i < 10000 BEGIN INSERT INTO tbl VALUES (@i, REPLICATE('a',1000), @i % 1000) SET @i = @i + 1 END -- Cria dois índices CREATE CLUSTERED INDEX IDX ON tbl (Codigo) CREATE NONCLUSTERED INDEX IX ON tbl (Tipo) -- Verifica quantas vezes os índices foram "tocados" -- As colunas User_Seeks e User_Scans, User_LookUps e User_Updates estão em branco SELECT * FROM sys.dm_db_index_usage_stats WHERE Database_Id = DB_ID() AND Object_ID = OBJECT_ID('tbl') -- Faz uma leitura dos 10 primeiros registros SELECT * FROM tbl WHERE Codigo <= 10 -- A coluna User_Seeks aumenta o Seek em 1, pois, a consulta anterior fez uma pesquisa SELECT * FROM sys.dm_db_index_usage_stats WHERE Database_Id = DB_ID() AND Object_ID = OBJECT_ID('tbl') -- Seleciona todos os registros com o tipo igual a 1 SELECT * FROM tbl WHERE Tipo = 1 -- Aumenta o User Seeks do Index_ID = 2 e o Look Up do Clustered Index SELECT * FROM sys.dm_db_index_usage_stats WHERE Database_Id = DB_ID() AND Object_ID = OBJECT_ID('tbl') -- Deleta 100 registros DELETE TOP (100) FROM tbl -- Aumenta o User_Updates dos dois índices SELECT * FROM sys.dm_db_index_usage_stats WHERE Database_Id = DB_ID() AND Object_ID = OBJECT_ID('tbl')
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comPivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 14 de julho de 2009 12:34
terça-feira, 14 de julho de 2009 12:34 -
Gustavo,
Eu também tive a mesma linha de pensamento, mas, e se a consulta realizar um table scan? Existe uma forma de pegar isso no 2005?
Abraços
Demétrio Silvaterça-feira, 14 de julho de 2009 12:41 -
Olá Demétrio,
Se a tabela for clusterizada, o Index Scan do Clustered Index irá aumentar. Se a tabela não for clusterizada, haverá uma entrada caracterizando-a como HEAP TABLE (Index_ID = 0).
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comPivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry
Classifique as respostas. O seu feedback é imprescindívelterça-feira, 14 de julho de 2009 14:21 -
Entendi.
No caso, a única difrença seria o index_id = 0
Valeu.
Demétrio Silvaterça-feira, 14 de julho de 2009 15:20