SSAS - 最佳实践和性能优化(3)

本文探讨了影响分析服务cube性能的因素,如源系统设计、网络问题等,并详细介绍了服务器资源优化的最佳实践,包括线程管理和内存限制配置。此外,还提供了SQL Server Reporting Services (SSRS) 报表设计的建议。

问题

有几个方面可能会影响分析服务cube的性能。比如,源系统,cube和MDX查询的设计,网络问题。在这一节,将讨论在设计和开发分析服务多维数据集时应该考虑的一些最佳实践。

解决方案

在本系列的第1部分中,我们讨论了典型的SSAS应用程序架构和SSAS内部架构的不同组件,以及不同组件和区域对性能改进所扮演的角色。在原文第2部分中,讨论了源系统设计和网络考虑,翻译版中删除了这一部分内容。在第2部分中,谈到了多维数据集设计和开发。在本文中,将与您分享服务器资源和报表服务的最佳实践和性能优化技术。

服务器资源优化

在本节中,将讨论一些SSAS实例属性,这些属性将影响多维数据集处理和查询响应的总体性能。

在SSAS中线程或并行处理

SSAS被设计成并行执行它的操作,因此它可以创建多个线程来并行执行多个请求。由于创建和销毁线程是一项昂贵的事务,SSAS维护了两组工作线程池,以返回当前未使用的线程,因此SSAS可以再次将它们用于服务其他请求。这两个池称为查询线程池和进程线程池。

如果你还记得本系列的第一节介绍的SSAS架构.XMLA侦听器侦听传入的请求,并创建(或者使用查询线程池中空闲的线程)查询线程检查数据/计算公式引擎缓存。如果缓存中没有想要的数据,XMLA侦听器创建或使用一个处理线程来从存储引擎缓存或磁盘中检索数据。进程线程还会将在从磁盘检索到的数据存储到存储引擎缓存中,同时查询线程将聚合数据存储到公式引擎缓存中以服务将来的查询。

因此,现在我们了解了SSAS能够创建的线程越多,可以并行处理的请求就越多。但是,可以创建多少个线程呢?可以通过设置一些SSAS实例属性来控制它

ThreadPool\Query\MinThreads(Max)

这两个属性决定了可以由SSAS创建的最小和最大查询线程数。

ThreadPool\Process\MinThreads(Max)

这两个属性决定了可以由SSAS创建的最小和最大处理线程数。

OLAP\Process\BufferMemoryLimit

SSAS在事实表分区处理过程中使用缓冲区来临时存储数据,然后在处理结束后将数据写到磁盘上。

OLAP\Process\AggregationMemoryLimitMin(Max)

默认的最小值为10%,最大值为80%。这表示可以在每个分区中创建聚合使用的最小和最大百分比的SSAS内存。如果有很多的分区在并行处理,则应该考虑将其保持在低位,以提高ProcessIndexes的性能(在每个分区中创建聚合)。

DataDir和LogDir

默认数据文件和日志文件存储位置。可以考虑将这些文件存储在更快的磁盘驱动器。

Log\FlightRecorder\Enabled

默认状态是ON,它在一个短期日志文件中记录SSAS活动。这个日志对处理和查询性能故障排除非常有用,但同时也会增加I / O开销。所以理想情况下,应该在生产环境中设置为OFF,并且只在需要时启用它。

报告设计与开发

SQL Server Reporting Services(SSRS)是SQL Server商业智能的报表组件。可以基于任何数据源创建报表,包括SSAS。当创建SSRS报表时,应该遵循一些最佳实践,以获得更好的用经验。

1.数据源级别过滤数据,而不是报表级别

2.启用报告缓存或快照

3.为报表创建标准或数据驱动的订阅

4.考虑SSRS部署的扩展性

原文地址:
https://www.mssqltips.com/sqlservertip/2568/ssas–best-practices-and-performance-optimization–part-4-of-4/

SQL注入的原理 什么SQL注入 将SQL代码插入到应用程序的输入参数中,之后,SQL代码被传递到数据库执行。从而达到对应用程序的攻击目的。 注入原理 常见攻击方法 检测是否可以注入【检测注入点】 示例:http://192.168.0.1/temp.aspx?id=a or 1=1-- 如果上面语句可以执行说明可以实现注入,则可以 利用系统过程、系统表注入数据库 示例【给系统添加一个用户,黑客可以实现远程登录控制服务器】:http://192.168.0.1/temp.aspx?id=1;exec xp_cmdshell 'net user admin 123456 /add' 绕过程序的限制 示例:程序中往往限制单引号的数据,但是黑客传入单引号的ASCII码 跨站点注入 在Web页面挂某些恶意的HTML、JavaScript代码 防范SQL注入 限制错误信息的输出,避免错误信息的输出使得黑客知道网站的技术实现采用什么数据库,采用什么平台 示例:在Web.config文件中设置 限制访问数据库账号的权限 在开发应用系统的时候就应该限制,给程序最小访问数据库的权限 使用参数命令传递参数 不要使用拼接字符串的方式构造SQL语句而采用参数命令 使用存储过程 存储过程在数据库中 只能执行存储过程中固定的代码 限制输入长度 防止黑客输入超大字符串,导致服务器瘫痪 防止黑客输入较长的恶意脚本等 实现方法:文本框的MaxLength属性 URL重写技术 示例: http://testWeb/news.aspx?id=111 重写成:http://testWeb/10101111.html 传递参数尽量不用字符串 http://testWeb/news.aspx?id=111 and 1=1【黑色部分给了SQL注入的机会】 SQL优化 为什么要优化 开发是对性能考虑不多【技术差、项目工期紧等原因没有考虑性能问题】 系统运行中,数据量扩大,访问量增多,蹩脚的SQL危害开始显露 低效SQL的危害 系统响应变慢,软件开发中的8秒定律,当打开一个软件或网页超过8秒时间还没有显示,则响应太慢。 死锁,当不同用户都访问某些资源的时候SQL语句不当导致死锁 客户失去信心,软件失败 低效SQL低效在哪里?  性能低下的根源  硬件原因,数据库的配置不合理,数据库的数据文件日志文件没有分磁盘存放,会极大影响IO性能  没有建立索引,或者SQL没有走索引。在千万级数据的表上建索引是很有必要的。  SQL过于复杂,过长的SQL语句满足程序需求但是影响性能。子查询嵌套过多对性能有影响,查询关联的表特别多也影响性能  频繁访问数据等等 SQL如何被SQLServer执行的 SQL执行原理  解释:首先解释SQL语句【语法是否正确】  解析:检验语句的出现的对象是否有效【进行一个解析,要检查对象所有权的权限】  优化:【检查SQL语句是否能够使用索引,SQL语句如何执行效率高,制定一个执行计划】  编译:  执行SQL语句:【把编译过的查询要求提交并进行处理】 如何优化SQL 完善开发的管理 完善代码审核、测试机制,软件开发是艺术! 检测SQL查询的效率 语法【对IOTime对SQL执行进行统计】: SET STATISTICS IO ON SET STATISTICS TIME ON ------------SQL代码--------- SET STATISTICS IO OFF SET STATISTICS TIME OFF 注意:在检测之前要清理缓存,因为当我们执行SQL语句的时候查出的数据会在数据库中进行缓存,重新查询会返回缓存中的信息。 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 经验:使用子查询嵌套不要过多,尽量使用表连接查询代替子查询,因为表连接查询效率稍高一点。 SQL优化工具 使用报表服务 通过Reporting Service查找低效SQL 选择 性能 - 批处理执行统计信息性能相关的几个报表服务: 性能 - 对象执行统计信息 性能 - 按平均CPU时间排在前面的查询 性能 - 按平均IO次数排在前面的查询 性能 - 按总CPU时间排在前面的查询 性能 - 按IO总次数排在前面的查询 操作示范: 1. 数据引擎上点击右键—报表—标准报表—关心的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值