配置服务器

2.3 配置服务器选项

SQL Server 2019安装于服务器中,需要使用计算机的软、硬件资源。由于在同一台服务器上往往还会安装和运行其他应用程序或服务,如在一些小型网站的服务器中,,SQL Server 2019、Web Server、甚至还有邮件服务等,往往会配置在同一台服务器中,这就不可避免会出现其他应用程序或服务与SQL Server之间争夺资源的情况。为确保SQL Server拥有足够的资源,或者取得整体性能的最优化,就必须对SQL Server服务所需资源进行配置。

SQL Server 2019的服务器选项,既包括上述要求所需的配置,也包括调整SQL Server服务运行行为的选项。SQL Server 2019提供了两种方法用于配置服务器选项:采用系统存储过程sp_configure或通过SSMS进行配置。

2.3.1 SQL Server 2019服务器选项

SQL Server 2019提供的可供配置的服务器选项共计83项,这些选项可以通过系统目录试图sys.configurations在查询编辑器中进行查看。

这些服务器选项可以按多种方式进行分类。

  1. 根据选项设置值起作用情况,可以划分为动态选项和非动态选项。动态选项会在选项值设置完成,并执行RECONFIGURE语句之后起作用;非动态选项则在选项值设置完成后,并不会立即起作用,只有在SQL Server服务重启后才会起作用。如上图的结果集中,is_dynamic的取值为1的选项即为动态选项,取值为0的是非动态选项。
  2. 根据选项值设置方式的不同,可以划分为高级选项、普通选项和系统自配置项。如上图的结果集中,is_advanced列取值为1的即为高级选项。高级选项,只有在show advanced option选项设置为1时才能进行设置。系统自配置项,是系统根据运行需要由SQL Server自动配置的选项,如index create memory、max server memory等选项。除上述两类之外的选项即为普通项。

|--------------|---------------------------------------------------------------------------------------------------------------------|
| 列名 | 说明 |
| minimum | 选项可设置的最小值 |
| maximum | 选项可设置的最大值 |
| value | 选项已设置的值 |
| value_in_use | 选项起效的值 1. 动态选项在配置后会立即起效,即value列的值等于value_in_use列的值; 2. 非动态选项配置后,SQL Server重启之前不会起效,即value列的值与vlaue_in_use列的值存在不等的情况 |

2.3.2 sp_configure配置服务器选项

sp_configure是SQL Server 2019提供的系统存储过程,用于对服务器选项进行配置。这是一种命令语句的配置方式,虽然操作相对复杂,但功能强大,可以对SQL Server 2019上述所有服务器选项进行配置。

配置语法如下:

复制代码
sp_configure[[@configname=]'option_name'[,[@configvaluw=]'value']]

上式中@configname='option_name'代表需要进行配置的选项名称,@configvalue='value'为新设置值,value的数据类型为int。

例如:

复制代码
sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'default full-text language',2052
GO
RECONFIGURE
GO

上例中的语句完成了以下四项操作:

  1. 第一句将show advanced options项的值设置为1,即将高级选项设置为允许。
  2. 第三句RECONFIGURE为执行命令,使第一句生效。
  3. 第五句将default full-text language项的值设置为2052,即全文索引列的默认语言设置为简体中文。
  4. 第七句RECONFIGURE为执行命令,使第五句生效。

上述语句可以在SSMS的查询编辑器中执行,如图。

2.3.3 SSMS配置服务器选项

SSMS提供了图形化配置服务器选项的方式,这是一种最简单易用的配置方式,但是SSMS不能完成所有选项的设置。对于不能使用SSMS配置的选项,需要使用sp_configure来配置。

在SSMS中配置服务器选项,可以通过以下步骤来操作:

在"对象资源管理器"中,右击要配置的服务器,在右键菜单中选择"属性"命令,在下图"服务器属性"窗口中完成各项配置。

2.3.3.1 常规项配置

常规选项,包括:服务器名称、产品名称、操作系统及平台、处理器数量、所使用的语言、内存容量、SQL Server 2019安装目录、所使用的排序规则等。这些选项由SQL Server 2019系统安装时设置或者由服务器的硬件、操作系统类型等决定,为只读项,不能进行设置。通过"常规"选项卡,可以了解当前服务器的基本情况。

2.3.3.2 内存项配置

在上图中选项左侧的"内存"选项,切换到"内存"选项卡,可以对SQL Server使用内存情况进行设置。

  1. 最小服务器内存。此项用于设置给SQL Server保留的最小可用内存里,即便SQL Server 2019实际使用未达到此设置值,此部分内存也不会被其他应用程序占用。给SQL Server合理分配此选项,可以提高SQL Server运行的性能。
  2. 最大服务器内存。此项可以限制SQL Server最大可用的内存量。设置此项,避免SQL Server占用过多内存,可以为其他应用服务保留一定的可用内存,有助于提高服务器的整体性能和内存使用效率。
  3. 创建索引占用的内存。创建索引是一项对内存资源消耗较多的操作,可以通过合理设置此项,为创建索引分配合适的内存。默认此项设置为0,表示采用动态内存,即由系统动态为索引创建操作分配内存。
  4. 每次查询占用的最小内存。查询操作是各项数据操作中使用最频繁的操作之一。为避免SQL Server服务响应查询请求时出现内存不足的问题,可事先在此项中设置合理的数值。此项默认值为1024KB。
  5. 配置值与运行值。SQL Server服务器选项的值,可以分为配置值(vlaue列)和运行值(value_in_use列)。运行值是指系统当前实际运行过程中选项的取值。但是,由于有些选项的设置值需要执行RECONFIGURE或重启SQL Server服务才能起作用,。因此,配置值与运行值有可能出现不同的情况。另外,有些情况下,配置值也坑能会大于实际使用值。通过切换上述两个单选项,可以查看当前运行值与配置值的具体取值。
2.3.3.3 处理器

处理器时服务器最重要的硬件资源。

与内存类似,为确保SQL Server与其他应用服务之间的性能平衡,在服务器配有多处理器时(如双核、四核、八核等),可以应用"处理器"配置项,为SQL Server分配处理器资源,如图。

  1. 处理器关联。在配有多核处理器的系统中(现在的电脑基本都是),如果执行的是一项多线程任务,这些线程有可能在不同的处理器上执行;因此,执行过程需要在多个处理器之间移动。由此,可能会降低SQL Server服务的性能。通过设置处理器关联,可以将处理器分配给特定的线程,从而消除处理器重新加载和减少处理器之间的线程迁移,提高SQL Server的执行性能。
  2. I/O关联。与处理器关联类似,是指将SQL Server磁盘I/O任务与处理器进行关联,可以提高SQL Server数据读写的性能。
  3. 自动设置所有处理器的处理器关联掩码。允许SQL Server设置与所有处理器的关联关系。如果只要对部分处理器执行关联,可以不选中此复选项,然后在"处理器关联"列表中手动勾选。
  4. 自动设置所有处理器的I/O关联掩码。允许SQL Server设置SQL Server磁盘I/O与指定的CPU子集的关联关系。如果需要手动设置,也可以去掉此复选项,然后在"I/O关联"列表中手动勾选。
  5. 最大工作线程数。此项用于设定处理为SQL Server进程分配的工作线程数。在32位的系统中,处理器数在4个(含)以下时,最大可用工作线程数为256;8个处理器时,最大可用工作线程数为288。在64位系统中,处理器数在4个(含)以下时,最大可用工作线程数为512;8个处理器时,最大可用工作线程数为576。此选项的设置值将影响SQL Server的工作线程池,在并发访问SQL Server服务的客户端少于此设定值时,每一个客户都会被分配到一个单独的线程;如果客户端并发访问数超过此选项的设定值,超过的用户访问就会称为一个队列,在其他用户访问结束后,线程池有空闲的线程时,按顺序使用空闲线程。
2.3.3.4 安全性

"安全性"选项卡用于设置与SQL Server服务登录身份验证、登录审核等相关的安全性设置,如图。

  1. 服务器身份验证。分为两种模式:Windows身份验证模式、SQL Server和Windows身份验证模式。此选项用于设置服务器端验证客户端连接的方式。相关内容将在后面详细说明。
  2. 登录审核。用于设置SQL Server日志记录登录信息的方式,共分为四种。更改登录审核项后需要重新启动服务才会生效。SQL Server日志可以在SSMS的"对象资源管理器"窗口中,在对应的服务器下的"管理"➡"SQL Server日志"中查看。

|----------|--------------------|
| 登录审核 | 说明 |
| 无 | 不将登录信息记录在日志中 |
| 仅限失败的登录 | 记录失败的登录信息,成功登录的不记录 |
| 仅限成功的登录 | 记录成功的登录信息,失败登录的不记录 |
| 失败和成功的登录 | 无论登录失败还是成功都会被记录 |

  1. 启用服务器代理账户。SQL Server可以通过存储过程xp_cmdshell来执行操作系统的命令,执行这些命令的用户就是服务器用户。启用此选项,可以从Windows账户中选择作为服务器代理的账户。一般来讲,此处选中的"服务器代理账户"应当只具备合适权限,否则有可能会被恶意利用。因此被选账户不宜是Windows账户中的管理员账户。
  2. 符合通用标准符合性。此选项设置有助于提高SQL Server内存页面重用、转换缓冲区溢出、内存损坏、缓冲区溢出等漏洞防范的安全性。
  3. 启用C2审核跟踪。登录审核验证只验证登录行为,并未记录客户端提交的语句和对象访问的情况。启用此项,将在日志文件中记录语句和对象访问的情况。
  4. 跨数据库所有权限链接。SQL Server中的链主要是指数据库中对象的访问可能存在一定的顺序关系,如"视图1"执行需要调用"视图2","视图2"又访问"表3",因此,这三个对象之间存在一定的序列关系,这就是链。启用"跨数据库所有权限链接"将使数据库成为可供跨数据库链接的源数据库或者目标数据库。
2.3.3.5 连接

"连接"选项卡,用于设置SQL Server服务与连接相关的参数,如图。

  1. 最大并发连接数。本选项用于设置SQL Server服务器最大的可供客户端并发连接的数量。如设置为10,表示SQL Server服务器可同时供10个客户端用户连接,超过此数的用户只能等现有连接断开后才能连接。0表示不限制同时连接的客户端数,最大取值为32767。
  2. 使用查询调控器防止查询长时间运行。查询长时间运行有可能是查询语句涉及的数据库对象较多,或者查询的数量较大;也有可能是查询语句编写不合理等原因造成的。查询时间过长会导致长时间占用系统资源,造成SQL Server响应其他访问的性能下降。因此,合理设置此项有助于提高服务器的工作性能。此选项是对服务器查询连接行为的限制,与"连接属性"中"执行超时值"的设置是有所区别的,后者是对SSMS客户端工具的连接设置。
  3. 默认连接选项。默认连接选项共有14项,含义见下表

|---------------|-------------------------------------------------|
| 配置选项 | 说明 |
| 隐式事务 | 控制在运行一条语句时,是否隐式启动一项事务 |
| 提交时关闭游标 | 控制执行提交操作后游标的行为 |
| ANSI警告 | 控制集合警告中的截断和NULL |
| ANSI填充 | 控制固定长度的变量的填充 |
| ANSI NULL | 在使用相等运算符时控制NULL的处理 |
| 算术中止 | 在查询执行过程中发生溢出或被零除错误时中止查询 |
| 算术忽略 | 在查询过程中发生溢出或零除错误时返回NULL |
| 带引号的标识符 | 计算表达式时区分单引号和双引号 |
| 未计数 | 关闭在每个语句执行后所返回的说明有多少行受影响的消息 |
| ANSI NULL默认启用 | 更改会话的行为,使用ANSI兼容为NULL。未显示定义为NULL的新列定义为允许使用空值 |
| ANSI NULL默认禁用 | 更改会话的行为,不使用ANSI兼容为NULL。未显示定义为NULL的新列里定义为不允许使用空值 |
| 串连NULL时得到NULL | 当将NULL值与字符串连接时返回NULL |
| 数值舍入中止 | 当表达式中出现失去精度的情况时发生错误 |
| Xact中止 | 如果Transact-SQL语句引发运行时错误,则回滚事务 |

  1. 允许远程连接到此服务器。此项设置用于确定远程应用程序是否可以连接到本服务器,可以与"远程查询超时值"配合使用,超过"远程查询超时值"设置值意味着查询超时失败。
  2. 需要将分布式事务用于服务器到服务器的通信。此项设置可启用Microsoft分布式事务处理协调器(MS DTC)来协调SQL Server服务器到服务器之间的通信,这是为了与Microsoft SQL Server早期版本兼容而提供的选项。
2.3.3.6 数据库设置

"数据库设置"选项卡,用于设置与数据库索引填充,备份还原等相关参数的选项值,如图。

  1. 默认索引填充因子。用于设置索引页的填充程度。取值100表示索引页完全填充满,不留空隙,因此如果有新索引数据需要在中间某页插入时,一部分索引页就需要重新填充。因此取一个适中的值,一方面可以提高存储空间的利用率,另一方面也可以防止索引耗费过多的时间。
  2. 备份和还原。"指定SQL Server等待更换新磁带的时间"用于在已安装使用磁带机来存储数据的场合。"默认备份介质保留期"用于设定数据库备份中每个备份介质保留的时间,以避免被意外覆盖。"压缩备份"复选框设置是否在备份过程中执行压缩,执行压缩可以节约存储空间,但会占用系统资源。"备份校验和"用于对备份集进行验证,以确定备份过程中有无错误。
  3. 恢复间隔。此选项设置了Microsoft SQL Server还原数据库所需的最大分钟数。0表示由系统自动确定时间长短,此选项也确定了每次SQL Server由停止到重启时数据库未提交事务保留的时间间隔,即SQL Server为每个数据库调用检查点,以把脏页面数据从数据库缓冲区缓存刷新到硬盘的间隔时间。
  4. 数据库默认位置。在SQL Server 2019安装过程中设置了SQL Server数据库文件默认存放的路径,此选项可以修改数据库数据文件和日志文件存放的默认路径。但是此项设置并不限制用户数据库的实际存放位置,用户在创建数据库时可以选择其他路径来存放。
2.3.3.7 高级

"高级"选项卡提供了对服务器高级配置项的设置,包括并行的开销阈值、查询等待值、锁、最大并行度、网络数据包大小、远程登录超时值等项。如图。

  1. 并行的开销阈值。SQL Server服务默认对每一待执行任务,是以串行方式来进行计划和执行的。如果串行执行超过一定时间时,SQL Server将会执行并行计划,即在多处理器环境中,由不同处理器同时并发执行任务。此项设置的值决定了SQL Server创建并行计划的临界值,即阈值,超过阈值创建并行执行计划。
  2. 查询等待值。设置SQL Server服务器查询不超时的时间值,与"连接"选项卡中的"使用查询调控器防止查询长时间运行"可以配合使用,以两者设置值小的作为超时的依据。此项默认值为-1,表示按查询开销估计值的25倍计算超时值。此项值是动态值,会因为不同查询任务所需时间的估值而变化,而"使用查询调控器防止查询长时间运行"则是固定值,这是两者的主要区别之一。
  3. 启用包含的数据库。开启此项表示允许在服务器级别使用contained database,使服务器间的数据库迁移可以通过contained database功能更方便地实现。
  4. 锁。由于SQL Server服务系统是多用户、多任务的系统,有可能在一项任务执行的同时,会有另一项任务在同时执行,如果两者操作的是相同的数据对象,就有可能产生数据冲突问题。锁是SQL Server服务为避免上述并发错误提供的一种数据保护机制,即最先操作数据的任务以锁定的方式,掌握对数据的使用权,从而防止产生数据访问冲突。此选项用于设置SQL Server使用所的数量,由于所需要消耗内存资源,限制所的数量有助于提高服务器的整体性能。默认值为0,表示不做限制,由SQL Server动态使用锁,即允许SQL Server根据系统需要动态分配和释放锁。
  5. 最大并行度。此项值用于限制执行并行计划时所使用的处理器数(最多为64个)。默认值为0,表示使用所有可用的处理器。如果值为1,表示取消生成并行计划。如果指定的值比可用的处理器数大,则使用实际可用数量的处理器。此项设置在所处理环境中才有意义。
2.3.3.8 权限

"权限"选项卡用于查看和设置各安全对象的权限,如登录名,角色等,如图。