Pessoal, boa tarde.
Final de Ano chegando, todos em férias, festas e procurando descansar para recarregar as baterias para o próximo ano.
Muito bem, passei os últimos dias garimpando um pouco os meus Scripts e encontrei uma das mais dinâmicas relação de códigos que podem ajudar, na obtenção de informações sobre o seu Servidor SQL Server, Instância SQL Server, Banco de Dados, Transações, Visões de Sistema, Funções de Sistema, enfim, conseguir descobrir o monitorar a vida do seu Microsoft SQL Server.
Para fazer um pequeno suspense não vou revelar o conteúdo desta relação, segue abaixo os Scripts de acordo com a sua funcionalidade:
1 – Script – Monitoramento de Transações Ativas:
SELECT st.session_id,
DB_NAME(dt.database_id) AS database_name,
CASE WHEN dt.database_transaction_begin_time IS NULL THEN ‘read-only’
ELSE ‘read-write’
END AS transaction_state ,
dt.database_transaction_begin_time AS read_write_start_time,
dt.database_transaction_log_record_count,
dt.database_transaction_log_bytes_used
FROM sys.dm_tran_session_transactions AS st INNER JOIN sys.dm_tran_database_transactions AS dt
ON st.transaction_id = dt.transaction_id
ORDER BY st.session_id, database_name
2 – Script – Estatísticas de Leitura e Escrita de Índices em Todos os Bancos de Dados:
SELECT OBJECT_NAME(s.[object_id]) AS [ObjectName],
i.name AS [IndexName],
i.index_id,
user_seeks + user_scans + user_lookups AS [Reads],
user_updates AS [Writes],
i.type_desc AS [IndexType],
i.fill_factor AS [FillFactor]
FROM sys.dm_db_index_usage_stats AS s INNER JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id]
WHERE OBJECTPROPERTY(s.[object_id], ‘IsUserTable’) = 1
AND i.index_id = s.index_id
AND s.database_id = DB_ID()
ORDER BY OBJECT_NAME(s.[object_id]), writes DESC, reads DESC ;
3 – Script – Lista de Índices não utilizados no Banco de Dados Corrente:
SELECT OBJECT_NAME(i.[object_id]) AS [Table Name],
i.name
FROM sys.indexes AS I INNER JOIN sys.objects AS o
ON i.[object_id] = o.[object_id]
WHERE i.index_id NOT IN (SELECT s.index_id FROM sys.dm_db_index_usage_stats AS s
WHERE s.[object_id] = i.[object_id]
AND i.index_id = s.index_id
AND database_id = DB_ID())
AND o.[type] = ‘U’
ORDER BY OBJECT_NAME(i.[object_id]) ASC ;
4 – Script – Lista de Tabelas, Índices e quantidade de Registros:
SELECT OBJECT_NAME(ps.[object_id]) AS [TableName],
i.name AS [IndexName],
SUM(ps.row_count) AS [RowCount]
FROM sys.dm_db_partition_stats AS ps INNER JOIN sys.indexes AS i
ON i.[object_id] = ps.[object_id]
AND i.index_id = ps.index_id
WHERE i.type_desc IN ( ‘CLUSTERED’, ‘HEAP’ )
AND i.[object_id] > 100
AND OBJECT_SCHEMA_NAME(ps.[object_id]) <> ‘sys’
GROUP BY ps.[object_id], i.name
ORDER BY SUM(ps.row_count) DESC ;
5 – Script – Obtendo a quantidade de Espaço Livre no Banco de Dados de Sistema – TEMPDB:
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count) * 1.0 / 128 ) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
6 – Script – Resumo de Informações sobre utilização do Banco de Dados de Sistema – TEMPDB:
SELECT SUM(user_object_reserved_page_count) * 8.192 AS [UserObjectsKB] ,
SUM(internal_object_reserved_page_count) * 8.192 AS [InternalObjectsKB] ,
SUM(version_store_reserved_page_count) * 8.192 AS [VersonStoreKB] ,
SUM(unallocated_extent_page_count) * 8.192 AS [FreeSpaceKB]
FROM sys.dm_db_file_space_usage;
7 – Script – Lista de Requisições pendentes de I/O por arquivo de banco de dados:
SELECT DB_NAME(mf.database_id) AS [Database] ,
mf.physical_name ,
r.io_pending ,
r.io_pending_ms_ticks ,
r.io_type ,
fs.num_of_reads ,
fs.num_of_writes
FROM sys.dm_io_pending_io_requests AS r INNER JOIN sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
ON r.io_handle = fs.file_handle
INNER JOIN sys.master_files AS mf
ON fs.database_id = mf.database_id
AND fs.file_id = mf.file_id
ORDER BY r.io_pending, r.io_pending_ms_ticks DESC;
8 – Script – Total de tempo de espera em milisegundos utilizado pelos processadores disponíveis para o SQL Server:
SELECT CAST(100.0 * SUM(signal_wait_time_ms) / SUM(wait_time_ms) AS NUMERIC(20,2)) AS [%signal (cpu) waits] ,
CAST(100.0 * SUM(wait_time_ms – signal_wait_time_ms) / SUM(wait_time_ms) AS NUMERIC(20, 2)) AS [%resource waits]
FROM sys.dm_os_wait_stats;
** Quando os valores apresentados pela coluna %Signal CPU Waits estiver elevado poderá representar Pressão de processamento sobre os CPUs.
——————————————————————————————————————————————————————————————————————-
Pois bem pessoal, estou encerramento mais este Short Script, espero que todos possam ter gostado e que estes códigos servim para ajudar no seu dia á dia.
Mais uma vez obrigado pelo grande crescimento na audiência do meu Blog que cresceu de forma grandiosa.
Um grande abraço para todos, nos encontramos em breve.
Feliz 2013 para todos.
Pingback: Material de Apoio – SQL Server | Alex Souza
what a great article! it’s really informative and innovative. keep us posted with new updates. it’s was really valuable. thanks a lot!! lista de email lista de email lista de email lista de email lista de email
i’m sorry but i think you should improve the organization of the website. lista de email lista de email lista de email lista de email lista de email
Thanks.