Tag Archives: t-sql

T-SQL Tuesday #18 – CTEs

Bom,,, para este mês o Sr. Bob Pusateri (twitter | Blog) escolheu o tópico Common Table Expressions (CTE).

Você não sabe o que é? Não faz ideia? Isso é mais comum do que você imagina,,, vejo muitos códigos por ai onde o pessoal de dev poderia utilizar este recurso, mas como ainda estão presos em conceitos antigos do SQL 2000 ou as vezes até mais velhos não fazem ideia de alguns novos recursos interessantes…

Para uma leitura interessante sobre este assunto acesse:

Você vai achar muita coisa voltada pra dev… mas,,, como sou mais um cada de infra,,, achei interessante este código no Site do Sr. Paul Randal (twitter | Blog) sobre wait statistics usando a sys.dm_os_wait_stats, nada muito complexo.

 1: WITH Waits AS
 2:     (SELECT
 3:         wait_type,
 4:         wait_time_ms / 1000.0 AS WaitS,
 5:         (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS,
 6:         signal_wait_time_ms / 1000.0 AS SignalS,
 7:         waiting_tasks_count AS WaitCount,
 8:         100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS Percentage,
 9:         ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS RowNum
 10:     FROM sys.dm_os_wait_stats
 11:     WHERE wait_type NOT IN (
 12:         'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE', 'SLEEP_TASK',
 13:         'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'LOGMGR_QUEUE',
 14:         'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'BROKER_TO_FLUSH',
 15:         'BROKER_TASK_STOP', 'CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT', 'DISPATCHER_QUEUE_SEMAPHORE',
 16:         'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'BROKER_EVENTHANDLER',
 17:         'TRACEWRITE', 'FT_IFTSHC_MUTEX', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
 18:         'BROKER_RECEIVE_WAITFOR', 'ONDEMAND_TASK_QUEUE', 'DBMIRROR_EVENTS_QUEUE',
 19:         'DBMIRRORING_CMD', 'BROKER_TRANSMITTER', 'SQLTRACE_WAIT_ENTRIES',
 20:         'SLEEP_BPOOL_FLUSH', 'SQLTRACE_LOCK')
 21:     )
 22: SELECT
 23:     W1.wait_type AS WaitType,
 24:     CAST (W1.WaitS AS DECIMAL(14, 2)) AS Wait_S,
 25:     CAST (W1.ResourceS AS DECIMAL(14, 2)) AS Resource_S,
 26:     CAST (W1.SignalS AS DECIMAL(14, 2)) AS Signal_S,
 27:     W1.WaitCount AS WaitCount,
 28:     CAST (W1.Percentage AS DECIMAL(4, 2)) AS Percentage,
 29:     CAST ((W1.WaitS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgWait_S,
 30:     CAST ((W1.ResourceS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgRes_S,
 31:     CAST ((W1.SignalS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgSig_S
 32: FROM Waits AS W1
 33:     INNER JOIN Waits AS W2 ON W2.RowNum <= W1.RowNum
 34: GROUP BY W1.RowNum, W1.wait_type, W1.WaitS, W1.ResourceS, W1.SignalS, W1.WaitCount, W1.Percentage
 35: HAVING SUM (W2.Percentage) - W1.Percentage < 95;
 36: GO

T-SQL Tuesday #17–Apply

O tópico deste mês para o T-SQL Tuesday é o operador apply,,,

Caso você não faça ideia de pra que serve o apply leia aqui.

Para este post vou coloca um script simples usando o apply.

Ele não faz nada muito importante, apenas mostra as 20 querys que mais gerão stress de disco:

SELECT TOP 20 SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END – qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.min_logical_reads, qs.max_logical_reads,
qs.total_elapsed_time, qs.last_elapsed_time,
qs.min_elapsed_time, qs.max_elapsed_time,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE qt.encrypted=0
ORDER BY qs.total_logical_reads DESC

T-SQL Tuesday #016 – Blocking Processes – #tsql2sday

O T-SQL Tuesday desse mês é sobre Aggregate Functions,,,

O código abaixo é bem simples, ele vai exibir algum block que pode estar ocorrendo no SQL nada muito complicado mas é interessante de ter,,,

 1: SET NOCOUNT ON
 2: 
 3: SELECT  a.spid AS "Block" ,
 4:         ( SELECT    COUNT(*)
 5:           FROM      master.dbo.sysprocesses b
 6:           WHERE     b.blocked = a.spid
 7:         ) AS "BlockCount" ,
 8:         ( SELECT    MAX(waittime)
 9:           FROM      master.dbo.sysprocesses b
 10:           WHERE     b.blocked = a.spid
 11:         ) AS "BlockTime" ,
 12:         a.status ,
 13:         a.program_name ,
 14:         a.cmd ,
 15:         a.last_batch
 16: FROM    master.dbo.sysprocesses a
 17: WHERE   a.spid IN ( SELECT  blocked
 18:                     FROM    master.dbo.sysprocesses
 19:                     WHERE   blocked <> 0 )
 20: ORDER BY a.blocked ASC ,
 21:         BlockCount DESC

Por que habilidades de DBA são necessárias?

Este post é de referencia ao T-SQL Tuesday organizado por Paul Randal (Blog | Twitter).

Quando você administra um ambiente com mais de 40 servidores de SQL, 300 bases, de uns 50 clientes diferentes e um monte de aplicação estranha, algum tipo de conhecimento é necessário para manter tudo isso no ar sem um causar problema no outro.

A maior parte dos  nossos clientes não possui nenhum tipo de DBA, muitas vezes nem mesmo um estagiário que faça algum serviço de TI. Muitas dessas empresas apenas tem o consultor da aplicação que foi alguma vez para a empresa fazer a implantação do sistema, passou o telefone do suporte da aplicação e o nosso telefone e disse para o cliente: “Olha, se alguma coisa errada acontecer liga pra esses dois telefones.”

Quando temos algum “consultor” que saiba alguma coisa da parte de banco é incrivel, mas na maior parte desses casos ele não tem como fazer nenhuma modificação pois o código é fechado, basicamente ele aponta pra qual servidor de Continue reading Por que habilidades de DBA são necessárias?