क्या प्रोडक्शन सर्वर पर परफ्यूम चलाना ठीक है? और क्यों?


28

या परफ्यूम को लोड परीक्षण के साथ एक देव / क्यूए सर्वर तक सीमित किया जाना चाहिए जो उत्पादन गतिविधि का अनुकरण करता है?

मैं अपने वेब ऐप के डेटाबेस प्रदर्शन के समग्र अनुभव को प्राप्त करने के लिए दो दिन ( जैसे कि एससीएल सर्वर मास्टर ब्रेंट ओजर सुझाव देता हूं) के लिए परफ्यूम चलाना चाहता हूं ।


1
कुछ लोगों ने एसक्यूएल ट्रेस का उपयोग करने का सुझाव दिया है - एसक्यूएल ट्रेस से सावधान रहें और कभी भी एक प्रोडक्ट सर्वर पर सभी गतिविधि का पता न लगाएं।
सैम

जवाबों:


26

एसक्यूएल सर्वर, और अधिकांश अन्य उत्पाद, हर समय काउंटर उत्पन्न करते हैं, भले ही श्रोता हों या नहीं (अनदेखी -x स्टार्टअप की अनदेखी)। मॉनीटर किए जा रहे एप्लिकेशन पर काउंटर ट्रेसिंग पूरी तरह से पारदर्शी है। एक साझा मेमोरी क्षेत्र है, जिस पर निगरानी अनुप्रयोग लिखता है और जिसमें से निगरानी सत्र निर्दिष्ट अंतराल पर कच्चे मूल्यों को पढ़ता है। इसलिए निगरानी से जुड़ी एकमात्र लागत निगरानी प्रक्रिया की लागत और डिस्क पर सैंपल वैल्यू लिखने की लागत है। एक सभ्य संग्रह अंतराल चुनना (मैं आमतौर पर 15 सेकंड का चयन करता हूं) और मध्यम संख्या के काउंटरों (50-100), और बाइनरी फ़ाइल प्रारूप में लिखना आमतौर पर निगरानी प्रणाली पर कोई प्रभाव नहीं छोड़ता है।

लेकिन मैं perfmon (perfmon.exe के रूप में) का उपयोग करने के खिलाफ सलाह दूंगा। इसके बजाय अपने आप को logman.exe से परिचित करें, Logman.exe, Relog.exe, और Typeperf.exe टूल का विवरण देखें । इस तरह आप संग्रह सत्र को अपने सत्र से जोड़ नहीं सकते हैं। Logman, कमांड लाइन टूल होने के नाते, इसका उपयोग स्क्रिप्ट और अनुसूचित नौकरियों में संग्रह सत्र शुरू करने और रोकने के लिए किया जा सकता है।


मैं सीधे तालिका में डेटा सम्मिलित करने के लिए DSN के साथ TypePerf.exe का उपयोग कर रहा हूं। उनके लिए एक अलग डीबी है। क्या यह किसी भी तरह से प्रभावित करेगा?
उदित सोलंकी

14

प्रोडक्शन बॉक्स पर परफ्यूम चलाने में कुछ भी गलत नहीं है। यह अपेक्षाकृत कम महत्वपूर्ण है, और आपके लिए बहुत सारी अच्छी जानकारी एकत्र कर सकता है। यदि आप उत्पादन सर्वर पर कुछ विश्लेषण नहीं चलाते हैं, तो आप उत्पादन भार का सही अनुकरण कैसे करेंगे? अपने स्वयं के लिंक में ब्रेंट ओजर से:

सर्वर की गतिविधि की अच्छी आधार रेखा को इकट्ठा करने के लिए एक या दो दिन के लिए परफ्यूम को चलने दें। ऐसा नहीं है कि SQL सर्वर पर इनवेसिव की निगरानी की जा रही है, और गहराई से परिणाम का भुगतान करेगा। जितना अधिक डेटा हमारे पास होगा, उतना ही बेहतर काम हम परफ़ॉर्मन परिणामों का विश्लेषण करने पर कर सकते हैं।

मैं कई उत्पादन एक्सचेंज बक्से पर कोई प्रतिकूल प्रभाव के साथ perfmon चलाया है।


5
सहमत - परफ्यूम चलाने से कोई उपरि नहीं है। एक अन्य जवाब में परफ्यूम के बजाय प्रॉइलर चलाने का सुझाव दिया गया था, लेकिन प्रोइलर को चलाने के लिए एक बहुत ही वास्तविक ओवरहेड है। मैंने देखा है कि प्रोइलर ट्रेस उत्पादन सर्वर को नीचे ले जाता है जब अनुरेखण बॉक्स लोड के साथ नहीं रख सकता है, या जब अतिरिक्त लोड ने उत्पादन सर्वर को किनारे पर धकेल दिया।
ब्रेंट ओजर

@Brent में chiming के लिए धन्यवाद। वैसे, मैंने कल ही आपकी 2008 की इंटर्ल्स बुक खरीदी थी।
बिल पैत्ज़के

आह कूल! मुझे बताएं कि आप इसके बारे में क्या सोचते हैं।
ब्रेंट ओजर

7

जब से मैंने क्लिंट हफमैन की बात सुनी , जिन्होंने लिखा था PAL एक बार पॉडकास्ट पर परफॉमन लॉग्स का विश्लेषण करने के लिए एक उपयोगिता। मेरे पास सेटअप है जिसे मैं अपने सभी उत्पादन एप्लिकेशन सर्वरों पर उड़ान रिकॉर्डर कहता हूं। समस्याओं के निदान और रुझानों की निगरानी के लिए यह अभ्यास बहुत काम में आया है।

नीचे वह स्क्रिप्ट है जिसका उपयोग मैं एक ऑटो-स्टार्टिंग पर्फोमन कलेक्टर सेटअप करने के लिए करता हूं, जिसमें लॉग पर्जिंग होती है। यदि वांछित है, तो इसे इकट्ठा करने के लिए (एक प्रति पंक्ति) या PAL थ्रेसहोल्ड एक्सएमएल फ़ाइल के लिए फ़ाइल लिस्टिंग प्रदर्शन काउंटरों को खिलाया जा सकता है। मुझे 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

क्या इस स्क्रिप्ट को स्थापित करने के लिए कुछ भी चाहिए (PAL या कुछ और)? यदि संभव हो तो क्या आप आउटपुट फ़ाइल का एक नमूना प्रदान कर सकते हैं? क्षमा करें, मैं PowerShell को नहीं जानता।
कोडिंगयोशी

स्थापित करने के लिए कुछ भी नहीं है। यह स्क्रिप्ट देशी विंडोज सुविधाओं को कॉन्फ़िगर करती है। यह एक PerMon कलेक्टर बनाता है, साथ ही दो अनुसूचित कार्य करता है। एक कार्य, एक रिबूट के बाद PerfMon कलेक्टर शुरू होता है। अन्य कार्य, पुरानी लॉग फ़ाइलों को साफ़ करता है। यदि आप PAL के साथ अपनी PerfMon फ़ाइलों का विश्लेषण करना चाहते हैं, तो मैं सलाह दूंगा कि PAL सेटअप हो और नॉन-प्रोडक्शन सर्वर पर चले। आसान सेटअप के लिए, यह एक PAL कॉन्फ़िगरेशन फ़ाइल पढ़ेगा।
नाथन हार्टले

3

हम इसे अक्सर करते हैं। वास्तविक वातावरण में आधार रेखा स्थापित करने के लिए यह आवश्यक भी है, इसलिए आप बाद में तुलना कर सकते हैं कि क्या समस्याएँ हैं या आपको क्षमता अध्ययन करने की आवश्यकता है।

मैं हालांकि 10 सेकंड के अंतराल से नीचे नहीं जाने की सलाह देता हूं। यदि आप कई वस्तुओं / काउंटरों को इकट्ठा कर रहे हैं और अंतराल बहुत अधिक है, तो यह संचालन को प्रभावित कर सकता है।

Microsoft के पास एक PerfMon जादूगर है जो आपके लिए कार्य सेटअप करेगा।

http://www.microsoft.com/downloads/details.aspx?FamilyID=31FCCD98-C3A1-4644-9622-FAA046D69214&displaylang=en


मैं देख रहा हूं कि 2004 में परफॉमन विजार्ड जारी किया गया था। मुझे आश्चर्य है कि अगर यह SQL सर्वर 2005 के साथ मानक आता है।
बिल पैत्ज़के

मुझे लगता है कि संस्करण अभी भी चालू है।
ग्रेग एस्क्यू

2

एक आदर्श दुनिया में जहां एक उत्पादन सर्वर वास्तव में एक देव सर्वर को दर्पण करता है, और देव सर्वर का एक सटीक डुप्लिकेट भी होता है, उत्पादन सर्वर पर परफ्यूम की कभी आवश्यकता नहीं होनी चाहिए क्योंकि परिणाम देव सर्वर पर समान होंगे। बेशक, पौराणिक स्थिति कभी नहीं होती है, इसलिए हमें उत्पादन सर्वर पर परफ़ॉर्म चलाने की आवश्यकता है और इसके साथ कुछ भी गलत नहीं है। अन्य चीज़ों के बीच, हमें यह जानने के लिए परफ़ॉर्म और अन्य टूल का उपयोग करने की आवश्यकता हो सकती है कि उत्पादन सर्वर देव सर्वर के समान व्यवहार क्यों नहीं कर रहा है।


2

परफ्यूम क्यों? मेरा मतलब है, SQL सर्वर के हाल के संस्करणों में प्रदर्शन काउंटरों के (केंद्रीय) डेटा वेयरहाउस के निर्माण के अपने तरीके हैं, जिन्हें तब विरोध किया जा सकता है और रिपोर्ट किया जा सकता है। वहाँ परफ़ॉर्म चलाने में शून्य बोध है।

मैं हमेशा की तरह, यहाँ उन सभी पदों से चकित हूँ, जो स्पष्ट रूप से प्रलेखन को कभी नहीं पढ़ते हैं;)

http://www.simple-talk.com/sql/learn-sql-server/sql-server-2008-performance-data-collector/ एक अच्छी शुरुआत है। IMHO जो उत्पादन उद्देश्यों के लिए उपयोग किए जाने वाले लगभग हर sql सर्वर पर काम करना चाहिए।


1

परफ्यूम को चलाने में कुछ भी गलत नहीं है जैसा कि कई ने सुझाव दिया है, लेकिन मैं प्रोवाइलर चलाऊंगा या इसके अलावा, एक ही कैविटीज के साथ, बहुत अधिक बार कैप्चर नहीं करूंगा, बस लॉन्ग रनिंग क्वेश्चन कैप्चर करूंगा, यानी ड्यूरेशन> x सेकंड्स या cpu> xx , या पढ़ता है> xxxx; बहुत कम प्रभाव, और आप जल्दी से उन प्रश्नों को देखेंगे जो ट्यूनिंग से सबसे अधिक लाभान्वित होंगे।


आप अवधि, सीपीयू और रीड्स के आधार थ्रेसहोल्ड के रूप में क्या उपयोग करते हैं?
बिल पैत्ज़के

यह एप्लिकेशन पर निर्भर करता है, लेकिन मैं अवधि के साथ शुरू करूंगा> (अधिकतम समय मैं किसी भी उपयोगकर्ता को कुछ भी इंतजार करना चाहता हूं); बहुत अधिक, 10 सेकंड या उससे अधिक शुरू करें, अगर आपको कुछ भी नहीं मिलता है, तो महान, इसे थोड़ा नीचे करें। गारंटी है कि आपको शीर्ष पर कुछ आश्चर्य "फ्लोट" होगा।
SqlACID

..और मैं अवधि के साथ शुरू करूंगा, केवल सीपीयू का उपयोग करें यदि आपको लगता है कि आप सीपीयू-बाउंड हैं, तो काउंटर पढ़ें या लिखें यदि आप I / O- बाध्य हैं, लेकिन अवधि का उपयोग करें यदि आपको यकीन नहीं है कि अड़चनें कहां हैं, या बस , जैसा आपने कहा, जो हो रहा है उसके लिए एक महसूस करने की कोशिश कर रहा है।
स्क्लैकिड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.