SQLServer调整最大内存优化性能

1. SQLServer最大内存优化性能概述

SQLServer是一个占用大量内存的软件,在运行过程中需要大量的内存空间来存储数据和执行程序,这对服务器的性能带来了很大的影响。为了保证SQLServer的性能,需要对其最大内存进行优化。最大内存的设置是SQLServer性能优化中非常关键的一部分。正确地设置最大内存能够提高SQLServer的性能和可靠性,但是不正确地设置最大内存反而可能导致SQLServer变慢,甚至崩溃。

2. 最大内存的设置

2.1. 最大内存的默认设置

SQLServer 2016和2017的默认最大内存设置如下:

SELECT name, value, value_in_use, [description]

FROM sys.configurations

WHERE name = 'max server memory (MB)'

输出结果如下:

name value value_in_use description

---------------- ------ ------------ ------------

max server memory (MB) 2147483647 2147483647 Maximum size of server memory (MB)

可以看到,最大内存的默认设置是2147483647 MB,也就是说,SQLServer的最大内存会占用所有可用内存。这对于一个单独运行SQLServer的服务器来说是完全可以接受的,但是对于一个共享资源的服务器来说,这将会极大地影响其他应用程序的运行。

2.2. 最大内存的设置建议

在一个共享资源的服务器上,建议将SQLServer的最大内存设置在物理内存的80%左右。具体来说,如果服务器有16 GB的内存,那么最大内存应设置在13 GB左右。

如果服务器只运行SQLServer,而且没有其他应用程序需要使用内存,那么可以将SQLServer的最大内存设置为物理内存的90%以上,以提高SQLServer的性能。

3. 最大内存设置的优化

3.1. 检查系统配置

在进行最大内存设置之前,应该检查系统的配置,以确保最大内存设置得当。可以使用sys.dm_os_sys_info视图来检查系统的配置,如下所示:

SELECT *

FROM sys.dm_os_sys_info

输出结果如下:

physical_memory_kb virtual_memory_kb committed_kb committed_target_kb system_cache_kb kernel_total_virtual_size_kb kernel_paged_pool_kb kernel_nonpaged_pool_kb system_critical_threads system_free_space_kb system_process_count system_processor_count system_vm_committed_kb system_vm_reserved_kb system_cache_resident_kb percent_physical_memory_in_use percent_processor_time sqlserver_start_time affinity_type_desc max_workers_count scheduler_count os_quantum_length_ms os_error_mode_desc virtual_machine_type_desc softnuma_configuration_desc os_priority_class_desc os_scheduler_in_softnuma_desc os_affinity64_desc process_physical_affinity process_affinity_mask

------------------- ----------------- ------------- ------------------- --------------- ----------------------------- ---------------------- ------------------------ ----------------------- --------------------- --------------------- ------------------------ ------------------------- ---------------------- --------------------------- ------------------------------ ------------------------ --------------------- ------------------------ --------------- -------------- --------------------- ------------------------ --------------------------- ----------------------------- ------------------------- --------------------------- ------------------ -------------------

16971256 134217727 924032 2046051 8454240 2220352 417104 12932 47 168116676 139 16 319 90 0 12 89.85233026 Nov 26 2021 9:30PM AUTO NULL 262144 15.625 NULL NULL NONE AUTO PER_NODE AUTO 0x1fffff

从该视图中,可以得到服务器的物理内存大小,以及其他一些关键参数。

3.2. 检查当前使用内存

在进行最大内存设置之前,应该检查SQLServer当前使用的内存情况。可以使用以下查询来检查SQLServer当前使用的内存情况:

SELECT

physical_memory_in_use_kb / 1024 as physical_memory_used,

locked_page_allocations_kb / 1024 as locked_page_allocations_used,

virtual_address_space_reserved_kb / 1024 as virtual_address_space_used,

virtual_address_space_committed_kb / 1024 as virtual_address_space_committed

FROM sys.dm_os_process_memory

输出结果如下:

physical_memory_used locked_page_allocations_used virtual_address_space_used virtual_address_space_committed

-------------------- ---------------------------- --------------------------- ---------------------------------

13389 1933 356033 506694

从该查询结果中,可以看到SQLServer当前使用的内存大小,以及已锁定页面分配的内存大小等信息。

3.3. 最大内存的设置步骤

进行最大内存设置的步骤如下:

检查系统配置与当前使用内存情况。

计算最大内存大小。

执行最大内存设置。

4. 计算最大内存大小

计算最大内存大小的公式如下:

max server memory (MB) = (physical_memory_in_bytes / 1024 / 1024) * 0.8

该公式将物理内存大小除以1024,然后再除以1024,得到物理内存大小的MB表示。最终结果乘以0.8,得到最大内存大小。

5. 执行最大内存设置

在进行最大内存设置之前,需要关闭数据库引擎服务。可以使用以下命令关闭数据库引擎服务:

net stop MSSQLSERVER

关闭数据库引擎服务后,可以使用以下命令来设置最大内存:

sp_configure 'max server memory (MB)', '13000'

GO

RECONFIGURE

GO

该命令将最大内存设置为13000 MB。执行完毕后,需要重新启动数据库引擎服务:

net start MSSQLSERVER

重启数据库引擎服务后,最大内存设置就生效了。

6. 总结

SQLServer的最大内存设置对SQLServer的性能和可靠性有着非常重要的影响。在进行最大内存设置之前,需要检查系统的配置和当前使用内存情况,计算最大内存大小,然后执行最大内存设置。设置最大内存大小的公式是:(physical_memory_in_bytes / 1024 / 1024) * 0.8。

数据库标签