Erro ao gerar dados de performance para Azure SQL Database Calculator

Olá pessoal, quanto tempo heim?? Quero compartilhar com vocês um dilema que eu e meu sócio (Walmik Villas-Bôas) passamos recentemente quando fomos analisar um cenário de um cliente, no qual pretende migrar seu ambiente local de bancos  de dados SQL Server para nuvem Azure. Seguindo os protocolos de análise, a primeira coisa que fazemos quando recebemos uma demanda dessa espécie é certificar quanto de recurso é consumido pelo workload do cliente. No mercado existem diversas ferramentas/scripts que fazem esse trabalho e trazem resultados bem elaborados de consumo de recursos pelo servidor de SQL Server. No entanto costumamos usar um script bem simples e difundido pela comunidade de SQL Server, desenvolvido pelo Justin Henriksen, onde coleta informações por certo período de tempo dos contadores: Processor – % Processor Time, Logical Disk – Disk Reads/sec, Logical Disk – Disk Writes/sec e Database – Log Bytes Flushed/sec. São as métricas cruciais para carregarmos na calculadora do azure e termos uma visão geral dos resultados com recomendação do modelo a migrar nosso ambiente. Porém o script postado pelo nosso colega Justin não atende todos os ambientes pelo mundo afora e necessita algumas vezes de adaptações para cumprir com seu objetivo. Nesse cliente em específico foi nos retornado o erro que até então não tínhamos passado, onde a mensagem dizia que o contador de desempenho % Processor Time não existia na categoria de Processor. Nos pareceu estranho, pois é um contador comum de qualquer sistema operacional, mas tem um detalhe bem importante que deveríamos ter observado antes, o idioma do sistema operacional e da plataforma de dados. Analisando com cautela e aprofundando na pesquisa percebemos que é usada a descrição do display do contador, o qual algumas vezes pode mudar a depender do idioma. Atenção em observar não só o idioma do sistema operacional, mas também do SQL Server.

Com as mudanças realizadas nos scripts do PowerShell e do Command tudo funcionou perfeitamente.

Quero deixar claro que os scripts não são as únicas formas de coleta de dados de desempenho para ser usado na calculadora do Azure. É possível utilizar o Perfmon do sistema operacional também. Basta apenas definir os contadores na mesma sequência que citei acima e definir para que a coleta seja armazenada em arquivo csv no formato de log “Separado por vírgula”.

Por hoje é só. Espero que aproveitem a dica.

Bom carnaval à todos.

Se beber não dirija. Se dirigir não beba!!

Fonte original do script: https://justinhenriksen.wordpress.com/

Azure SQL Database DTU Calculator: http://dtucalculator.azurewebsites.net/

SqlDtuPerfmonPtr – Command

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<appSettings>
<!– PROCESSOR COUNTER –>
<add key=”ProcessorCategory” value=”Processador”/>
<add key=”ProcessorInstance” value=”_Total”/>
<add key=”ProcessorCounter” value=”% tempo de processador”/>
<!– DISK COUNTERS –>
<add key=”DiskCategory” value=”LogicalDisk”/>
<add key=”DiskInstance” value=”_Total”/>
<add key=”DiskCounter1″ value=”Disk Reads/sec”/>
<add key=”DiskCounter2″ value=”Disk Writes/sec”/>
<!– SQL COUNTER –>
<add key=”SqlCategory” value=”SQLServer:Databases”/>
<add key=”SqlInstance” value=”_Total”/>
<add key=”SqlCounter” value=”Log Bytes Flushed/sec”/>
<!– SECONDS TO WAIT FOR COLLECTING COUNTERS –>
<add key=”SampleInterval” value=”1″/>
<!– TOTAL NUMBER OF SAMPLES TO COLLECT –>
<add key=”MaxSamples” value=”3600″/>
<!– DISK LOCATION OF THE OUTPUT FILE –>
<add key=”CsvPath” value=”C:\sql-perfmon-log.csv”/>
</appSettings>
<startup>

<supportedRuntime version=”v4.0″ sku=”.NETFramework,Version=v4.0″/></startup>
</configuration>

SqlDtuPerfmonEnglish – Command

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<appSettings>
<!– PROCESSOR COUNTER –>
<add key=”ProcessorCategory” value=”Processor”/>
<add key=”ProcessorInstance” value=”_Total”/>
<add key=”ProcessorCounter” value=”% Processor Time”/>
<!– DISK COUNTERS –>
<add key=”DiskCategory” value=”LogicalDisk”/>
<add key=”DiskInstance” value=”_Total”/>
<add key=”DiskCounter1″ value=”Disk Reads/sec”/>
<add key=”DiskCounter2″ value=”Disk Writes/sec”/>
<!– SQL COUNTER –>
<add key=”SqlCategory” value=”SQLServer:Databases”/>
<add key=”SqlInstance” value=”_Total”/>
<add key=”SqlCounter” value=”Log Bytes Flushed/sec”/>
<!– SECONDS TO WAIT FOR COLLECTING COUNTERS –>
<add key=”SampleInterval” value=”1″/>
<!– TOTAL NUMBER OF SAMPLES TO COLLECT –>
<add key=”MaxSamples” value=”3600″/>
<!– DISK LOCATION OF THE OUTPUT FILE –>
<add key=”CsvPath” value=”C:\sql-perfmon-log.csv”/>
</appSettings>
<startup>

<supportedRuntime version=”v4.0″ sku=”.NETFramework,Version=v4.0″/></startup>
</configuration>

sql-perfmon-ptbr – PowerShell

<#
.SYNOPSIS
Collect counters required for DTU Calculator and log as CSV.

.DESCRIPTION
Collect counters required for DTU Calculator and log as CSV.
Default log file location is C:\sql-perfmon-log.csv.
Counters are collected at 1 second intervals for 1 hour or 3600 seconds.
No support or warranty is supplied or inferred.
Use at your own risk.

.PARAMETER DatabaseName
The name of the SQL Server database to monitor.

.INPUTS
Parameters above.

.OUTPUTS
None.

.NOTES
Version: 1.0
Creation Date: May 1, 2015
Modified Date: June 17, 2016
Author: Justin Henriksen ( http://justinhenriksen.wordpress.com )
#>

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

$ErrorActionPreference = “Stop”
$VerbosePreference = “Continue”

cls

Write-Output “Collecting counters…”
Write-Output “Press Ctrl+C to exit.”

$counters = @(“\Processador(_Total)\% tempo de processador”,
“\LogicalDisk(_Total)\Leituras de disco/s”,
“\LogicalDisk(_Total)\Gravações de disco/s”,
“\SQLServer:Databases(_Total)\Solicitações do Pool de Logs/s”)

Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 3600 |
Export-Counter -FileFormat csv -Path “C:\sql-perfmon-log.csv” -Force

sql-perfmon-Eng – PowerShell

<#
.SYNOPSIS
Collect counters required for DTU Calculator and log as CSV.

.DESCRIPTION
Collect counters required for DTU Calculator and log as CSV.
Default log file location is C:\sql-perfmon-log.csv.
Counters are collected at 1 second intervals for 1 hour or 3600 seconds.
No support or warranty is supplied or inferred.
Use at your own risk.

.PARAMETER DatabaseName
The name of the SQL Server database to monitor.

.INPUTS
Parameters above.

.OUTPUTS
None.

.NOTES
Version: 1.0
Creation Date: May 1, 2015
Modified Date: June 17, 2016
Author: Justin Henriksen ( http://justinhenriksen.wordpress.com )
#>

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force

$ErrorActionPreference = “Stop”
$VerbosePreference = “Continue”

cls

Write-Output “Collecting counters…”
Write-Output “Press Ctrl+C to exit.”

$counters = @(“\Processor(_Total)\% Processor Time”,
“\LogicalDisk(_Total)\Disk Reads/sec”,
“\LogicalDisk(_Total)\Disk Writes/sec”,
“\SQLServer:Databases(_Total)\Log Bytes Flushed/sec”)

Get-Counter -Counter $counters -SampleInterval 1 -MaxSamples 3600 |
Export-Counter -FileFormat csv -Path “C:\sql-perfmon-log.csv” -Force

 

 

Anúncios