Cloud SQL for SQL Server 是一项完全托管的数据库服务,通过该项服务,我们可以在 GCP 上设置、维护、管理 SQL Sever 数据库。虽然 Cloud SQL 减少了大部分的运营负担,但在 Cloud SQL 上运行的 SQL Server 数据库仍然需要通过有效管理才能实现最佳性能。本篇文章将从关键的数据库管理活动出发,探讨数据库管理的最佳实践。
常见的 DBA 职责和 DBA 清单
作为一名 SQL Server 数据库管理员(DBA),需负责多项任务,主要包括:
在大型企业的工作环境中,这些工作通常由多个 DBA 共同承担。而在小型或中型数据库环境中,可能由一个人执行所有数据库管理任务。
以下 DBA 清单可以帮助我们在 Cloud SQL 实例上对 SQL Server 数据库进行管理。某些清单任务可能每天执行一次,而有些可能每周甚至每月才执行一次,具体取决于数据库利用率和业务需求。
配置 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为国内外游戏开发者提供全渠道、一站式的游戏发行服务。