web-dev-qa-db-fra.com

Est-ce que ça va d'exécuter des parfums sur les serveurs de production? Et pourquoi?

Ou faut-il être limité à un serveur DEV/QA avec des tests de charge qui simulent l'activité de production?

J'aimerais exécuter des parfums pendant deux jours (- comme SQL Server Master Brent Ozar suggère ) Pour obtenir une idée générale de la performance de la base de données de mon application Web.

29
Bill Paetzke

SQL Server, et la plupart des autres produits, générer les compteurs tout le temps, peu importe s'il ya des auditeurs ou non (ignorant l'option de démarrage -x). La lutte contre le contrôle est complètement transparente sur l'application surveillée. Il existe une région de mémoire partagée sur laquelle l'application surveillée écrit et à partir desquelles des sessions de surveillance lit les valeurs brutes à l'intervalle spécifié. Donc, le seul coût associé à la surveillance est le coût du processus de surveillance et le coût d'écriture des valeurs échantillonnées sur le disque. Choisir un intervalle de collecte décent (je choisis généralement 15 secondes) et un nombre modéré de comptoirs (50-100) et l'écriture dans un format de fichier binaire ne laisse aucun impact sur le système surveillé.

Mais je recommanderais contre l'utilisation de parfum (comme dans perfmon.exe). Au lieu de vous familiariser avec Logman.exe, voir Description de logman.exe, Relog.exe et TypePerf.exe outils . De cette façon, vous ne liez pas la session de collecte à votre session. LOGMAN, étant un outil de ligne de commande, peut être utilisé dans des scripts et des travaux planifiés pour démarrer et arrêter les sessions de collecte.

27
Remus Rusanu

Depuis que j'ai écouté CLINT HUFFMAN , qui a écrit PAL utilitaire d'analyse des journaux de parfum, sur un podcast une fois. J'ai configuré ce que j'appelle l'enregistreur de vol sur tous nos serveurs d'applications de production. Cette pratique est devenue très pratique pour diagnostiquer des problèmes et la surveillance des tendances.

Vous trouverez ci-dessous le script que j'utilise pour configurer un collecteur de parfum de démarrage automatique, avec purge de journal. Si vous le souhaitez, il peut être alimenté un fichier de fichiers compteurs de performance à collecter (un par ligne) ou d'un fichier XML de seuil PAL. J'aime utiliser les fichiers de seuil PAL.

<#
Install-FlightRecorder.ps1
.SYNOPSIS
Installs or sets up the pieces necessary to create PerfMon Collector 
snapshots, one a minute, to a file located in C:\FlightRecorder.

.DESCRIPTION
Installs or sets up the pieces necessary to create PerfMon Collector 
snapshots, one a minute, to a file located in C:\FlightRecorder.

.PARAMETER Path
File listing performance counters to collect, one per line. 
Or a PAL Threshold XML file.

#>
[CmdletBinding()]
param (
    [string]$Path
)

#Requires -RunAsAdministrator
$ScriptDir = { Split-Path $MyInvocation.ScriptName –Parent }
$DeleteTempFile = $False

function Main {
    if (-not $Path) { $Path = DefaultFile $Path }
    if (-not (Test-Path $Path)) {
        Write-Warning "Path does not exist or is inaccessable: $Path"
        Exit 1
    }
    if ($Path -like '*.xml') { $Path = PALFile $Path }

    Install-FlightRecorder
    if ($Path.startswith($env:TEMP)) {Remove-Item $Path}
    Write-Verbose 'Installation Successful.'
}

function Install-FlightRecorder {
    Write-Verbose 'Setting up the Flight Recorder.'
    if (-not (Test-Path c:\FlightRecorder\)) {
        mkdir c:\FlightRecorder | out-null 
    }
    if ((LOGMAN query) -match 'FlightRecorder') {
        Write-Verbose 'Removing former FlightRecorder PerfMon Collector.'
        LOGMAN stop FlightRecorder | out-null
        LOGMAN delete FlightRecorder | Write-Verbose
    }
    Write-Verbose 'Creating FlightRecorder PerfMon Collector.'
    LOGMAN create counter FlightRecorder -o "C:\FlightRecorder\FlightRecorder_$env:computername" -cf $Path -v mmddhhmm -si 00:01:00 -f bin | Write-Verbose
    SCHTASKS /Create /TN FlightRecorder-Nightly /F /SC DAILY /ST 00:00 /RU SYSTEM /TR 'powershell.exe -command LOGMAN stop FlightRecorder; LOGMAN start FlightRecorder; dir c:\FlightRecorder\*.blg |?{ $_.LastWriteTime -lt (Get-Date).AddDays(-3)} | del' | Write-Verbose
    SCHTASKS /Create /TN FlightRecorder-Startup /F /SC ONSTART /RU SYSTEM /TR "LOGMAN start FlightRecorder" | Write-Verbose
    SCHTASKS /Run /TN FlightRecorder-Startup | Write-Verbose
}

function DefaultFile {
    Write-Warning 'Counter or PAL file not specified, using default configuration.'
    $DeleteTempFile = $True
    $Path = [System.IO.Path]::GetTempFileName()
    Set-Content -Encoding ASCII $Path @'
\LogicalDisk(*)\Avg. Disk sec/Read
\LogicalDisk(*)\Avg. Disk sec/Write
\LogicalDisk(*)\Disk Transfers/sec
\LogicalDisk(C:)\Free Megabytes
\Memory\% Committed Bytes In Use
\Memory\Available MBytes
\Memory\Committed Bytes
\Memory\Free System Page Table Entries
\Memory\Pages Input/sec
\Memory\Pages/sec
\Memory\Pool Nonpaged Bytes
\Memory\Pool Paged Bytes
\Memory\System Cache Resident Bytes
\Network Interface(*)\Bytes Total/sec
\Network Interface(*)\Output Queue Length
\Paging File(*)\% Usage
\Paging File(*)\% Usage Peak
\PhysicalDisk(*)\Avg. Disk sec/Read
\PhysicalDisk(*)\Avg. Disk sec/Write
\Process(_Total)\Handle Count
\Process(_Total)\Private Bytes
\Process(_Total)\Thread Count
\Process(_Total)\Working Set
\Processor(*)\% Interrupt Time
\Processor(*)\% Privileged Time
\Processor(*)\% Processor Time
\System\Context Switches/sec
\System\Processor Queue Length
'@
    $Path
}

function PalFile {
    $DeleteTempFile = $True
    $InputPath = $Path
    $Path = [System.IO.Path]::GetTempFileName()
    $filesRead = @()
    Read-PalFile $InputPath | Select -Unique | sort | Set-Content -Encoding ASCII $Path
    $Path
}

$script:filesRead =@()
function Read-PalFile ([string]$path) {
    if (-not (Test-Path $path)) {
        Write-Warning "PAL Threshold file not found: $path"
        return
    }
    if ($script:filesRead -contains $path) {return}
    $script:filesRead += @($path)
    Write-Verbose "Reading PAL Threshold file: $path"
    $xml = [XML](Get-Content $path)
    $xml.SelectNodes('//DATASOURCE[@TYPE="CounterLog"]') | select -expand EXPRESSIONPATH
    $xml.SelectNodes('//INHERITANCE/@FILEPATH') | select -expand '#text' | where {$_ } | ForEach {
        $newpath = Join-Path (Split-Path -parent $path) $_
        Write-Debug "Inheritance file: $newpath"
        Read-PalFile $newpath
    }
}

. Main
8
Nathan Hartley

Nous le faisons assez souvent. Il est également essentiel d'établir une base de référence dans l'environnement réel. Vous pouvez donc comparer plus tard en cas de problème ou que vous devez effectuer une étude de capacité.

Je recommande de ne pas aller au-dessous d'un intervalle de 10 secondes cependant. Si vous collectez de nombreux objets/comptoirs et l'intervalle est trop fréquent, cela peut avoir une incidence sur les opérations.

Microsoft a un Perfmon Wizard qui configurera la tâche pour vous.

http://www.microsoft.com/downloads/details.aspx?familyid=31fccd98-c3a1-4644-9622-faa046d69214&displaylang=fr

3
Greg Askew

Dans un monde idéal où un serveur de production reflète exactement ce qu'est un serveur DEV, fonctionnent et constitue également un duplicata exact du serveur DEV, Perfmon ne doit jamais être requis sur le serveur de production, car les résultats seraient les mêmes que ceux du serveur de dev. Bien sûr que la situation mythique n'arrive jamais, nous avons donc besoin de courir des parfums sur des serveurs de production et il n'y a absolument rien de mal à cela. Entre autres choses, nous devrons peut-être utiliser des outils de perfon et d'autres outils pour apprendre pourquoi le serveur de production ne se comporte pas de la même manière que le serveur DEV.

2
John Gardeniers

Pourquoi perfmon? Je veux dire, les versions récentes de SQL Server ont leur propre méthode de faire cela, y compris la construction d'un entrepôt de données (central) de compteurs de performance qui peuvent ensuite être interrogés et déclarés contre. Il y a zéro sens dans la course à pied des parfums.

Je suis, comme toujours, étonné par tous les messages ici des gens qui ne lisent évidemment jamais la documentation;)

http://www.simple-talk.com/sql/learn-sql-server/sql-server-2008-Performance-Data-Collector/ est un bon début. IMHO qui devrait fonctionner sur presque tous les serveurs SQL utilisés à des fins de production.

2
TomTom

Rien de mal à courir Perfmon comme beaucoup l'a suggéré, mais je dirais du profileur à la place ou en outre, avec les mêmes mises en garde, ne capturez pas trop souvent trop souvent, capturer des requêtes de course longues, c'est-à-dire la durée> x secondes ou cpu> xx , ou lit> xxxx; Très peu d'impact, et vous verrez rapidement les requêtes qui bénéficieraient la plupart d'un réglage.

1
SqlACID