Arquivo da categoria: Performance e Tuning

Dicas para um DBA Iniciante – Diagnosticando “memory loss”

Fala galera, tudo bem?

No vídeo de hoje quero discutir com vocês como podemos verificar se o SQL Server está alocando espaço de forma ineficiente na memória RAM e também descobrirmos como diminuir esse problema.

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.

WorkShop Gratuito – SQL Server Deep Dives

Fala galera, tudo bem?

No último SQL Saturday que ocorreu em São Paulo falei para os participantes que faria um dia inteiro de imersão no SQL Server, sendo que o evento seria ONLINE (AO VIVO) e GRATUITO!!!!

Muita gente me procurou depois do evento interessados em participar e por isso estou abrindo a possibilidade para todos que tenham interesse em aprender mais sobre SQL Server possam participar.

O evento teve sua data alterada para o dia 09/11, das 09h até as 17h e para participar é só acessar o link abaixo no dia do evento:

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

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.

 

SQL Saturday #906 – Vamos falar um pouco sobre performance no SQL Database?

Fala galera, tudo bem?

E já estamos novamente bem próximos a mais um grande evento de tecnologia que acontece aqui em SP, o SQL Saturday #906!!!!!!!!

Estarei mais uma vez (a 6º vez consecutiva) participando como um dos palestrantes desse grande evento e espero poder contar com a presença de todos vocês em mais esse Sábado de muito conteúdo técnico de altíssima qualidade e também de networking.

Quero ouvir de vocês o que estão planejando para suas carreiras e também de que forma posso ajudá-los a alcançar esses objetivos.

Se ainda não fez a sua inscrição é só acessar o link https://www.sqlsaturday.com/906/RegisterNow.aspx

Espero todos lá 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 – 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.

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.