O Caso dos Schedulers Off-line

Alta utilização de CPU nunca é legal… E como um DBA preguiçoso proativo, é interessante sempre manter esse contador sob controle. No entanto, vira e mexe e aparece um novo procedimento, um cubo ou um deploy da morte que te obriga a realizar uma análise do que está errado. Hoje eu não falarei exatamente sobre a causa deste problema, mas sobre o que o troubleshooting revelou.

O ambiente analisado é um servidor de relatórios que fora migrado recentemente do 2008 R2 para o 2014. Após algumas (poucas) batalhas com o novo Cardinality Estimator, os problemas de desempenho haviam sido sanados e nada mais foi relatado. Isso até o próximo deploy, claro.

Quando o comportamento não usual foi identificado, a consulta culpada foi isolada e mandada de volta para o desenvolvimento. No entanto, algo me deixou curioso sobre esse comportamento: Sempre que o procedimento era disparado, a CPU oscilava, mas nunca ultrapassava a linha de 75~77%. Nesse momento, abri o task manager e vi o seguinte:

CPU Usage

Ué… Só 20 das 26 CPUs estavam trabalhando. Isso geralmente é problema. Então, fui direto na DMV sys.dm_os_schedulers pra investigar e me deparei com isso:

schedulers

What the f…? Seis dos schedulers estão off-line! Como eu sei exatamente o que significa que o scheduler está visível e off-line, fui ao BOL e lá você encontra o seguinte:

OFFLINE schedulers map to processors that are offline in the affinity mask and are, therefore, not being used to process any requests. ONLINE schedulers map to processors that are online in the affinity mask and are available to process threads.

Cara… Alguém mexeu no affinity mask [1] desta instância?! Que mente diabólica arquitetaria plano tão maligno?! Fui confirmar a configuração do mal e…

affinity

Não tou entendendo mais nada… Nesta hora você recorre ao único cara que nunca te esconde nada, o errorlog. E, usando seu novo melhor amigo “Get-SqlErrorLog”:

errorlog

Ok. Este servidor nunca teve problema de licenciamento… Por que ela está sendo limitado a 20 processadores agora? Aí, você sabe que terá de consultar o oráculo. Meio minuto se passa e você descobre através de vários blog posts [2][3] que, desde o SQL Server 2012, o licenciamento mudou e o tipo de licença CAL até permite que seja realizado o upgrade do seu SQL Server Enterprise, mas o limita a 20 processadores lógicos.

Mas é claro que você já sabia disso. Obviamente, você leu isso durante o processo de planejamento da migração de versão, né…?! Não. Eu não li. Se você leu, deixa um recado na sessão de comentários. Quero estudar você ser seu amigo bater um papo contigo.

Enfim, este novo licenciamento parece ter pegado muita gente de surpresa e pode até causar problemas de desempenho por desbalanceamento dos schedulers entre os NUMA nodes [4]!

Então, depois desse post, espero que você entenda a importância do licenciamento e leia sobre todas as suas nuances para cada nova versão do SQL Server.

E, por favor, depois me conte.

[]’s

Links:

[1] affinity mask Server Configuration Option

[2] A cautionary tale about grandfathering CAL licenses in SQL Server 2012 Enterprise

[3] SQL SERVER – Using 20 Logical Processors Based on SQL Server Licensing

[4] Performance Problems with SQL Server 2012 Enterprise Edition Under CAL Licensing

Encontro SQL Server DF XXXIV – Material

Dia 12/07/2016 aconteceu mais um encontro do grupo SQLServerDF! Neste 34º encontro, falei um pouco a nova feature do SQL Server 2016: Always Encrypted.

Titulo

Apesar de um imprevisto com uma VM ter atrapalhado algumas demos, consegui mostrar o comportamento deste recurso tanto em memória como na rede. Isso é sempre divertido!

Agradeço a presença de todos e todo o feedback que recebi!

Segue o link com o material da apresentação, divirta-se!

https://drive.google.com/folderview?id=0B2dIfMDfAh7JQWlaZHBOSW8yczQ&usp=sharing

 

Encontro SQL Server DF XXXIV

Depois de um longo e tenebroso inverno, um post breve para avisar sobre o trigésimo quarto encontro do grupo SQL Server DF, o Local Chapter de Brasília, um dos mais (se não o mais) ativos do Brasil.

Dia 29/06/2016, tivemos o encontro de número 33 com uma excelente apresentação do Rodrigo Gomes (blog|twitter) intitulada “SQL Server CPU Foundations”. Esta sessão, que ele também realizou no SQL Saturday #512 no Rio de Janeiro, entrega de uma forma simples e clara algumas definições e diferentes métricas acerca do tema CPU. Recomendo à todos que tenham a oportunidade.

O evento que acontecerá dia 12/07/2016 é a edição de número 34 e eu estarei lá falando um pouco sobre Always Encrypted. Veremos como funciona esta nova feature do SQL Server 2016 e implantaremos ela simulando um ambiente real de cliente/servidor. Também pretendo mostrar como os novos cmdlets de Always Encrypted da atualização de Julho do SSMS facilitaram o trabalho na hora da criação das chaves. Ainda iremos ver como se comportam os dados criptografados tanto na rede como em memória.

Quando e onde será?

  • Data e Hora: 12/07/2016, das 18:30 às 20:30;
  • Local: Xperts Training Center (SHIS QI 15, Área Especial Subsolo, Conjunto 8/9, Próximo ao Hospital Brasília).

Demais detalhes podem ser encontrados no anúncio do encontro no blog do Luti.

Espero vocês lá!