Arquivo

Archive for the ‘Troubleshooting’ Category

Dicas para um DBA Iniciante – Verificar tamanho atual de todos os bancos de dados da instância

Fala galera, tudo bem?

Hoje quero compartilhar um script bem simples e que utilizo muito no checklist semanal executado nos clientes da Vita Database Solutions e que permite visualizar o tamanho atual de todos os bancos de dados existentes em uma instância do SQL Server:


SELECT
[Database Name] = DB_NAME(database_id),
[Type] = CASE WHEN Type_Desc = 'ROWS' THEN 'Data File(s)'
WHEN Type_Desc = 'LOG' THEN 'Log File(s)'
ELSE Type_Desc END,
[Size in MB] = CAST( ((SUM(Size)* 8) / 1024.0) AS DECIMAL(18,2) )
FROM
sys.master_files
GROUP BY
GROUPING SETS
(
(DB_NAME(database_id), Type_Desc),
(DB_NAME(database_id))

)
ORDER BY
DB_NAME(database_id),
Type_Desc DESC

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Anúncios

Dicas para um DBA Iniciante – Derrubar sessões inativas do servidor de banco de dados

Fala galera, tudo bem?

Recentemente passei por um cenário bem curioso em um dos clientes que presto suporte e quero compartilhar com vocês a solução que utilizei na resolução desse problema.

O cliente em questão possuia um grande número de conexões inativas abertas na instância de banco de dados SQL Server e que causavam problemas no processos executados pelo ERP devido ao limite de usuários simultâneos que podiam utilizar o sistema.

Para resolver essa situação utilizei um script que verifica todas as sessões em estado de sleeping por mais de 24 horas e executa o processo de kill em cada uma delas:


DECLARE @user INT

DECLARE CursorSessoes CURSOR FAST_FORWARD
FOR
SELECT
[SPID]
FROM
[master].dbo.sysprocesses (NOLOCK)
WHERE
--ignorar sessões de sistema
spid>50
AND
--somente sessões com o status de sleeping
[status]='sleeping'
AND
--sessões que estejam em sleeping por mais de 24 horas
DATEDIFF(HOUR,last_batch,GETDATE())>=24
AND
--ignorar a sessão atual
spid<>@@spid

OPEN CursorSessoes

FETCH NEXT FROM CursorSessoes INTO @user

WHILE (@@FETCH_STATUS=0)
BEGIN
PRINT 'Killing '+CONVERT(VARCHAR,@user)
EXEC('KILL '+@user)
FETCH NEXT FROM CursorSessoes INTO @user
END
CLOSE CursorSessoes
DEALLOCATE CursorSessoes
GO

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Be a DataMaster – Aula 4 – Monitorando o workload do servidor de banco de dados

Fala galera, tudo bem?

Já está disponível a gravação da nossa última aula do treinamento BE A DATAMASTER!!!

Nesta aula discutimos algumas das ferramentas de monitoração disponíveis para utilizarmos em um ambiente de banco de dados SQL Server.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Dicas para um DBA Iniciante – Encontrando HeadBlockers e resolvendo bloqueios

Fala galera, tudo bem?

No vídeo de hoje quero demonstrar para vocês um cenário bem comum encontrado no dia a dia de um DBA, que são as cadeias de bloqueios, e como podemos resolvê-las.

O script que utilizei durante o vídeo encontra-se a seguir:


SELECT
SPID,
BLOCKED,
REPLACE (REPLACE (T.TEXT, CHAR(10), ' '), CHAR (13), ' ' ) AS BATCH
INTO
#Temp_Table
FROM
sys.sysprocesses R
CROSS APPLY
sys.dm_exec_sql_text(R.SQL_HANDLE) T
GO
WITH BLOCKERS (SPID, BLOCKED, LEVEL, BATCH)
AS
(
SELECT
SPID,
BLOCKED,
CAST (REPLICATE ('0', 4-LEN (CAST (SPID AS VARCHAR))) + CAST (SPID AS VARCHAR) AS VARCHAR (1000)) AS LEVEL,
BATCH
FROM
#Temp_Table R
WHERE
(BLOCKED = 0 OR BLOCKED = SPID)
AND
EXISTS (SELECT * FROM #Temp_Table R2 WHERE R2.BLOCKED = R.SPID AND R2.BLOCKED <> R2.SPID)
UNION ALL
SELECT
R.SPID,
R.BLOCKED,
CAST (BLOCKERS.LEVEL + RIGHT (CAST ((1000 + R.SPID) AS VARCHAR (100)), 4) AS VARCHAR (1000)) AS LEVEL,
R.BATCH
FROM
#Temp_Table AS R
INNER JOIN
BLOCKERS
ON
R.BLOCKED = BLOCKERS.SPID
WHERE
R.BLOCKED > 0
AND
R.BLOCKED <> R.SPID
)
SELECT
N' ' + REPLICATE (N'| ', LEN (LEVEL)/4 - 1) +
CASE WHEN (LEN(LEVEL)/4 - 1) = 0
THEN 'HEAD - '
ELSE '|----- ' END
+ CAST (SPID AS NVARCHAR (10)) + N' ' + BATCH AS BLOCKING_TREE
FROM
BLOCKERS
ORDER BY
LEVEL ASC
GO

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Be a DataMaster – Aula 4 – Monitorando o workload do servidor de banco de dados

Fala galera, tudo bem?

Todos preparados para a nossa próxima aula do treinamento GRATUITO de SQL Serevr que estou fazendo com vocês?

Nesta aula discutiremos algumas das ferramentas de monitoração disponíveis para utilizarmos em um ambiente de banco de dados SQL Server.

A aula será na próxima Quarta-Feira (14/08) às 20h00 e para acompanhar é só acessar o link do GoToMeeting:

https://global.gotomeeting.com/join/696162637

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

SQLNorte – Are you having problem with your TEMPDB? Tell more about it.

E ai galera, tudo bem?

Já está disponível a gravação do webcast que realizei com o pessoal do SQLNorte na última Quinta-feira, no qual falamos muito sobre o TEMPDB e como resolver os principais problemas encontrados neste banco de dados de sistema.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Be a DataMaster – Aula 2 – Gerenciando a segurança no SQL Server

Fala galera!!!!!

Já está disponível o vídeo da nossa segunda aula do treinamento GRATUITO de SQL Server e nesta aula discutimos mais sobre o gerencimanento de acessos e permissionamentos dentro de uma instância e dentro de um banco de dados.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.