Script - Cálculo automático "Max Worker Threads".

Fala pessoal, tranquilo?




 Hoje irei compartilhar com vocês um código que pode ser útil, mas antes, se lembram desta tabelinha?





Arquitetura
Processadores lógicos
Max Worker Threads
x86
Até 4
256
x86
Mais de 4
256 + ((# Procs – 4) * 8)
x64
Até 4
512
x64
Mais de 4 e até 64
512 + ((# Procs – 4) * 16)
x64
Mais que 64
512 + ((# Procs – 4) * 32)



Obs.: A linha em amarelo foi o motivo do script presente neste post sofrer algumas alterações.



 Também utilizei ela no post que expliquei o que são as Workers no SQL Server (Veja aqui!). As fórmulas desta tabela nos dizem a quantidade de threads que o SQL Server pode criar com base na arquitetura e na quantidade de processadores lógicos disponíveis para a instância.

 Para facilitar nossa vida, criei um script que calcula a quantidade máxima de threads para uma instância do SQL Server e estou compartilhando com vocês! Segue abaixo: 



--Primeiro vamos declarar três variáveis: @@edition, @cpu e @maxwthreads.


DECLARE @@edition VARCHAR(50);
DECLARE @cpu VARCHAR(50);
DECLARE @maxwthreads INT;



/*


Vamos agora atribuir os valores as nossas variáveis, utilizando a função SERVERPROPERTY populo a variável @@edition com informações referente a edição do SQL Server. Quanto a segunda variável, @cpu, iremos popular ela com o valor obtido de uma query de contagem disparada contra a sys.dm_os_schedulers pegando apenas as cpu’s que estão visíveis a instância, 'VISIBLE ONLINE', quanto a variável @maxwthreads, iremos popular ela com o valor configurado para o parâmetro 'Max Worker Threads' nas configurações da instância, esta informação iremos capturar da sys.configurations.


Atualizado em: 05/05/2016.


*/



SET @@edition = CAST((SELECT SERVERPROPERTY ('edition')) AS VARCHAR (200))
SET @cpu = CAST((SELECT COUNT(1) FROM sys.dm_os_schedulers WHERE STATUS
collate Latin1_General_CI_AI = 'visible online') AS VARCHAR(200))
SET @maxwthreads = CAST((SELECT value FROM sys.configurations WHERE name

collate Latin1_General_CI_AI = 'max worker threads') AS VARCHAR(200))



/*


Caso o 'Max Worker Threads' esteja configurado em seu valor padrão, zero, a lógica da tabela será aplicada. Caso o valor esteja diferente de zero, ele será verificado no intuito de saber se está dentro do que a Microsoft suporta ou não.


*/


IF (@maxwthreads) = 0 AND (@@edition) LIKE '%64-bit%'


BEGIN
IF (@cpu) <= 4
SELECT 512 AS max_threads
ELSE IF (@cpu) > 4 and (@cpu) <= 64
SELECT (@cpu-4)*16+512 AS max_threads
ELSE IF (@cpu) > 64
SELECT (@cpu-4)*32+512 AS max_threads
END


ELSE IF (@maxwthreads) = 0 AND (@@edition) NOT LIKE '%64-bit%'


BEGIN
IF (@cpu) <=4
SELECT 256 AS max_threads
ELSE IF (@cpu) > 4
SELECT (@cpu-4)*8+256 AS max_threads
END


ELSE IF (@maxwthreads) > 1024 and (@@edition) NOT LIKE '%64-bit%'


BEGIN
SELECT 'O valor do Max Worker Threads está fixado em: ' +CONVERT(VARCHAR(25),@maxwthreads) +'. Este valor está acima do suportado pela Microsoft nesta plataforma que é de 2048.'
END


ELSE


BEGIN
SELECT 'O valor do Max Worker Threads está fixado em: ' +CONVERT(VARCHAR(25),@maxwthreads) +'.'
END

Valeu pessoal! Até a próxima!

DICAS do Exame 70-457!!! MCITP SQL Server 2008 > MCSA SQL Server 2012 PT 1

Fala galera tudo certo? Já faz um tempo rs, na verdade estava ausente e talvez fique um tempo ainda pois estava/estou estudando para atualizar minhas certificações do SQL Server 2008 para MCSA do SQL Server 2012! Hoje fiz o primeiro exame, 70-457 - Transition Your MCTS on SQL Server 2008 to MCSA: SQL Server 2012 Part 1 e felizmente passei no mesmo!
Falando um pouco sobre a prova, a mesma se divide em duas partes com 25 questões cada uma, uma parte aborda somente query e a outra parte somente administração, a parte mais complicada para mim no caso foi a das queries, muitas questões pediam para você montar a query usando três trechos de código de um total de 4 ou 6 trechos, e em muitas questões os trechos de código eram extremamente parecidos com pequenos detalhes que com certeza podem fazer você errar a resposta. Abaixo relacionei as coisas que lembro que caíram na minha prova com links oficiais da Microsoft explicando cada um dos tópicos, dividi entre T-SQL e ADM, espero que seja útil pra quem está pensando em prestar esta prova de certificação. Quando eu fizer a segunda prova posto minhas considerações! Um abraço pessoal!

T-SQL

LAG


LEAD


TABLE-VALUED USER-DEFINED FUNCTIONS


DMVS


UDF


VIEWS


PROCEDURES


RANK


SET STATEMENTS


FOR XML


COLUMNSTORE INDEXES


BULK INSERT


BCP


TRANSACTION ISOLATION LEVEL


ADM

OUTPUT FILES JOB


CONTAINED DATABASES


SSIS CATALOG


SQL SERVER AUDIT


AVAILABILITY GROUPS


MANAGE THE SIZE OF THE TRANSACTION LOG FILE


SQL SERVER PROFILER


EXTENDED EVENTS


SYSTEM MONITOR


BACKUP/RESTORE

SQL Server 2014 CTP2!!!

Fala galera! 

 Estou meio ausente neste mês pois estou focado em alguns estudos mas não podia deixar de avisá-los que já esta disponível o SQL Server 2014 CTP2! Acessem o link abaixo para fazerem o download:

http://technet.microsoft.com/PT-BR/evalcenter/dn205290.aspx

Um abraço!

XEVENTS SYSTEM HEALTH

Olá pessoal tudo certo? No assunto de hoje vou continuar a falar sobre os xevents, desta vez sobre a system_health, já ouviram falar sobre?

Com a chegada dos extended events, no SQL Server 2008, foi introduzida uma sessão default de extend events chamada de system_health que se inicia automaticamente junto com o serviço do SQL Server. O seu objetivo é dar base para o troubleshooting, mas com um foco de suporte, identificando problemas críticos que podem afetar adversamente a carga de trabalho.

Para uma visão melhor de como ela pode ser útil em um troubleshotting, abaixo está a listagem oficial dos eventos que ela pode coletar:

-The sql_text and session_id for any sessions that encounter an error that has a severity >=20.
-The sql_text and session_id for any sessions that encounter a memory-related error. The errors include 17803, 701, 802, 8645, 8651, 8657 and 8902.
-A record of any non-yielding scheduler problems. (These appear in the SQL Server error log as error 17883.)
-Any deadlocks that are detected.
-The callstack, sql_text, and session_id for any sessions that have waited on latches (or other interesting resources) for > 15 seconds.
-The callstack, sql_text, and session_id for any sessions that have waited on locks for > 30 seconds.
-The callstack, sql_text, and session_id for any sessions that have waited for a long time for preemptive waits. The duration varies by wait type. A preemptive wait is where SQL Server is waiting for external API calls.
-The callstack and session_id for CLR allocation and virtual allocation failures.
-The ring_buffer events for the memory broker, scheduler monitor, memory node OOM, security, and connectivity.
-System component results from sp_server_diagnostics.
-Instance health collected by scheduler_monitor_system_health_ring_buffer_recorded.
-CLR Allocation failures.
-Connectivity errors using connectivity_ring_buffer_recorded. 
-Security errors using security_error_ring_buffer_recorded.


Pela interface do SQL Server Management Studio podemos chegar na system_health indo em “Management > Extended Events > Sessions” conforme imagem abaixo:


Os arquivos XEL gerados pela sessão system_health ficam armazenados no mesmo diretório do ERRORLOG:

 

Clicando duas vezes em cada um deles você verá as informações no Management Studio:


Um outra forma de verificar o que foi coletado pelos arquivos XEL é através da utilização de queries utilizando a function sys.fn_xe_file_target_read_file, alguns exemplos podem ser encontrados no site abaixo: 


A Microsoft recomenda que a system_health não seja apagada, porém caso ocorra, é possível restaurar a mesma através do script u_tables.sql, localizado no diretório de instalação do seu SQL Server: 

C:\Program Files\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install 

Outros links utilizados para escrita deste post:  


Espero que tenham gostado pessoal e até a próxima!