The following SQL Server configuration parameters impact performance or performance-related resources. Each configuration parameter is defined with respect to its function and its impact on performance.
Performance impact—Physical memory is used by SQL Server for server operation overhead, data (buffer) cache, and procedure cache. Therefore, to reduce SQL Server page faults, an appropriate amount of memory should be configured.
Performance impact—SQL Server for Windows NT uses the asynchronous I/O capability of the Windows NT operating system, which includes the Win32 API calls ReadFile(), ReadFileEx(), WriteFile(), and WriteFileEx(). For more information, see the Win32 SDK. Asynchronous, or overlapped I/O, refers to the ability of a calling program to issue an I/O request without waiting for completion to continue with another activity. When the I/O finishes, the operating system will notify the program by using a callback or other Win32 synchronization mechanism.
This has two main advantages. First, it makes implementation easier for an application designer, since the operating system can be used to perform asynchronous I/O rather than having to simulate this capability in the application. Second, the multiple outstanding I/O requests can drive certain high performance disk subsystems at greater performance levels than would be otherwise possible. This is generally only possible with very high-performance, intelligent, disk subsystems because only these types of systems have the specific features necessary to rapidly accept multiple asynchronous I/O requests from a Win32 application such as SQL Server.
On these systems, increasing the max async IO parameter of SQL Server can result in performance improvements during very disk-intensive operations. The actual setting used for this parameter and the resultant performance increase will vary depending on the exact hardware and database I/O profile. It should not be set arbitrarily high, since inordinate asynchronous I/O consumes system resources.
The set working set size parameter (set with sp_configure or SQL Enterprise Manager) can disable the locking of memory as a working set. If "out of memory" errors occur, you may have too much memory assigned to SQL Server.
Performance impact—Having a properly-sized procedure cache results in fewer page faults with respect to use of stored procedures, triggers, rules, and defaults.
Performance impact—Each user connection requires 40K of memory. Therefore, increasing user connections will increase the amount of memory needed for SQL Server overhead, thereby reducing the memory available for the data (buffer) and procedure caches. Worker threads is another fixed cost. Each allocated thread deducts from the memory available for procedure and data cache. Consequently, more physical memory may be required to maintain cache performance levels.
Performance impact—Each open database resource consumes 650 bytes of memory. Therefore, increasing the number of open databases increases the amount of memory needed for SQL Server overhead, thereby reducing the memory available for the data (buffer) and procedure caches. Consequently, more physical memory may be required to maintain cache performance levels.
Note You should consider increasing the lock value to 10,000.
Performance impact—Each lock consumes 60 bytes of memory. Therefore, increasing the number of locks will increase the amount of memory needed for SQL Server overhead, thereby reducing the memory available for the data (buffer) and procedure caches. Consequently, more physical memory may be required to maintain cache performance levels.
Note You should not hesitate to increase the open objects value to 1,000 for many situations; consider increasing it to as high as 5,000.
Performance impact—Each open object requires 240 bytes of memory. Therefore, increasing the number of open objects will increase the amount of memory needed for SQL Server overhead, thereby reducing the memory available for the data (buffer) and procedure caches. Consequently, more physical memory may be required to maintain cache performance levels.
Performance impact—The fill factor percentage affects SQL Server performance because SQL Server must split an index page when it becomes full. Thus, maintaining a small fill factor on an index that is associated with a very dynamic table results in fewer page splits, fewer index entries per page, and a longer index page chain. Conversely, a high fill factor on a read-only table is perfectly acceptable and results in full index pages and a shorter index page chain.
Performance impact—If time slice is set too low, SQL Server will spend too much time switching between processes. Conversely, if time slice is set too high, waiting processes can experience long response times. The default of 100 is generally adequate and should seldom be changed.
Note Do not change this value from its default except when you are directed to do so by your primary support provider.
Performance impact—Forcing tempdb into RAM can result in increased performance if a significant amount of processing involves the creation and use of worktables by the SQL Server optimizer. Execution of such processing in RAM is inherently faster than corresponding disk I/O from paging.
Performance impact—With the lazy writer process available in SQL Server, it is not necessary to tune the checkpoint interval for optimum performance. In fact, you can set the recovery interval very high to ensure that checkpointing occurs infrequently when performance is important. Remember however, that increasing the period between checkpoints also increases the time SQL Server takes to perform automatic recovery when the database is restarted after an ungraceful shutdown (power failure, hardware failure, and so on).
When configuring your SQL Server, start with the default values and experiment with changing parameter values once you have obtained a baseline of performance. When adjusting parameters to tune performance, adjust one parameter at a time and measure the difference in performance; changing multiple parameters in an ad hoc fashion is generally not productive.