• SharePoint Performance Monitoring

    This is an AS-IS post on how to setup Performance Monitoring for SharePoint Servers.

     

    1. Ensure that the instructions in http://support.microsoft.com/kb/281884 are followed. This will allow for the Process ID value to be included as part of the process monitor data that is being captured

    To enable or to disable PIDs in process names, follow these steps:

    a.  Click Start, click Run, type regedit, and then click OK.

    b.  Locate and then click the following registry subkey:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance

    c.  On the Edit menu, click New, and then click DWORD Value.

    d.  Right-click New Value #1, click Rename, and then type ProcessNameFormat to name the new value.

    e.  Right-click ProcessNameFormat, and then click Modify.

    f.  In the Data value box, type one of the following values, and then click OK:

    1: Disables PID data. This value is the default value.

    2: Enables PID data.

    g.  Exit Registry Editor.

    Important: If you enable this feature, you may be unable to monitor process-specific information by using third-party utilities or custom-made programs.

    2. The following counters will be collected on all SharePoint Servers that this is run on:

    \ASP.NET(*)\*
    \ASP.NET v2.0.50727\*
    \ASP.NET Apps v2.0.50727(*)\*
    \.NET CLR Networking(*)\*
    \.NET CLR Memory(*)\*
    \.NET CLR Exception(*)\*
    \.NET CLR Loading(*)\*
    \.NET Data Provider for SqlServer(*)\*
    \Processor(*)\*
    \Process(*)\*
    \LogicalDisk(*)\*
    \Memory\*
    \PhysicalDisk(*)\*
    \SharePoint Publishing Cache(*)\*
    \Web Service(*)\*
    \Web Service Cache\*
    \SharePoint Search Archival Plugin(*)\*
    \SharePoint Search Gatherer\*
    \SharePoint Search Gatherer Project(*)\*
    \SharePoint Search Indexer Catalogs(*)\*
    \SharePoint Search Schema Plugin(*)\* 

     

    3. Create a text file named CounterList.txt that contains the counter set detailed above.

     

    4.  From a command line, issue the following command on the index server. You will need to change the drive letters & locations so that they are appropriate for your environment. Substitute the domain\userid  and CompanyName in the appropriate section of the command below.  Please use the application pool service account credentials that SharePoint Timer Service is running under in order to ensure that we have access to the appropriate counters.

     Note: The asterik * will cause you to be prompted for the Domain\UserID account password.

     

    Running the Baseline Counters all of the time is a good idea to capture historic performance of your SharePoint servers.  If you have a performance issue you can add Incident Counters to capture more data samples.  The command should resemble the following: Baseline counters.

    Baseline Counters

     

    logman create counter CompanyName_SP_Performance_Baseline -s %COMPUTERNAME% -o c:\PerfLogs\CompanyName_SP_Performance_Baseline_%COMPUTERNAME%.blg -f bin -v mmddhhmm -cf CounterList.txt -si 00:01:00 -cnf 12:00:00 -b 4/29/2009 6:00AM -u "domain\userid" *

     

    Important: Incident counters should only be run during performance problems and are intended for troubleshooting purposes.

    Incident Counters

     

    logman create counter CompanyName_ISP_Performance_Incident -s %COMPUTERNAME% -o c:\PerfLogs\CompanyName_SP_ Performance_Incident_%COMPUTERNAME%.blg -f bin -v mmddhhmm -cf CounterList.txt -si 00:00:05 -max 500 -u "domain\userid" *

  • Tactical Performance for SharePoint and SQL - References

    SharePoint Configuration References

    Hardware and software requirements for SharePoint 2013
    http://technet.microsoft.com/en-us/library/cc262485.aspx


    SharePoint 2010 Best Practices
    http://social.technet.microsoft.com/wiki/contents/articles/8666.sharepoint-2010-best-practices.aspx?PageIndex=2

    SharePoint 2010: Tips for Dealing with Performance Issues
    http://social.technet.microsoft.com/wiki/contents/articles/7926.sharepoint-2010-tips-for-dealing-with-performance-issues.aspx

    Whitepaper: Database Maintenance for Microsoft SharePoint Products and Technologies
    http://go.microsoft.com/fwlink/?LinkId=111531&clcid=0x409

    How to Disable the 8.3 Name Creation on NTFS Partitions
    http://support.microsoft.com/kb/121007

    Enable High Performance power plan
    Configuring a Power Plan with Group Policy Preferences
    http://blogs.technet.com/b/grouppolicy/archive/2009/09/30/configuring-a-power-plan-with-group-policy-preferences-by-alan-burchill.aspx

    SharePoint Cache Settings
    http://technet.microsoft.com/en-us/library/cc770229.aspx
    http://technet.microsoft.com/en-us/library/cc261797.aspx
    http://msdn.microsoft.com/en-us/library/ff647588.aspx
    http://office.microsoft.com/en-us/sharepoint-server-help/configure-page-output-cache-settings-HA010120686.aspx
    http://office.microsoft.com/en-us/sharepoint-server-help/configure-disk-based-cache-settings-HA010176284.aspx
    http://office.microsoft.com/en-us/sharepoint-server-help/configure-object-cache-settings-HA010157783.aspx

     

    Tools


    Performance Analysis of Logs (PAL) Tool
    http://pal.codeplex.com/
    http://www.youtube.com/watch?v=8fxEs3pPmNI

    Log Parser 2.2
    http://www.microsoft.com/en-us/download/details.aspx?id=24659

    Using the Performance Analysis of Logs (PAL) Tool
    http://msdn.microsoft.com/en-us/library/cc296652(v=bts.10).aspx

    Process Monitor v3.05
    http://technet.microsoft.com/en-us/sysinternals/bb896645

    Process Explorer
    http://technet.microsoft.com/en-us/sysinternals/bb896653

    ULSViewer
    http://archive.msdn.microsoft.com/ULSViewer/Release/ProjectReleases.aspx?ReleaseId=3308
    http://www.jeremytaylor.net/2012/07/14/sharepoint-uls-log-viewer-tool-comparison-and-verdict/

    Using the Developer Dashboard
    http://msdn.microsoft.com/en-us/library/ff512745(v=office.14).aspx
    http://blogs.technet.com/b/patrick_heyde/archive/2009/11/16/sharepoint-2010-enable-using-developer-dashboard.aspx
    https://blogs.technet.com/b/speschka/archive/2009/10/28/using-the-developer-dashboard-in-sharepoint-2010.aspx

    Enable ASP.NET profiling.
    http://social.technet.microsoft.com/wiki/contents/articles/7926.sharepoint-2010-tips-for-dealing-with-performance-issues.aspx


    How to: Configure ASP.NET Profiler for Load Tests Using Test Settings in Visual Studio
    http://msdn.microsoft.com/en-us/library/dd504817.aspx

    Debugging, Tracing, and Profiling
    http://msdn.microsoft.com/en-us/library/7fe0dd2y(v=vs.110).aspx

    Internet Explorer Debugging Script with the Developer Tools
    http://msdn.microsoft.com/en-us/library/dd565625(v=vs.85).aspx
    http://blogs.msdn.com/b/cbowen/archive/2011/05/25/internet-explorer-9-developer-tools-deep-dive-part-1-introduction.aspx

    IIS Log Analysis Tools
    https://ilf.codeplex.com/

     

    Performance Monitoring for SharePoint References

    PowerShell script for monitoring SharePoint WFE's and SQL Server back-ends
    http://gallery.technet.microsoft.com/PowerShell-script-for-59cf3f70

    Monitoring and maintaining SharePoint Server 2013
    http://technet.microsoft.com/en-us/library/ff758658.aspx

    Performance Counters Reference (IIS 6.0)
    https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0a6c9f07-a70c-4c3d-b93d-5dfef593c744.mspx

    Windows Server 2003 Performance Counters Reference
    http://technet.microsoft.com/en-us/library/cc776490(v=ws.10).aspx

    ASP.NET Performance Monitoring, and When to Alert Administrators
    http://msdn.microsoft.com/en-us/library/ms972959.aspx

    Bottleneck-Detection Counters
    http://technet.microsoft.com/en-us/library/cc779038(v=ws.10).aspx

    Processor Object
    http://technet.microsoft.com/en-us/library/cc786359(v=ws.10).aspx

    Memory Object
    http://technet.microsoft.com/en-us/library/cc778082(v=ws.10).aspx

    Physical Disk Object
    http://technet.microsoft.com/en-us/library/cc776376(v=ws.10).aspx

    LogicalDisk Object
    http://technet.microsoft.com/en-us/library/cc784596(v=ws.10).aspx

    Request Execution Time
    http://technet.microsoft.com/en-us/library/cc738099(v=ws.10).aspx

    Current Anonymous Users
    http://technet.microsoft.com/en-us/library/cc783067(v=ws.10).aspx

    Connection Attempts/sec
    http://technet.microsoft.com/en-us/library/cc783067(v=ws.10).aspx

    Current Connections
    http://technet.microsoft.com/en-us/library/cc783067(v=ws.10).aspx


    Troubleshooting

    SharePoint Performance Troubleshooting
    http://blogs.technet.com/b/patrick_heyde/archive/2010/05/08/sharepoint-performance-troubleshooting-part-2.aspx

    Engaging Microsoft with SharePoint performance issues
    http://blogs.msdn.com/b/russmax/archive/2009/01/28/test.aspx

    Configuring Performance Monitor Log for SharePoint Performance Issues
    http://blogs.msdn.com/b/russmax/archive/2009/05/27/configuring-performance-monitor-log-for-sharepoint-performance-issues.aspx

     

    SQL Best Practices

    Best practices for SQL Server in a SharePoint Server farm
    http://technet.microsoft.com/en-us/library/hh292622.aspx

     

    Blogs

    Bill Baer
    http://blogs.technet.com/b/wbaer/

    Mark Russinovich
    http://blogs.technet.com/b/markrussinovich/

    Russ Maxwell
    http://blogs.msdn.com/b/russmax

    Patrick Heyde
    http://blogs.technet.com/b/patrick_heyde

    SharePoint Escalation Services Team
    http://blogs.msdn.com/b/spses

    Steve Peschka
    https://blogs.technet.com/b/speschka

    Stefan Goßner
    http://blogs.technet.com/b/stefan_gossner/


    Books

    Mark Russinovich

    • Windows Internals, Part 1
    • Windows Internals, Part 2


    Scot Hillier, Mirjam van Olst, Ted Pattison, Andrew Connell, Wictor Wilen, Kyle Davis

    • Inside Microsoft SharePoint 2013

    David Mann, Ted Pattison, Andrew Connell, Scot Hillier

    • Inside Microsoft SharePoint 2010

  • Activating Windows with PowerShell

    You want to activate Windows using PowerShell?  Here you go:

    $computer = gc env:computername

    $key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"

    $service = get-wmiObject -query "select * from SoftwareLicensingService" -computername $computer

    $service.InstallProductKey($key)

    $service.RefreshLicenseStatus()

     

    Note: $key will be followed by your legally obtained product key :) 

  • Renaming SharePoint 2013 Search databases

    If you have had trouble moving your SharePoint 2013 Search Databases using the TechNet article below. 
     
    Move the Search service application databases in SharePoint 2013


    This article may help.

    First: The original databases need to be online with their original names for these PowerShell scripts to work. The only way to get this to work is to backup each database and restore them as new databases with the new names. Then you can run the PowerShell scripts to allow the Search service to use the new databases.

    Second: Step 6 has some typos in it.

    $LinksDatabase0 = ([array]($searchApp | Get-SPEnterpriseSearchLinksDatabase))[0]

    $LinksDatabase0 | Set-SPEnterpriseSearchLinkDatabase [-DatabaseName "<NewDbName>"] -DatabaseServer "<NewServerName>"

    • Set-SPEnterpriseSearchLinkDatabase is not a valid commandlet. 

      Set-SPEnterpriseSearchLinksDatabase is the correct commandlet. Links is plural.

    • $searchApp variable has not been declared. $ssa is the variable that needs to be used for consistency .

    Making these changes should make the database move work.

  • MinimaList SharePoint WarmUp Script

    In the spirit of Minimalism I have decided to create the simplest SharePoint warm up script that I could.  There are plenty of warm up scripts on the web.  Many of them are convoluted and difficult to manage.  This shouldn't be that difficult.  All you need to do is enumerate your web applications and site collections.  Then make a simple web call to each of them using the correct credentials.  Once you have that all you need is a scheduled task to hit them on regular intervals. 

    So here it is:

    $wc = New-Object net.WebClient

    $wc.Credentials = [System.Net.CredentialCache]::DefaultCredentials

    Get-SPSite | ForEach {$wc.DownloadString($_.url)}

     

    Bing! Simple right?

    This will not hit the Central Administration site.  To do this  just add the following 2 lines.

    $caUrl = "*http://servername:5555"

    $wc.DownloadString($caUrl)

     *Specify your specific central admin url.

    ______________________________________________________________________________________________________________

    1. Create a PS1 file called warmup.ps1 and put these line in it:

    $wc = New-Object net.WebClient

    $wc.Credentials = [System.Net.CredentialCache]::DefaultCredentials

    Get-SPSite | ForEach {$wc.DownloadString($_.url)}

    $caUrl = "http://servername:5555"

    $wc.DownloadString($caUrl)

     

    2. Create a batch file with this line in it:

     powershell -command "& 'c:\warmup.ps1'"

     

    3. Next you will need to setup a scheduled task.  Open Task Scheduler > Create New Task… >

    embedded folder icon

     If you run this as hidden you will not see a popup.  Ensure that the task runs whether the user is logged on or not.

    embedded folder icon

    Set to run Daily and repeat every 10 minutes or so.  I like to ensure that the sites are fresh more often.

    embedded folder icon

    Select the warm up batch file that you just created.

    embedded folder icon

    Finally set the account that will run the scheduled task.  I would use the SharePoint System Account

    embedded folder icon

    ______________________________________________________________________________________________________________

    TESTING

    On your SharePoint server temporarily change your Internet Explorer home pages to hit all of your site collections or at least web applications including Central Admin.

    Test from a command line:

    iisreset

    powershell -command "& 'c:\warmup.ps1'"

    "C:\Program Files\Internet Explorer\iexplore.exe"

     You should see your sites load very quickly.  As always please test before you try this on your production farm.