functions/Test-DbaOptimizeForAdHoc.ps1
Function Test-DbaOptimizeForAdHoc { <# .SYNOPSIS Displays information relating to SQL Server Optimize for AdHoc Workloads setting. Works on SQL Server 2008-2016. .DESCRIPTION When this option is set, plan cache size is further reduced for single-use adhoc OLTP workload. More info: https://msdn.microsoft.com/en-us/library/cc645587.aspx http://www.sqlservercentral.com/blogs/glennberry/2011/02/25/some-suggested-sql-server-2008-r2-instance-configuration-settings/ These are just general recommendations for SQL Server and are a good starting point for setting the "optimize for adhoc workloads" option. .PARAMETER SqlServer Allows you to specify a comma separated list of servers to query. .PARAMETER SqlCredential Allows you to login to servers using SQL Logins as opposed to Windows Auth/Integrated/Trusted. To use: $cred = Get-Credential, this pass this $cred to the param. Windows Authentication will be used if DestinationSqlCredential is not specified. To connect as a different Windows user, run PowerShell as that user. .NOTES Author: Brandon Abshire, netnerds.net dbatools PowerShell module (https://dbatools.io, clemaire@gmail.com) Copyright (C) 2016 Chrissy LeMaire This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. .LINK https://dbatools.io/Test-DbaOptimizeAdHoc .EXAMPLE Test-DbaOptimizeAdHoc -SqlServer sql2008, sqlserver2012 Get Optimize for AdHoc Workloads setting for servers sql2008 and sqlserver2012 and also the recommended one. #> [CmdletBinding()] Param ( [parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $True)] [Alias("ServerInstance", "SqlInstance", "SqlServers")] [string[]]$SqlServer, [System.Management.Automation.PSCredential]$SqlCredential ) BEGIN { $notesAdHocZero = "Recommended configuration is 1" $notesAsRecommended = "Configuration is as recommended" } PROCESS { foreach ($servername in $sqlserver) { Write-Verbose "Attempting to connect to $servername" try { $server = Connect-SqlServer -SqlServer $servername -SqlCredential $SqlCredential } catch { Write-Warning "Can't connect to $servername or access denied. Skipping." continue } if ($server.versionMajor -lt 10) { Write-Warning "This function does not support versions lower than SQL Server 2008 (v10). Skipping server $servername." Continue } #Get current configured value $optimizeAdHoc = $server.Configuration.OptimizeAdhocWorkloads.ConfigValue #Setting notes for optimize adhoc value if ($optimizeAdHoc -eq 1) { $notes = $notesAsRecommended } else { $notes = $notesAdHocZero } [pscustomobject]@{ Instance = $server.Name CurrentOptimizeAdHoc = $optimizeAdHoc RecommendedOptimizeAdHoc = 1 Notes = $notes } } } } |