Linux 上的 SQL Server 的功能
- 7 分钟
了解可为系统提供竞争优势的 SQL Server 功能,有助于向预算持有者证明 SQL Server 迁移的合理性。
在研究 Linux 上的 SQL Server 是什么之后,你想要确保当前可用的功能满足 Wide World Importers 对现有和将来数据处理的要求。
在这里,你将了解 Linux 上的 SQL Server 的主要功能。
性能
Linux 上的 SQL Server 通过提供混合事务分析处理 (HTAP) 解决方案,满足快速事务吞吐量需求和响应式分析的竞争性。 HTAP 使用了一些 SQL Server 核心性能技术:
内存中联机事务处理 (OLTP)
如果他们将内存优化表与已编译的存储过程相结合,Wide World Importers 可能会发现其事务表的性能大幅提高;例如编写和读取电子商务网站的会话状态。
列存储索引
SQL Server 支持行数据和压缩的列数据。 事务表还可以在编写分析查询时使用列存储索引,而不是行存储索引。 使用列存储索引,可使当前分析套件保留事务性能,还可通过操作数据运行实时报表查询。
查询存储
你的 DBA 团队每月完成一次性能优化任务,以确保使用正确的查询计划。 他们监视查询性能,并在执行计划的更改影响性能时,还原查询计划。 该团队还向开发主管报告运行时间最长的前 10 个查询,并检查任何资源锁。 查询存储支持所有这些任务,可以使用 Transact-SQL 启用它:
ALTER DATABASE <database_name>
SET QUERY_STORE (OPERATION_MODE = READ_WRITE);
自动优化和智能查询处理
启用查询存储后,可以启用自动计划选择更正。 启用自动优化后,SQL Server 将监视查询性能。 如果新的查询计划比前的版本更糟,它可以用性能更好的早期版本替换新计划。 该选项在数据库级别可用,具有 ALTER
语句:
ALTER DATABASE <database_name>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );
智能查询处理(IQP)是一组功能,其中许多功能都是 SQL Server 2022 中的新增功能,可自动改进和优化工作负荷的性能。 IQP 功能包括:
自适应联接(批处理模式):自适应联接在运行时根据实际输入行动态选择联接类型。
交错执行:使用首次编译时遇到的多语句表值函数的实际基数,而非事先的固定估计。
内存授予反馈(批处理模式):如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。
非重复近似计数:由于高性能和低内存占用量,可针对大数据方案提供近似的
COUNT DISTINCT
。行存储上的批处理模式:为 CPU 绑定的关系 DW 工作负荷提供批处理模式,而无需列存储索引。
内存授予反馈(行模式):如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。
标量 UDF 内联:标量 UDF 被转换为等效的关系表达式,并在调用查询中内联处理,这通常会显著提升性能。
表变量延迟编译:使用首次编译时遇到的表变量的实际基数,而不是固定猜测。
近似百分位数:快速计算具有可接受基于排名的错误边界的大型数据集的百分位数,以帮助使用近似百分位聚合函数做出快速决策。
基数估计(CE)反馈:自动调整重复查询的基数估计,以优化低效 CE 假设导致查询性能不佳的工作负荷。 CE 反馈可识别和使用模型假设,以便更好地适应给定的查询和数据分布,以提高查询执行计划质量。
并行度(DOP)反馈:自动调整重复查询的并行度,以便针对低效并行度可能导致性能问题的工作负荷进行优化。 需要启用查询存储。
参数敏感度计划优化:参数敏感计划优化解决了参数化查询的单个缓存计划并非针对所有可能的传入参数值(例如非统一数据分布)的最佳方案。
内存授予反馈(Percentile):通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。
内存授予反馈持久性:提供用于保留内存授予反馈的新功能。 需要为数据库启用查询存储并处于 READ_WRITE 模式。
CE反馈持久性:需要为数据库启用查询存储,并设置为
READ_WRITE
模式。DOP 反馈持久性:要求为数据库启用查询存储,并以
READ_WRITE
模式运行。强制执行优化计划:减少重复强制查询的编译开销。 有关详细信息,请参阅“使用查询存储强制执行优化计划”。
IQP 不要求你重写任何代码或更改数据库模式以利用最佳性能。 你只需将数据库升级到兼容级别 150 或更高版本:
ALTER DATABASE <database_name> SET COMPATIBILITY_LEVEL = 160;
安全性
Linux 上的 SQL Server 支持高级安全功能,如 Always Encrypted、行级别安全性和动态数据掩码,用于保护磁盘、内存或传输中的数据。 所有版本都支持这些功能,包括标准版:
透明数据加密(TDE) 对静态数据进行加密,即数据存储在数据库文件中时。 数据在数据库和备份中都受到保护,以防被恶意用户利用。
“Always Encrypted”确保只有拥有数据的用户才能查看和处理数据。 管理数据的用户(如数据库管理员)无法查看数据。 如果使用 Always Encrypted:
- 可以查询已加密的数据,而无需首先对其解密。
- 当数据移动到服务器内存中,以及从服务器移动到受信任的客户端应用时,数据受到静态保护。
- 加密和解密在客户端驱动程序中进行,使该过程对客户端应用程序透明。
- 只有受信任的应用程序和数据所有者才能访问它。 应用程序开发人员和数据库管理员无权访问列加密密钥(CEK)。
“审核”会跟踪数据库引擎上发生的事件以及执行这些事件的人员。 已审核的事件可以存储在事件日志或审核文件中,你可以使用它们来调查攻击和数据泄漏等问题。
“行级别安全性”根据执行查询的人员来控制对表中特定行的访问权限。 可以控制谁有权访问数据,例如按组成员身份或执行上下文进行控制。
“动态数据掩码”可掩蔽部分数据。 提供四种不同类型的掩码:掩蔽列中的所有数据、掩蔽电子邮件地址、对数值数据进行随机数字掩蔽、自定义字符串掩蔽。 例如,可以使用自定义字符串掩蔽来掩蔽社会安全号码中最后四位数以外的所有数字。
“数据发现和分类”识别、标记和报告数据库中的敏感数据,如个人数据。 它是 SQL Server Management Studio (SSMS) 中的一种工具,使遵守数据隐私法规和强化包含最有价值数据的数据库变得更加容易。 数据发现和分类是高级数据安全 (ADS) 包的一部分。
“漏洞评估”识别数据库中的漏洞。 了解服务器配置和数据库设计可能导致的弱点后,可以通过缓解常见攻击来防止这些攻击。 漏洞评估是另一种 ADS 服务。
SQL Server 代理
SQL Server 代理运行维护作业和计划好的自动化任务。 SQL Server 代理支持以下三种工作负荷:
- Transact-SQL 作业
- DB 邮件
- 日志传送
默认禁用了 SQL Server 代理,但它已安装,可以使用命令行 mssql-conf
实用工具启用它。
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
高可用性
SQL Server 有很多方法指定可接受的容错级别。 Linux 上的 SQL Server 支持 Always On 可用性组和 Always On 故障转移群集实例。 这两个选项都需要在每个服务器上安装 mssql-server-ha
包。 Linux 支持通过 Pacemaker 实现群集,该群集等效于 Windows Server 故障转移群集 (WSCF),但并不与主机操作系统紧密集成。
如果对于可接受的故障时间有更大的灵活性,通过 SQL 代理进行的日志传送可提供热备用状态,可用于服务器丢失数据后的恢复。
对于 Linux 上的 SQL Server 还有另一种解决方案,即利用其能在与 Kubernetes 等工具协调的容器中运行的能力。 业务流程工具可确保始终有一个节点在运行 SQL Server。 如果该节点发生故障,则会自动启动另一个实例。 如果需要更可靠的可用性,可以在容器中运行 Always On 可用性组。
其他值得注意的功能
PolyBase
许多组织拥有由不同的系统承载的数据。 也许,不同的团队在选择系统时有不同的要求,或者公司与其他公司合并,或者出于其他一些历史原因。 传统上,很难跨这些系统边界集成数据来回答用户的问题。
假设 SQL Server 中有记录产品目录销售额的数据,但记录产品制作成本的数据位于 SAP HANA 数据库中。 你想要创建一个报表来分析利润率,因此需要这两个数据库中的信息。 在过去,可以这样做:
- 使用提取、转换和加载 (ETL) 包将数据从一个数据库系统迁移到另一个数据库系统。
- 查询两个数据库,然后编写一些自定义代码来联接结果并将其集成到单个报表中。
这两种方法都很复杂,需要大量的开发时间才能实现。
使用 PolyBase,可以在 SQL Server 中创建外部表。 外部表是到外部系统及托管在该系统中的数据集的连接。 创建后,客户端可以将查询提交到外部表,其方式与提交到内部表的方式完全相同。
JOIN
查询可以将外部表中的数据与内部表集成。 如你所见,PolyBase 可以消除不同系统强加给你的数据的边界,并使你更容易地对业务数据进行所需的分析,而不考虑其位置。
备注
在 Linux作系统上,SQL Server 2019 及更高版本中支持 PolyBase。 若要使用它,除了 SQL Server 2022 之外,还必须安装 mssql-server-polybase
包。
机器学习服务
在机器学习中,会使用大型数据集对一些复杂系统的行为进行建模。 当开发出一个能够准确预测系统观察到的行为的模型时。 该模型用于预测该系统将来的行为方式。 复杂的代码库(通常是开放源代码)是在 R 和 Python 语言中开发的。 这些库可以准备数据集、向其添加特征、训练模型、评估训练模型的准确性,并为其他客户端部署这些模型进行调用。
SQL Server 机器学习服务允许你针对 SQL Server 数据库中的数据运行这些 R 和 Python 脚本。 可以添加热门机器学习和数据科学框架,包括 PyTorch、TensorFlow、SciKit-Learn 等。
备注
在 Linux作系统上,SQL Server 机器学习在 SQL Server 2019 及更高版本中受支持。 若要使用,必须添加额外的包。 例如,如果要对所有机器学习代码使用 Python,请安装包
mssql-mlservices-mlm-py-9.4.7
。 R 的等效项是安装包mssql-mlservices-mlm-r-9.4.7
。
图形支持
SQL Server 提供对存储和查询基于图形的数据的本机支持。 SQL Server 将数据存储为一系列实体(节点)以及它们之间的关系(边缘)。
全文搜索
全文搜索支持用户对遵循语言学规则的文本数据运行查询。 例如,搜索单词 run
时,全文搜索将返回包含单词 run
形式的结果,例如 ran
和 running
。
默认未安装此功能。 在 Linux 上,可以通过安装 mssql-server-fts
包启用它。
ETL 工作负荷
SQL Server Integration Services (SSIS) 包可在 Linux 上的 SQL Server 上运行。 它们不限于仅针对 Linux 上的 SQL Server 运行。 这些包还可以连接到在本地或云中的 Windows 上运行的 Microsoft SQL Server,或在容器中运行的 SQL Server。
必须在运行 SQL Server Data Tools 的 Windows 计算机上编写和维护 SSIS 包。