Linux 上的 SQL Server 的功能

已完成

了解可为系统提供竞争优势的 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 2019 中的新功能,可自动改进和优化工作负载的性能。 IQP 功能包括:

  • 自适应联接:SQL Server 在运行时根据实际输入行数动态选择联接类型。
  • 非重复近似计数:SQL Server 为大数据场景提供了不同结果的近似计数,以便在高性能和低内存负载下运行此类查询。
  • 内存授予反馈:如果查询的操作溢出到磁盘,则 SQL Server 可以为后续操作添加更多内存。 同样,如果查询浪费了分配给它的一半以上的内存,那么 SQL Server 可以减少分配给它的内存。
  • 表变量延迟编译:SQL Server 在首次编译时使用表变量的实际基数,而不是固定推测。

IQP 不要求你重写任何代码或更改数据库模式以利用最佳性能。 你只需将数据库升级到兼容级别 150 或更高版本:

ALTER DATABASE <database name> SET COMPATIBILITY_LEVEL = 150;

安全性

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 2019 之外,还必须安装“mssql-server-polybase”包。

机器学习服务

在机器学习中,会使用大型数据集对一些复杂系统的行为进行建模。 当开发出一个能够准确地预测系统的观测行为的模型时,可将其用于预测系统将来可能的行为。 已经开发了复杂的代码库(通常是开放源代码),可以准备数据集、向其添加功能、训练模型、评估经训练模型的准确度,并部署这些模型供其他客户端调用。 这些库以 R 和 Python 语言编写。

SQL Server 机器学习服务允许你针对 SQL Server 数据库中的数据运行这些 R 和 Python 脚本。 可以添加热门机器学习和数据科学框架,包括 PyTorch、TensorFlow、SciKit-Learn 等。

备注

在 Linux 操作系统上,SQL Server 2019 或更高版本支持 SQL Server 机器学习。 若要使用,必须添加额外的包。 例如,如果要使用 Python 编写所有机器学习代码,请安装“mssql-mlservices-mlm-py-9.4.7”包。 R 的等效包是“install mssql-mlservices-mlm-r-9.4.7”。

图形支持

SQL Server 提供对存储和查询基于图形的数据的本机支持。 SQL Server 将数据存储为一系列实体(节点)以及它们之间的关系(边缘)。

全文搜索支持用户对遵循语言学规则的文本数据运行查询。 例如,搜索“运行”一词时,全文搜索将返回包含“运行”一词各种形态的结果,如“已运行”和“正在运行”。

默认未安装此功能。 在 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 包。

知识检查

1.

Linux 上的 SQL Server 提供哪些功能来支持业务连续性?

2.

如果使用 Always Encrypted 加密数据,将在何时解密数据?