
# 使用规范
#### **实例规格**
生产环境不要使用2u4g规格实例，2u4g规格仅提供体验测试。
建议生产环境至少使用4u8g规格。由于SQL Server使用Windows系统，引擎及系统本身需要的资源较多，2u4g不适合运行生产业务，长时间运行后可能会有系统低内存及其卡顿问题。
#### **数据库连接**
- 连接云数据库 RDS for SQL Server时，请使用"ip,port"的方式连接，注意连接串中间为逗号。
- 不建议使用服务器名字连接。
- 应用连接数据库时建议要有重试机制，当数据库发生容灾或者断连时，应用可以通过重试及时恢复连接。
 
#### **数据库迁移**
迁移上云完成后，需要进行以下检查：
- 需要检查权限完整性。权限会影响对于数据库的方案，迁移仅会完成数据恢复，数据库用户恢复，登录名等其他服务级权限需要重新创建，并且关联数据库账户。
- 需要对索引进行重建。由于迁移完成后数据文件的物理环境发生了改变，数据库索引会失效，需要对索引进行重建，否则可能会导致数据库性能有明显下降。
- 对比参数配置。迁移上云后RDS for SQL Server会使用云上的参数组，需要及时对比云下参数配置和云上是否匹配。由于云下参数配置是经过长期验证，所以请及时更新云上的参数配置。
 
#### **使用建议**
- 不推荐创建加域实例，云数据库 RDS for SQL Server支持创建加域实例，加域实例的域控服务器在用户侧，用户拥有较高权限，域控服务器组策略配置会影响加入该域的机器，用户侧域控规则修改会导致数据库实例的权限安全风险增加。
- 单实例数据库数量不要超过100个。单实例可以承载的数据库数量跟实例规格相关，数据库数量过多会导致实例性能下降，占用Worker Thread等资源。
- 应用不能依赖SysAdmin权限。具有SysAdmin角色的账号有超级管理员权限，使用不当会导致数据库安全与稳定性受到威胁，云数据库不开放超级管理员权限，应用使用数据库不能依赖于此权限。
- 不要在系统库创建表。用户数据请创建用户自定义库存放，不要在系统库创建任何表写入数据，虽然开放了使用系统库的权限，但是任何在系统库存放的数据都是不安全的。
- 数据库不要打开Auto Close属性。用户库可以设置Auto Close属性，打开该属性后会导致包括建立复制关系无法建立的问题，并且该属性设置后不能正常地使用该库，强烈建议不要设置。
- 不要将数据库设置为Single User模式。Single User模式只允许一个Session访问数据库，会导致其他Session无法访问造成云数据库的运维问题。设置Single User模式请及时恢复到Multi User模式。
- 慢日志不要长时间打开。慢日志可以帮助进行慢SQL分析，但是长时间打开会导致性能损失，建议在不需要跟踪分析SQL问题时关闭慢日志。
- 定时重建索引。数据库在长时间使用后可能会产生较多的索引碎片，导致数据库访问性能下降，需要定时进行索引重建，可以采用创建SQL Agent Job的方式定时重建索引，建议一个月重建一次索引。
- 定时更新统计信息。数据库统计信息需要经常更新对于性能有益。建议采用创建SQL Agent Job的方式每周更新一次统计信息。
- 关注数据库大小，及时收缩数据库。数据库长时间使用可能会有一些物理空间无法及时释放，需要执行收缩数据库操作才能释放物理空间。需要关注日志文件大小及物理文件大小，发现文件膨胀迅速可以在业务低峰期收缩数据库。
- 数据库名长度不要超过64个字符，且数据库名当前仅支持数字、大小写字母、中划线(-)和下划线(_)，不支持其他特殊字符。
- 建议修改默认端口。RDS for SQL Server默认端口为1433，公网上一些不安全的程序可能会扫描RDS for SQL Server的默认端口，建议修改默认端口。
- 推荐使用高可用主备实例。相比于单机实例，高可用实例可以极大提高生产业务的可用性和可靠性。
- 高可用实例请跨AZ部署，进行AZ级别的容灾。
- 建议长时间运行的实例在业务低峰期可以重启。实例长时间运行后可能会出现性能下降，推荐每三个月能够在业务低峰期重启一次实例。
- 设置最大并行度。最大并行度参数影响业务的CPU使用率。默认值为0允许Session使用所有CPU，可能由于某个SQL的问题导致CPU无法分配给其他Session使用。建议根据规格配置，如核数除以2。
- 临时库（TempDB）创建多个ndf辅助文件。
- 当执行操作出现权限问题时，请优先参考[存储过程的使用](https://support.huaweicloud.com/usermanual-rds-mssql/rds_09_0001.html)，查找使用合适的存储过程。
- 如需修改SQL Server参数，请在控制台进行修改，不支持通过执行SQL命令方式修改。
- 备份恢复相关操作请通过管理控制台下发或调用RDS API接口、SDK接口下发，不能通过SSMS或执行SQL直接操作。迁移上云请参考[数据复制服务（DRS）](https://support.huaweicloud.com/bestpractice-drs/drs_04_0002.html)。
- 恢复数据到已有实例请谨慎操作，避免错误覆盖已有数据导致影响业务。建议使用恢复到新实例功能。
- 数据库恢复模式（Recovery model）不要设置为simple模式，建议使用full模式。
  - 设置为simple模式将不会对该库执行增量备份，因此该库无法恢复到指定时间点。
  
  - 对于主备实例或者集群实例，设置数据库恢复模式是simple模式后，会导致该库不会建立复制关系，进而无法操作主备切换或者规格变更。
  
  
  因此，请谨慎使用simple模式。
  
- 不建议使用长事务或长时间未提交事务。长事务会长时间占用数据库的事务日志，造成事务日志膨胀并且无法阶段回收空间，最终导致磁盘满并造成大量锁等待，阻塞其他SQL执行。如果kill掉后会导致回滚时间更长，至少是事务执行的1.5倍，造成主备复制延迟增大，导致主备切换失败、主备的规格变更失败。
- 实例创建的数据库及登录名不要过多，建议一个实例的数据库小于100个，登录名小于100个。过多的数据库和登录名可能会导致主备切换后权限同步慢或者磁盘满扩容解除只读时权限回放慢。不利于客户对登录名和数据库的用户映射进行管理。
 
