亚马逊AWS官方博客

如何在 Amazon RDS for SQL Server 上配置微软 SQL Server Analysis Services

Original URL:https://amazonaws-china.com/cn/blogs/database/configuring-microsoft-sql-server-analysis-services-on-amazon-rds-for-sql-server/

现在,大家已经可以在Amazon RDS for SQL Server上的表格建模(Tabular Model)当中配置微软SQL Server Analysis Services(简称SSAS)。只要您使用2016或者2017 SQL Server的标准版或者企业版的主要版本,即可轻松在单可用区配置中使用SSAS功能。

如果您目前在Amazon EC2上运行SSAS,那么现在通过直接在Amazon RDS for SQL Server上支持SSAS,可以将这些工作负载都合并运行在您的SQL server数据库的同一个实例上,从而显著降低运营成本。当然,在合并工作负载之前,性能影响永远是大家必须考虑的核心议题。

在线分析处理(OLAP)解决方案能够最大程度减少实时处理量,快速高效地执行分析与报告,进而给数据仓库及其他关系数据库方案带来优化。之所以能够让性能更上一层楼,是因为这套方案会在执行任意分析之前,预先处理并存储了大量的维度数据和数据分层。

SSAS是一款微软推出的商务智能工作,专门用于开发企业级OLAP解决方案。除了对分析查询及计算进行优化之外,SSAS还能够为客户端应用程序提供必要的语义数据模型,例如Excel、Power BI、SQL Server Reporting Services(简称SSRS)以及其他多种报告与数据可视化工具。其中表格建模还支持内存内数据库设计,能够高效实现列查询并带来更好的数据压缩效果。

在今天的文章中,我们将探讨如何在Amazon RDS for SQL Server数据库实例的表格建模中配置并使用SSAS。

在Amazon RDS for SQL Server上配置SSAS

要在Amazon RDS for SQL Server上配置SSAS,您首先需要满足以下条件:

  • Amazon RDS for SQL Server实例必须为SQL Server 2016标准版或企业版(13.00.5425.0.v1及以上版本),或者SQL Server 2017标准版或企业(14.00.3223.3.v1及以上版本)。
  • 该实例必须被添加至AWS Managed Microsoft Active Directory以启用Windows Authentication功能。关于更多详细说明,请参阅为SQL Server数据库实例设置Windows Authentication
  • 您必须启用Amazon S3集成选项,以实现SSAS模型及备份在实例与S3存储桶之间的往来传输。您还需要获取有效的微软SQL Server for Amazon RDS实例登录权限,以从Amazon S3处下载必要文件。关于更多详细说明,请参阅如何集成Amazon RDS for SQL Server与Amazon S3

创建带有SSAS选项的选项组

关于创建带有SSAS选项的选项组的具体方法,请参阅Option Groups(选项组)上手指南。大体操作如下所示:

  • 在Option名称部分,选择SSAS。

  • 在Max Memory部分,为您的SSAS配置最高使用内存百分比限制。 在设置最大内存时,请考虑RDS数据库实例上的可用内存量。SSAS Tabular是一种内存消耗量大的应用程序,因此如果将SSAS的最大内存设置过高,则有可能影响到在同一实例中的SQL Server的正常运行。 每一个数据库实例都必须拥有至少一个关联安全组。从您的安全组列表中选择一个现有安全组,或者创建新的安全组。请确保关联的安全组允许接收来自SSAS端口的入站流量。

接入SSAS

在SSAS选项添加完成之后,我们即可在RDS实例上接入SSAS。要接入SSAS,大家需要以域用户的身份登录至已加入域的计算机。具体操作步骤如下:

  • 启动SQL Server Management Studio(SSMS)。
  • File菜单中选择Connect Object Explorer…… 这时会弹出接入该服务器实例的窗口。
  • 在Server type中,选择Analysis Services。
  • 在Server name中,输入您的RDS实例终端节点名。
  • 在Authentication部分,选择Windows Authentication。
  • 选择Connect

片刻之后,SSMS将接入您数据库实例上的SSAS。如果大家无法正常接入SSAS,请检查实例安全组,确保其允许接收来自端口2383的入站流量。若需了解更多详细信息,请参阅安全组注意事项

部署并处理表格建模

我们无法将项目直接部署在RDS数据库实例当中。要部署表格建模,我们首先需要将模型文件移动到数据库实例内,而后运行SSAS存储过程。

  • 在SQL Server数据工具中创建一个新的Tabular项目(或者打开一个您之前已经创建完成的项目)。

  • 在项目中创建必要角色,而后向角色当中添加域成员。 为了让域用户对部署完成的模型进行正常操作,该用户必须首先被添加至项目当中。请确保该域用户能够顺利接入RDS实例上的SSAS。
  • 在Solution Explorer选项卡中,选择对应的解决方案并显示属性。
  • 在Deployment Options下选择Processing Option,再选择Do Not Process。 在模型部署完成之后,您就可以直接通过SSMS处理该模型了。
  • 在Solution Explorer选项卡中构建您的项目。 在构建Tabular项目时,SQL Server数据工具会在Analysis Services项目的输出文件夹内创建该文件(默认输出文件夹为 \Bin)。要进行部署,您需要<project name>.asdatabase <project name>.deploymentoptions files
  • 创建一个S3存储桶(或者使用现有存储桶)。本示例将存储桶命名为sample-s3-bucket
  • 将项目文件上传至该存储桶。 请确保实例上已经启用Amazon S3集成选项。
  • 打开SSMS并接入您的RDS SQL Server实例。
  • 运行以下存储过程,并从S3存储桶处将各项目文件下载至实例上的本地Amazon S3文件夹:
exec msdb.dbo.rds_download_from_s3 @s3_arn_of_file='arn:aws:s3:::sample-s3-bucket/testmodel.asdatabase' , @rds_file_path='d:\S3\testmodel.asdatabase' , @overwrite_file=1
exec msdb.dbo.rds_download_from_s3 @s3_arn_of_file='arn:aws:s3:::sample-s3-bucket/testmodel.deploymentoptions' , @rds_file_path='d:\S3\testmodel.deploymentoptions' , @overwrite_file=1
  • 要跟踪当前Amazon S3集成任务的状态,请持续调用rds_fn_task_status函数直至其状态变更为SUCCESS。此函数带有两个参数,将第一个参数设置为NULL,第二个参数设置为任务ID(如果您将任务ID设置为0,则显示所有任务列表)。详见以下代码:
SELECT * FROM msdb.dbo.rds_fn_task_status(null,2);
  • 调用SSAS_DEPLOY_PROJECT 存储过程,将该模型部署至SSAS当中。详见以下代码:
exec msdb.dbo.rds_msbi_task @task_type='SSAS_DEPLOY_PROJECT', @file_path='d:\S3\testmodel.asdatabase';
  • 在SSMS中 SSAS_DEPLOY_PROJECT任务的状态变更为SUCCESS之后,接入Analysis Services并使用Windows Authentication接入SSAS。接下来,我们即可在Databases中看到已经部署完成的项目,具体如下方截图所示。 如果在Databases部分找不到自己的数据库,可能意味着大家的域用户没有数据库级别的访问权限。您需要将用户名添加到模型当中,并重新部署更新后的模型,或者通过SSAS_ADD_DB_ADMIN_MEMBER存储过程添加管理员用户。

  • 要处理这部分数据,请打开与数据库关联的连接对象(单击鼠标右键)。
  • 选择Properties
  • 在连接字符串中更新用户名与密码。
  • 在SSMS中,打开已部署的SSAS数据库(右键点击)。
  • 选择Process Database。 处理时长取决于来自数据源的导入数据总量。

其他操作

在本节中,我们将了解可以选择的其他操作,例如为admin成员添加角色,以及对SSAS数据库进行备份与还原。

为admin成员添加角色

要向域用户授予特定数据库的DB级管理员访问权限,请使用以下代码:

exec msdb.dbo.rds_msbi_task @task_type='SSAS_ADD_DB_ADMIN_MEMBER', @database_name='TestModel', @ssas_role_name='Sample', @ssas_role_member='domain\user';

如果尚不存在角色,以上命令会创建一个新的角色。

备份SSAS数据库

您可以通过SSMS将SSAS数据库直接备份至Amazon S3文件夹,或者运行SSAS_BACKUP_DB存储过程。详见以下代码:

exec msdb.dbo.rds_msbi_task @task_type='SSAS_BACKUP_DB', @database_name='TestModel', @file_path='d:\S3\test-model.abf', @ssas_overwrite_file=1;

还原SSAS数据库

要通过备份文件还原SSAS数据库,我们需要调用SSAS_RESTORE_DB 存储过程,详见以下代码:

exec msdb.dbo.rds_msbi_task @task_type='SSAS_RESTORE_DB', @database_name='NewTestModel', @file_path='d:\S3\test-model.abf';

如果已经存在另一个相同名称的数据库,则还原过程无法正常启动。

总结

本文向大家介绍了如何在Amazon RDS for SQL Server上的表格建模中配置SSAS。如果您在Amazon EC2上运行SSAS,则可直接将相应工作负载与SQL Server数据库所在的RDS DB实例进行合并,从而显著降低运营成本。您可以轻松处理来自数据仓库及其他关系数据库(本地或云数据库)的数据、执行分析查询,并对SSAS数据库进行备份与还原。欢迎大家马上通过AWS Console体验SSAS,并在下文评论区下分享您的看法与心得。

本篇作者

Pooya Amini

Amazon Web Services公司软件开发工程师。他与AWS RDS团队合作,致力于商业数据库引擎与SQL Server的研究。在加入AWS之前,Pooya曾担任Amazon Payment与Alexa项目的软件开发工程师。他乐于应对技术挑战,并热衷学习各类新兴技术。

Richard Waymire

Amazon Web Services公司首席出站架构师。他与AWS客户一道为各类数据库项目提供技术指导与支持,帮助项目方利用AWS的强大服务实现解决方案价值提升。