SQL Server 启动参数是在 SQL Server 服务启动时传递给其可执行文件的一组配置选项,它们用于控制服务器的初始行为,例如内存分配、网络配置、错误日志位置、高级功能开关等。

(图片来源网络,侵删)
这些参数主要分为两类:
- 服务启动参数:在 Windows 的“服务”管理控制台或
sc命令中配置,通过-c或-f等开关启动。 - 服务器配置选项:在 SQL Server 启动后,可以通过
sp_configure系统存储过程或 Management Studio (SSMS) 图形界面进行动态或静态配置。
本文将重点讲解服务启动参数,因为它们是“真正”意义上的启动参数,直接影响了 SQL Server 的“启动”过程。
如何查看当前启动参数?
在修改之前,了解如何查看当前参数非常重要。
方法 1:使用 SQL Server Configuration Manager (推荐)
这是最直观、最常用的方法。

(图片来源网络,侵删)
- 打开 SQL Server Configuration Manager。
- 在左侧导航栏中,展开 SQL Server Services。
- 在右侧列表中,右键单击你想要查看的 SQL Server 实例(如
MSSQLSERVER或SQLEXPRESS),然后选择 Properties。 - 在弹出的属性窗口中,切换到 Advanced 选项卡。
- 你可以看到一个完整的参数列表及其当前值。
方法 2:使用系统函数
连接到 SQL Server 实例后,可以执行以下 T-SQL 命令来查看启动参数:
-- 查看所有启动参数 DBCC TRACEON(3604); -- 将 DBCC 的输出重定向到客户端 DBCC startupoptions;
输出结果会清晰地列出每个参数及其值。
方法 3:检查 SQL Server 错误日志
SQL Server 在启动时会记录所有启动参数到错误日志中,你可以通过以下查询来查看:
-- 查看最新的错误日志,过滤包含 "command line parameter" 的行 xp_readerrorlog 0, 1, N'command line parameter';
常见且重要的启动参数
以下是一些最常用和关键的启动参数,通常在排错或进行特殊配置时使用。
-f (Minimal Configuration Mode / 最小配置模式)
- 作用:以最小配置模式启动 SQL Server,这是排错的利器。
- 行为:
- 仅使用 128 MB 的内存。
- 仅检查 master 数据库。
- 禁用所有自动启动的附加数据库(除了 master)。
- 以单用户模式运行(见下文)。
- 许多非核心的配置选项会被重置为默认值或禁用。
- 用途:
- 当 SQL Server 因配置错误(如分配了过多内存导致无法启动)而无法正常启动时,使用
-f可以强制其启动,然后你可以修改有问题的配置(如min server memory),重启服务器。 - 重置因损坏或错误而导致的配置问题。
- 当 SQL Server 因配置错误(如分配了过多内存导致无法启动)而无法正常启动时,使用
- 注意:这是排错模式,性能极差,不应在生产环境中长期使用。
-m (Single-User Mode / 单用户模式)
- 作用:以单用户模式启动 SQL Server。
- 行为:
- 仅允许一个 同时的连接。
- 通常与
-f一起使用,用于排错。 - 禁用 SQL Agent 服务。
- 用途:
- 修复系统数据库(如
master,msdb,model)。 - 执行需要独占访问的维护任务,如
DBCC CHECKDB(针对master数据库)。 - 当忘记
sa密码时,可以重置密码。
- 修复系统数据库(如
- 如何连接:
- 在排错时,你需要一个能快速连接并执行命令的工具,
sqlcmd。 - 如果使用 SSMS 或其他应用程序连接,它们会占用唯一的连接,导致你无法再连接。
sqlcmd是最佳选择。 - 示例:
sqlcmd -S localhost -E(使用信任连接)
- 在排错时,你需要一个能快速连接并执行命令的工具,
-T (Trace Flag / 跟踪标志)
- 作用:在启动时启用一个或多个跟踪标志,跟踪标志用于开启或关闭特定 SQL Server 的行为,通常用于深度排错或临时解决特定问题。
- 行为:跟踪标志可以是全局的(影响所有连接)或会话级的(仅影响当前连接),在启动参数中指定的
-T标志通常是全局的。 - 常见
-T标志示例:-T3604:将DBCC命令的输出重定向到客户端窗口,这在排错时非常有用。T1118:禁用大容量日志记录操作的分配单元缓存("tempdb" spill),对于高并发的大容量导入操作,可以减少tempdb的争用。T1222:设置锁超时。-T1222 - Lock Timeout 5000设置锁超时为 5 秒。T4608:将DBCC输出记录到错误日志中。
- 用途:解决特定的性能问题、绕过已知 Bug、开启高级诊断功能。
-d (Default Data Directory / 默认数据目录)
- 作用:指定 SQL Server 数据库文件(.mdf, .ndf)的默认根目录。
- 示例:
-d "D:\SQLData" - 用途:当不想使用默认的安装路径(如
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA)时,可以指定一个新的数据目录。
-l (Default Log Directory / 默认日志目录)
- 作用:指定 SQL Server 事务日志文件(.ldf)的默认根目录。
- 示例:
-l "E:\SQLLogs" - 用途:将数据和日志文件放在不同的物理磁盘上,是优化 I/O 性能的常用策略。
-e (Error Log Path / 错误日志路径)
- 作用:指定 SQL Server 错误日志文件的路径。
- 示例:
-e "F:\SQLLogs\ERRORLOG" - 用途:将错误日志与数据文件分离,便于管理和防止日志填满系统盘。
-c (Check Configuration File Only / 仅检查配置文件)
- 作用:指示 SQL Server 在启动时只检查注册表和配置文件的有效性,而不实际启动数据库引擎。
- 用途:在正式启动前,快速验证配置是否有明显错误。
-g (Memory for Memory-Optimized Objects / 内存优化对象内存)
- 作用:指定从 SQL Server 的内存池中,为内存优化表和变量保留多少内存,默认值是 0,表示 SQL Server 动态管理。
- 示例:
-g 256(保留 256 MB) - 用途:在运行大量内存优化对象(In-Memory OLTP)的环境中,可以确保有足够的专用内存,避免与其他组件(如缓冲池)争用。
如何修改启动参数?
警告: 修改启动参数,特别是 -f, -m 等排错参数,或在生产环境中修改内存相关参数,有风险,请务必在维护窗口期进行,并充分了解其影响。
步骤 (使用 SQL Server Configuration Manager)
- 打开 SQL Server Configuration Manager。
- 在左侧导航栏中,展开 SQL Server Services。
- 在右侧列表中,右键单击你想要修改的 SQL Server 实例,然后选择 Properties。
- 切换到 Advanced 选项卡。
- 在 Startup Parameters 列表中,你可以看到当前参数,点击 Add 或 Edit 来添加或修改参数。
- 参数格式:每个参数都是一个独立的条目,格式为
参数名=参数值。- 添加一个数据目录:
-dD:\SQLData - 添加一个跟踪标志:
-T1118
- 添加一个数据目录:
- 点击 OK 保存更改。
- 重要:修改后,你需要重新启动 SQL Server 服务才能使新参数生效。
高级用法:使用配置文件
当启动参数很多时,直接在 "服务属性" 中编辑会非常麻烦,SQL Server 支持使用一个配置文件来管理这些参数。
- 创建配置文件:创建一个文本文件,
C:\SQL\Config\my_sqlservr.cfg。 - 写入参数:在文件中,每行写一个启动参数,格式与在 "服务属性" 中一样。
-dD:\SQLData -lE:\SQLLogs -eF:\SQLLogs\ERRORLOG -T1118 -T3604 - 修改注册表:
- 打开注册表编辑器 (
regedit)。 - 导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.MSSQLSERVER\Parameters(路径中的MSSQL15.MSSQLSERVER会根据你的版本和实例名而变化)。 - 在右侧,你会看到几个名为
Parameter1,Parameter2, ... 的REG_SZ字符串值。 - 修改这些值的
Data列。顺序很重要,Parameter1对应配置文件中的第一行,Parameter2对应第二行,以此类推。 - 值的格式是:
-c"C:\SQL\Config\my_sqlservr.cfg" - 注意:
-c开关在这里的作用是告诉 SQL Server 从指定的文件读取配置。配置文件本身不应再包含-c开关。
- 打开注册表编辑器 (
- 重启服务:重启 SQL Server 服务。
使用配置文件的好处是,你可以轻松地在不同环境(开发、测试、生产)之间切换,只需替换配置文件即可,而无需频繁修改注册表或服务属性。
| 参数 | 作用 | 常见用途 |
|---|---|---|
-f |
最小配置模式 | 排错,解决内存分配等问题 |
-m |
单用户模式 | 修复系统数据库,重置密码,执行独占维护 |
-Txxx |
启用跟踪标志 | 深度排错,性能调优,临时绕过 Bug |
-d |
指定默认数据目录 | 将数据文件迁移到新位置 |
-l |
指定默认日志目录 | 将日志文件与数据文件分离,优化 I/O |
-e |
指定错误日志路径 | 将错误日志与其他文件分离,便于管理 |
-g |
为内存优化对象预留内存 | 优化 In-Memory OLTP 性能 |
理解并熟练掌握 SQL Server 启动参数,是数据库管理员进行高级排错和性能优化的必备技能。
