
# 创建tempdb临时数据文件
#### 操作场景
tempdb是系统数据库，是一个全局资源，可供连接到SQL Server实例或SQL数据库的所有用户使用 。它是一个临时数据库，无法永久保存数据，作用是给实例中的各种请求处理中间数据，分为主数据文件（.mdf）、次要数据文件（.ndf）和日志文件（.ldf）。当服务重启的时候，tempdb会被重新创建。
tempdb数据库如果在设计上存在缺陷，会存在性能上的问题。尤其是tempdb数据库在一些高并发的场景，如果应用频繁地创建和销毁临时表，会导致实例卡顿从而影响业务。
更多介绍请参见[tempdb数据库官方文档](https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/tempdb-database?view=sql-server-2017)。
#### 使用限制
- 各版本默认的临时数据文件个数如下：
  - RDS for SQL Server 2008、2012、2014版本实例默认生成1个临时数据文件。
  
  - RDS for SQL Server 2016及以上版本实例遵循微软的默认逻辑：当实例CPU核数小于8时，临时文件数量与CPU核数相同；当实例CPU核数大于等于8时，默认生成8个临时数据文件。
   
- 云数据库 RDS for SQL Server所有版本只有一个日志文件。
- 只有修改tempdb的存储目录才需要重启实例生效，没改存储目录（例如只是增加tempdb的文件数）则不需要重启实例。
 
#### 应用场景
您需要根据实例实际规格和具体场景确定tempdb文件的创建个数。下面将以32U的SQL Server 2014EE实例为例创建8个临时数据文件。
#### 前提条件
- 访问[Microsoft网站](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)，获取SQL Server Management Studio的安装包。双击安装包，按照向导完成安装。
- 创建一个32U的RDS for SQL Server 2014EE实例，请参见[创建SQL Server实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_03_0014.html)。
 
#### 操作步骤
1. 启动SQL Server Management Studio客户端。
2. 选择"连接 \> 数据库引擎"，在"连接到服务器"弹出框中填选登录信息。 
   图1连接到服务器   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627469.png "点击放大")
   表1参数说明 
   | 参数    | 说明                                                                                                                                                                                                                                                          |
   |:---|:---|
   | 服务器名称 | 目标实例的主机IP和数据库端口（IP和数据库端口之间请使用英文半角逗号）。例如：x.x.x.x,8080 - 主机IP为已绑定的弹性公网IP地址。  - 端口为"连接管理"页签中的"数据库端口"。   |
   | 身份验证  | 认证方式，选择"SQL Server身份验证"。                                                                                                                                                                                                                                    |
   | 登录名   | 待访问的数据库账号，默认管理员账号为rdsuser。                                                                                                                                                                                                                                  |
   | 密码    | 待访问的数据库账号对应的密码。                                                                                                                                                                                                                                             |
      
   
   
3. 查看当前tempdb信息。
   
   - 选择"数据库 \> 系统数据库 \> 临时数据库"，右键单击"属性"，在弹出框中选择"文件"，查看当前tempdb信息。
     图2查看当前tempdb信息   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627485.png "点击放大") 
   
   - 通过SQL语句查询。
     ```
     SELECT name AS FileName,
     size*1.0/128 AS FileSizeInMB,
     CASE max_size
     WHEN 0 THEN 'Autogrowth is off.'
     WHEN -1 THEN 'Autogrowth is on.'
     ELSE 'Log file grows to a maximum size of 2 TB.'
     END,
     growth AS 'GrowthValue',
     'GrowthIncrement' =
     CASE
     WHEN growth = 0 THEN 'Size is fixed.'
     WHEN growth > 0 AND is_percent_growth = 0
     THEN 'Growth value is in 8-KB pages.'
     ELSE 'Growth value is a percentage.'
     END
     FROM tempdb.sys.database_files;
     GO
     ```
     
   
   
   
   
4. 使用如下语句查看当前实例的tempdb的逻辑文件名称。 
   ```
   SELECT name, physical_name
   FROM sys.master_files
   WHERE database_id = DB_ID('tempdb');
   ```
   图3查看tempdb   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548098.png "点击放大")
   
   
5. 在[3]的"文件"页签下查看tempdb在磁盘上的当前位置。
   
   图4查看当前位置   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627461.png "点击放大")
   
   
6. 使用如下语句将tempdb文件迁移到D盘RDSDBDATA文件夹的DATA目录下，根据实际需要指定初始大小和增长速度。 
   ```
   USE master;
   GO
   ALTER DATABASE [tempdb] MODIFY FILE (NAME = tempdev, FILENAME = 'D:\RDSDBDATA\DATA\tempdb.mdf', SIZE = 8MB, FILEGROWTH = 64MB);
   GO
   ALTER DATABASE [tempdb] MODIFY FILE (NAME = templog, FILENAME = 'D:\RDSDBDATA\DATA\templog.ldf', SIZE = 8MB, FILEGROWTH = 64MB);
   GO
   ```
   图5迁移文件   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548094.png "点击放大")
   
   
7. 在"实例管理"页面，选择指定的主实例，单击"更多 \> 重启实例"。 
   您也可以在"实例管理"页面，单击目标实例名称，在页面右上角，单击"重启实例"。
   
   
8. 使用如下SQL语句查询文件是否迁移成功。
   
   ```
   SELECT name, physical_name
   FROM sys.master_files
   WHERE database_id = DB_ID('tempdb');
   ```
   图6查看tempdb   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627481.png "点击放大")
   
   
9. 根据实际需要配置文件名、初始大小、增长速度等信息，通过如下SQL语句或界面增加tempdb的文件数。 
   - 通过如下SQL语句增加tempdb的文件数。
     ```
     -- 根据CPU的数量增加tempdb文件数、初始大小和增长速度分别为8MB和64MB
     USE [master]
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp2', FILENAME = N'D:\RDSDBDATA\DATA\tempdb2.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp3', FILENAME = N'D:\RDSDBDATA\DATA\tempdb3.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp4', FILENAME = N'D:\RDSDBDATA\DATA\tempdb4.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp5', FILENAME = N'D:\RDSDBDATA\DATA\tempdb5.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp6', FILENAME = N'D:\RDSDBDATA\DATA\tempdb6.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp7', FILENAME = N'D:\RDSDBDATA\DATA\tempdb7.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp8', FILENAME = N'D:\RDSDBDATA\DATA\tempdb8.ndf', SIZE = 8MB, FILEGROWTH = 64MB)
     GO
     ```
     
   
   - 在[3]的"文件"页签，单击"添加"，增加tempdb的文件数。
     图7添加tempdb文件   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627465.png "点击放大") 
   
   
   
   
10. 配置完成后，重复[8]，验证文件是否增加成功。
    
    图8查看tempdb信息   
    ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627477.png "点击放大")
    
    
 
