谷歌云 Cloud SQL for SQL Server:数据库管理的最佳实践

Cloud SQL for SQL Server 是一项完全托管的数据库服务,通过该项服务,我们可以在 GCP 上设置、维护、管理 SQL Sever 数据库。虽然 Cloud SQL 减少了大部分的运营负担,但在 Cloud SQL 上运行的 SQL Server 数据库仍然需要通过有效管理才能实现最佳性能。本篇文章将从关键的数据库管理活动出发,探讨数据库管理的最佳实践。

常见的 DBA 职责和 DBA 清单

作为一名 SQL Server 数据库管理员(DBA),需负责多项任务,主要包括:

  • 创建数据库
  • 管理数据库对象(表,视图,存储过程等)
  • 管理用户和安全
  • 备份数据库,并在必要时执行恢复操作
  • 为特定客户克隆和提供数据库实例
  • 监控实例的状态,并根据需要采取预防或纠正措施
  • 监视和调优数据库性能
  • 诊断并向 GCP 支持服务报告关键错误

在大型企业的工作环境中,这些工作通常由多个 DBA 共同承担。而在小型或中型数据库环境中,可能由一个人执行所有数据库管理任务。


以下 DBA 清单可以帮助我们在 Cloud SQL 实例上对 SQL Server 数据库进行管理。某些清单任务可能每天执行一次,而有些可能每周甚至每月才执行一次,具体取决于数据库利用率和业务需求。

  • 查看错误日志,包括 SQL Server 错误日志和 SQL Server 代理日志
  • 查看并设置 Cloud SQL 维护时段
  • RTO 和 RPO 要求的一致性
  • 高可用性 (HA) 和灾难恢复 (DR):检查配置并与组织中的 HA 和 DR 要求保持一致
  • 测试数据库每周恢复,每周运行 DBCC CheckDB
  • 监控工作负载(事务与批处理)、计划作业、处理和维护窗口:查看工作负载、计划和运行时间。确保实时跟踪每个工作负载,包括计划、运行时长(Min、Max、Avg)
  • 查看连接到 Cloud SQL 实例的应用。了解连接模式以及读取隔离要求,例如读取未提交与读取已提交
  • 查看标准数据库维护工作,如索引整理和统计信息更新。


配置 Cloud SQL

Cloud SQL for SQL Server 可在实例级别和数据库级别进行配置。大多数实例级配置选项都可以通过 Cloud Console 进行管理。这里我们应该花些时间仔细查看实例级配置,因为会影响到数据库的性能。

实例级配置

实例级配置包括 vcpu、内存和存储通过云控制台管理,根据需要使用 Cloud Console 进行配置即可。



Tempdb

Tempdb 是 SQL Server 中的一个系统数据库,用于 SQL Server 中临时对象的内部处理。目前,tempDB 是用4或8个数据文件创建的,具体取决于实例 vCPU 数量。在之前,一个数据文件的默认配置通常不足以实现最佳性能。微软在“SQL服务器中临时数据库的物理属性”文档中建议添加额外的文件来减少 tempdb 中的争用。tempdb 中的所有文件需要具有相同的大小和相同的文件增长设置,这里还建议预先设置 tempdb 的大小,这样它就不需要自动增长。对于少于8个 vCPU 的情况,tempdb 文件的数量应该与 vCPU 数量匹配,超过8个 vcpu 时,则使用8个 tempdb 文件。


如果要查看 tempdb 配置,参考以下实例:

    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


数据库标志

Cloud SQL 数据库标志在 SQL Server 社区中也称为跟踪标志,会影响实例行为和性能。在下文的链接中可查看所有受支持的数据库标志的列表:https://cloud.google.com/sql/docs/sqlserver/flags#list-flags-sqlserver

要查看当前为实例实现的数据库标志,请运行以下 T-SQL 语句。

    DBCC TRACESTATUS(-1);

    GO

配置设置

SQL Server DBA 经常使用系统存储过程 sp_configure 来设置和查看实例级配置设置。Cloud SQL 不支持使用 sp_configure 更改实例设置。但是使用数据库设置和数据库范围的配置,需要查看所有 sp_configure 设置,DBA 可以使用查询工具(例如 Microsoft 的 SQL Server Management Studio (SSMS) 或 Azure Data Studio)运行以下 SQL 语句。

    SELECT

    a.[name]

    ,a.[description]

    ,a.[minimum]

    ,a.[maximum]

    ,a.[value_in_use]

    FROM sys.configurations a

    ORDER BY a.[name];

    GO


数据库级设置

数据库范围内设置

数据库范围的配置和数据库属性允许 DBA 查看和设置特定数据库的数据库级设置。执行下列 sql 语句可查看特定数据库的所有数据库范围配置:

    USE <dbname>;

    GO

    SELECT a.*

    FROM sys.database_scoped_configurations a

    ORDER BY 1 ;

    GO


如果想要更改特定数据库的数据库范围配置,执行以下语句即可

    USE <dbname>;

    GO

    ALTER DATABASE SCOPED CONFIGURATION SET <ConfigurationName> = <ConfigurationValue>;

    GO


如果需要更改特定数据库设置,执行以下语句

    ALTER DATABASE <dbname> SET <property> <value>;

    GO


自动伸缩与关闭

为了避免与数据库挂载和碎片相关的性能问题,应该将所有数据库的自动关闭和自动收缩设置为OFF。

    ALTER DATABASE <dbname> SET AUTO_SHRINK OFF;

    GO

    ALTER DATABASE <dbname> SET AUTO_CLOSE OFF;

    GO


最大并行度 (MAXDOP)

SQL Server 会应用最大并行度选项来限制并行计划执行中使用的处理器数量。例如,如果一个 Cloud SQL 实例配置了40个 vCPU, SQL 优化器可能会决定在执行并行查询时使用所有40个 vCPU。有时过多的并行性可能会导致性能问题,通常表现为查询时间过长。如果在执行查询时遇到多个并行线程运行,并且一些线程在返回数据之前等待的时间比其他线程长得多,可以考虑向查询添加 OPTION (MAXDOP 8)提示。例如,如果查询包含提示 OPTION (MAXDOP 8), SQL Server 将限制并行度仅为8个 vCPU。MAXDOP 是在数据库级别为 Cloud SQL 上的 SQL Server 设置的。运行下方 T-SQL 语句可以设置并查看特定数据库的 MAXDOP 设置。

    USE <dbname>;

    GO

    ALTER DATABASE SCOPED CONFIGURATION

    SET MAXDOP = 8;

    GO


    SELECT a.*

    FROM sys.database_scoped_configurations a

    WHERE a.name = 'MAXDOP'

    ORDER BY 1 ;

    GO


数据库与数据文件增长

我们必须在实例级和数据库级启用数据库增长。在实例级,通过选择复选框“启用自动存储增长”来启用cloud sql 实例上的自动增长。在数据库级别,启用自动增长是数据库所有者的责任。有关更多信息,可查看Microsoft的配置参数文档。

更新数据库文件自动增长设置,以使用 MB 增量而不是 % 增长率。根据数据库的不同,首先为数据文件增加 128 MB 或 256 MB 的增量,为事务日志增加 256 M B的增量,并根据需要,增加文件增长增量。在某些情况下,可以使用更大的增量,如数据文件的增量为1024 MB,日志文件的增量为4096 MB。总之,了解数据库的 IO 过程和应用程序需求有利于我们根据工作负载选择最佳增长率。

以上为本次分享的全部内容。


配置文档:https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options?view=sql-server-ver15


当然数据库的备份、克隆及如何实现其高可用性也是有效管理的一部分,鉴于篇幅有限,这些内容,我们会放在后面的分享中。请大家持续关注。


WebEye 是中国大陆地区首家获得 Google Cloud MSP 资质的合作伙伴。点击了解:企业上云服务

WebEye 为全球企业提供⼀站式数字媒体营销解决方案、增长效率工具平台、云服务、安全合规、游戏发行服务。我们汇集全球优质的移动营销资源,用大数据精准决策,用AI管理创意素材,用智能化平台实现聚合广告投放。WebEye云计算服务与多云管理平台、安全合规服务助力企业全面数字化转型。子品牌ModooPlay为国内外游戏开发者提供全渠道、一站式的游戏发行服务。

返回全部