ptg 2314 CHAPTER 55 Configuring, Tuning, and Optimizing SQL Server Options are limited to that maximum number of user connections until you specify a larger value. If you specify a value other than 0, the memory allocation for user connections is allocated at SQL Server startup time, and it burns up portions of the memory pool. Each connection takes up 40KB of memory space. For instance, if you configure SQL Server for 100 connec- tions, SQL Server pre-allocates 4MB (40KB × 100) for user connections. You can see that setting this value too high might eventually impact performance because the extra memory could instead be used to cache data. In general, user connections are best left to be self-configuring. The following is an example of this option: exec sp_configure ‘user connections’, 300 go RECONFIGURE go In Figure 55.6, you can see the current setting of 0 (unlimited) for the user connections value within SSMS. If you plan to set this option, the value must be between 5 and 32,767. FIGURE 55.6 The Connections page of the Server Properties dialog in SSMS. ptg 2315 Configuration Options and Performance 55 user options Type: Basic Default value: 0 The user options parameter allows you to specify certain defaults for all the options allowed with the SET T-SQL command. Individual users can override these values by using the SET command. You are essentially able to establish these options for all users unless the users override them for their own needs. User options is a bitmask field, and each bit represents a user option. Table 55.1 outlines the values you can set with this parameter. TABLE 55.1 Specifying User Options Values Bitmask Value Description 1 DISABLE_DEF_CNST_CHK controls interim/deferred constraint checking. 2 IMPLICIT_TRANSACTIONS controls whether a transaction is started implicitly when a statement is executed. 4 CURSOR_CLOSE_ON_COMMIT controls the behavior of cursors after a commit has been performed. 8 ANSI_WARNINGS controls truncation and nulls in aggregate warnings. 16 ANSI_PADDING controls padding of fixed-length variables. 32 ANSI_NULLS controls null handling when using equality operators. 64 ARITHABORT terminates a query when an overflow or divide-by-zero error occurs during query execution. 128 ARITHIGNORE returns NULL when an overflow or divide-by-zero error occurs during a query. 256 QUOTED_IDENTIFIER differentiates between single and double quotation marks when evaluating an expression. 512 NOCOUNT turns off the message returned at the end of each statement that states how many rows were affected by the statement. 1024 ANSI_NULL_DFLT_ON alters the session’s behavior to use ANSI compatibility for nullability. New columns that are defined without explicit nullability are defined to allow NULL values. 2048 ANSI_NULL_DFLT_OFF alters the session’s behavior to not use ANSI compatibility for nullability. New columns defined without explicit nullability are defined not to allow NULL values. ptg 2316 CHAPTER 55 Configuring, Tuning, and Optimizing SQL Server Options For a given user connection, you can use the @@options global variable to see the values that have been set. The following is an example of this option: exec sp_configure ‘user options’, 256 go RECONFIGURE Go Again, a user can override these values with the SET command during a session. XP-Related Configuration Options Type: Advanced Default: 0 A handful of advanced options are available with SQL Server 2008 to more granularly address the execution of extended stored procedures within different SQL server components: Agent XPs Database Mail XPs Replication XPs Option SMO and DMO XPs SQL Mail XPs xp_cmdshell Each of these options defaults to 0, which means external stored procedures for these areas are not available in the instance. If you enable these options, you should fully understand that doing so opens these extended stored procedures to all on the instance. As SQL Server 2008 expands in use, some of these options will probably be highlighted in more detail as more real-world examples support their use and attention. TABLE 55.1 Specifying User Options Values Bitmask Value Description 4096 CONCAT_NULL_YIELDS_NULL has SQL Server return a NULL when concatenating a NULL value with a string. 8192 NUMERIC_ROUNDABORT has SQL Server generate an error if loss of precision ever occurs in an expression. 16344 XACT_ABORT has SQL Server roll back a transaction if a T-SQL statement raises a runtime error. ptg 2317 Database Engine Tuning Advisor 55 Database Engine Tuning Advisor Database Engine Tuning Advisor is a decent supplement for the SQL Server performance options. It is not the hottest offering from Microsoft, but it can be valuable in enforcing some basic design options in regard to partitioning, indexing, and basic table structures. You can use either the GUI version of the DTA or the batch command-line version to achieve the same results. With DTA, you can run an analysis against an entire database or just focus on as little as one table within a database. Say that you have one problem child table that is at the heart of all your misery. In this case, you would probably just want to tune that one table for optimal database access. To tune and analyze anything, DTA must base its analysis on something. That something is usually a set of SQL queries that represent the “workload” of data accesses you want the database to support well. These data accesses (that is, the workload) can be attained in many ways. One way is to create a SQL script that contains any or all of the data accesses you want considered in the tuning effort; another is to simply capture real SQL transac- tions by using SQL Profiler traces. You can easily retain these traces in .trc file form or keep the captured SQL traces in a SQL table. In the example you are about to run, a SQL trace was done against the AdventureWorks database and stored in table form (in SQL Server). You will see how to use this captured workload representation in the next section. Let’s first look at the GUI version. The Database Engine Tuning Advisor GUI From the Tools menu in SSMS, you can select the Database Engine Tuning Advisor option to invoke the GUI for DTA. (You can also invoke this GUI by selecting Start, All Programs, Microsoft SQL Server 2008, Performance Tools, Database Engine Tuning Adviser Program from your desktop.) You are asked to initiate a new session for doing database tuning analysis. NOTE It’s best not to run the DTA against a live production database. You should make a copy of the database in a safe place for this type of detailed analysis. You should use a copy of the production database, though, because you want all decisions to be based on reality, and your workload should also reflect true production data accesses. When you are connected to the target SQL Server platform, a default for a session name appears; it is the user’s name and the date on which the analysis is being done. Figure 55.7 shows this new session start and the specification of what workload to use for the analysis. As you can also see in Figure 55.7, you specify a workload location where you have stored the SQL traces that are to be used for the analysis. This can be to a file or table location; DTA Example trace ASDB.trc in this example. You then specify AdventureWorks as the database for workload analysis to start in. Any USE database commands in the trace (or script) would be executed, but you want this analysis to start in a certain place. Then you select the database to tune from the bottom list of databases (again, the AdventureWorks ptg 2318 CHAPTER 55 Configuring, Tuning, and Optimizing SQL Server Options FIGURE 55.7 Database Engine Tuning Advisor new session setup. database in this example). If you click the Selected Tables drop-down for the AdventureWorks database, as shown in Figure 55.8, you could further limit what you want to tune down to an individual table level. In this example, you tune the entire database. You then click the Tuning Options tab to select exactly what you want to tune for. Figure 55.9 shows the various tuning options. For this example, you tune all indexes, use no partitioning, and keep all existing physical data structures as the first tuning analysis you want the DTA to do. Someday, Microsoft FIGURE 55.8 Database Engine Tuning Advisor selected tables for tuning. ptg 2319 Database Engine Tuning Advisor 55 FIGURE 55.9 Database Engine Tuning Advisor tuning options to use for this session. will triple the tuning types here, but for now, the offerings are limited. The Advanced Options button allows you to specify the maximum number of columns that could be contained in a new index recommendation (1,023 columns), whether DTA should gener- ate only SQL DDL that can be executed online, and the maximum space that DTA can utilize for physical structure changes. The defaults for these settings are typically suffi- cient. Now, you simply click the Start Analysis menu item (the one with a little green right arrow next to it) or choose Actions, Start Analysis option. Figure 55.10 shows the execu- tion progress of this analysis session. FIGURE 55.10 Database Engine Tuning Advisor tuning execution progress and tuning log. ptg 2320 CHAPTER 55 Configuring, Tuning, and Optimizing SQL Server Options The tuning log shows the SQL events, actual statements, and frequency of these state- ments (that is, the number of times the same SQL was processed). This information sheds some light on the mix of SQL hitting this database. When the progress is complete, a Recommendations tab and a Reports tab appear for this session (see Figure 55.11). Here, the DTA says that an estimated improvement of 24% can be gained if the recommenda- tions it is advising are followed. Because you wanted only index recommendations, you don’t see any partitioning recommendations. However, there are a few index recommen- dations for several tables based on the workload provided by the SQL Profiler trace file. The Reports tab shows the summary of the tuning session and all the tuning reports generated. In the Tuning Reports section at the bottom of Figure 55.12, you can see the index usage report (recommended). There are several reports, ranging from detailed index recommendations to workload analysis reports. At any time, you can choose to preview the workload of the file or table you specified for the analysis. You simply choose View, Preview Workload Table or View, Preview Workload File, and SQL Profiler is invoked with your SQL trace. If you are satisfied with the recommendations of any one of your tuning sessions, you can choose to have them saved to a .sql file and scheduled to be applied at some later time, or you can apply them immediately by selecting Actions, Apply Recommendations or Actions, Save Recommendations. It’s that simple. TIP If you regularly run the DTA with a good sampling of your typical transaction workload, you can proactively identify potential changes that will keep your application humming. FIGURE 55.11 The Database Engine Tuning Advisor Recommendations tab following analysis. ptg 2321 Database Engine Tuning Advisor 55 FIGURE 55.12 Index Usage report (recommended). The Database Engine Tuning Advisor Command Line DTA is also available in a batch mode so that you don’t have to be around to run it online (because doing so can often take hours if you have a large workload to analyze). In addi- tion, this mode allows you to run the same tests over and over, with varying options. You can easily view DTA command-line options by using the help option of the command itself (that is, the -? option). You simply run this option at the command line and have its output piped into a file for viewing in Notepad (or another editor): C:> DTA -? > dta.out Microsoft (R) SQL Server Microsoft SQL Server Database Engine Tuning Advisor command line utility Version 10.50.1352.12 ((KJ_PreRelease).091030-1758 ) Copyright(c) Microsoft Corporation. All rights reserved. Usage: DTA.EXE [-S ServerName[\Instance]] [-U LoginId] [-P Password] [-E] [-d DatabaseName] [-D DatabaseName[, DatabaseName]] [-Tl TableName[, TableName]] [-Tf TableListFileName] [-if WorkloadFileName] [-it WorkloadTableName] [-s SessionName] [-of [ScriptFileName]] [-or [ReportFileName]] ptg 2322 CHAPTER 55 Configuring, Tuning, and Optimizing SQL Server Options [-rl Report[, Report]] [-ox [OutputXmlFileName]] [-F] [-ID SessionID] [-ix InputXmlFileName] [-A TuningTime] [-n NumberOfEvents] [-m MinimumImprovement] [-fa PhysicalDesignStructure] [-fp PartitionStrategy] [-fk PhysicalDesignStructure] [-fx] [-B StorageSize] [-c MaxKeyColumnsInIndex] [-C MaxColumnsInIndex] [-e TuningLogTable] [-N OnlineOption] [-q] [-u] [-x] [-a] [-?] This output has the following components: . -S ServerName[\Instance]—Indicates the name of the SQL Server instance with which to connect. This is the server against which all tuning analysis and supporting table updates will be made. . -U LoginId—Indicates the login ID to use in establishing a connection to SQL Server (specified via the -S option). . -P Password—Specifies the password for the specified login ID. . -E—Uses a trusted connection to connect to the server. . -d DatabaseName—Identifies the database to connect to when tuning. . -D DatabaseName—Provides a list of database names for tuning. Names are sepa- rated by commas. . -Tl TableName—Provides a list of table names that should be tuned. Names are separated by commas. If only one database is specified through the -D option, table names do not need to be qualified with the database name. Otherwise, the fully qualified name, in the form [Database].[Schema].[Table], is required for each table. . -Tf TableListFileName—Indicates the name of a file containing the list of tables to be tuned. Tables listed within the file must appear on separate lines, and the names must be qualified by database name and, optionally, by schema name. The ptg 2323 Database Engine Tuning Advisor 55 optional table-scaling feature may be invoked by following the name of a table with a number that indicates the projected number of rows in that table (for example, ’[myDatabase].[dbo].[myTable] 500’). . -if WorkloadFileName—Specifies the path and filename of the workload file to use as input for tuning. These are the accepted formats: . *.trc—SQL Server Profiler trace file. . *.xml—SQL Server Profiler XML trace file. . *.sql—SQL Server script. . -it WorkloadTableName—Indicates the name of the table containing the workload trace for tuning. The name is specified as [Database].[Schema].[Table]. . -s SessionName—Specifies the name of the new tuning session. . -of ScriptFileName—Indicates that T-SQL script with recommendations should be written to a file. If a filename is supplied, the recommendations are written to that destination; otherwise, the filename is generated based on the session name. . -or ReportFileName—Indicates that the report should be written to a file. If a file- name is supplied, the report is written to that destination; otherwise, the filename is generated based on the session name. . -rl Report—Specifies the list of analysis reports to generate. You select one or more of the following: . ALL—Generate all reports. . NONE—Do not generate any reports. . STMT_COST—Statement cost report. . EVT_FREQ—Event frequency report. . STMT_DET—Statement detail report. . CUR_STMT_IDX—Statement-index relations report (current). . REC_STMT_IDX—Statement-index relations report (recommended). . STMT_COSTRANGE—Statement cost range report. . CUR_IDX_USAGE—Index usage report (current). . REC_IDX_USAGE—Index usage report (recommended). . CUR_IDX_DET—Index detail report (current). . REC_IDX_DET—Index detail report (recommended). . VIW_TAB—View-table relations report. . WKLD_ANL—Workload analysis report. . DB_ACCESS—Database access report. . > dta.out Microsoft (R) SQL Server Microsoft SQL Server Database Engine Tuning Advisor command line utility Version 10.50.1352.12 ((KJ_PreRelease).091030-1758 ) Copyright(c) Microsoft Corporation for tuning. These are the accepted formats: . *.trc SQL Server Profiler trace file. . *.xml SQL Server Profiler XML trace file. . * .sql SQL Server script. . -it WorkloadTableName—Indicates the. allocated at SQL Server startup time, and it burns up portions of the memory pool. Each connection takes up 40KB of memory space. For instance, if you configure SQL Server for 100 connec- tions, SQL Server