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

Anúncios

5 pensamentos sobre “O Caso dos Schedulers Off-line

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s