工欲善其事,必先利其器
我们已经知道,DAX 是性能强大的数据分析语言,在 Excel 里就可以轻松处理几百万行数据。但在实际使用的时候,很多人并没有体验到这种酣畅淋漓的感觉,反而是经常遇到莫名奇妙的报错和闪退,造成这种情况的原因是忽视了 DAX 对硬件配置和软件的基本要求。一般来说,面向个人用户的自助 BI 工具对软硬件的要求并不高,市面上的主流配置足够流畅运行,但仍然有一些事项需要注意。
这篇文章总结一下安装和运行 Excel PowerPivot 和 Power BI 的一些注意事项,分为两个部分,最低要求和硬件选择指南。
硬件最低要求
官方推荐的最低硬件要求是:内存 1GB,CPU 主频 1GHz,这个标准太低,不具备参考价值。如果以保证最基础的使用体验为原则,建议配置:
- 内存不低于 4GB
- CPU 主频 2GHz 左右
- 硬盘没有特殊要求
目前市面上低端笔记本都能达到这个标准。
软件最低要求
满足硬件要求很容易,软件要求相对隐性一些,但一样重要,如果硬件达标了,软件不合适,最终体验还是受影响。
操作系统
Windows 7 以上,不支持 XP,不支持 Mac 系统,Mac 版 Excel 不能使用 Power Pivot。目前微软还没有在 Mac 系统适配 Power BI 的迹象。
使用 64 位系统。32 位虽然运行程序没有问题,但可用内存只有 3G,如果运算量较大很有可能出现闪退或假死的情况。
安装 IE10 以提供必要的运行组件
Excel
Excel 2013 以上或 Office 365 E3 以上版本。其他版本 office 不支持 Power Pivot。微软未来会陆续在 Office 365 所有版本中支持 Power Pivot,具体时间以软件更新为准。
使用 64 位版本,原因同上。32 位 Excel 分配给 PowerPivot 的可用内存只有大约 1GB,非常容易假死和闪退。
定期安装 Office 更新,这一点对使用离线版 Excel 的用户非常重要。微软会通过打补丁的方式升级 Power Pivot 和 PowerQuery,如果你安装了 Excel 2016 但从来没有更新过 Excel,内置的 Power Pivot 实际上还是 N 年前的版本,功能少而且非常不稳定。更新 Office 有两种方式:Excel 内更新和随系统更新,具体方法百度可以找到。
Power BI Desktop
可以从官网页面和 Windows 商店下载安装,功能相同。商店版每月自动更新,省去了手动下载安装的麻烦,建议优先考虑。
建议安装 64 位版本,原因同上
硬件选择指南
硬件配置容易走两个极端,一种是配置太低,带不动,随着硬件发展和价格的降低,手机的配置都快超过电脑了,除了一些企业还在用老旧的电脑,个人电脑基本上不用担心这个问题。
另一个极端是堆硬件,追求高配置。当硬件水平超过软件自身的运算能力之后,多出来的部分其实都是浪费,比如你花 17000 元装了一个 18 核心 36 线程的 i9 处理器,和普通的 i7 处理器相比,Excel 的使用体验并不会提升多少。当然,高配置在运行多任务、大型游戏以及视频渲染的时候体验更好,但这个超出本文讨论的范畴。
如果你想配置一台高效运行 DAX 的主机/笔记本/服务器,并且预算有限,想把钱花在刀刃上,请优先考虑以下几项硬件配置,按重要程度排序:
- CPU 主频和型号
- 内存速度
- 核心数量
- 内存大小
磁盘 I/O 性能不在列表中,也就是你不需要考虑硬盘的类型。在表格模型中,查询期间没有直接的硬盘读写操作。唯一产生 I/O 的情况是内存不足的时候。但是,在可用内存不足导致系统分页时,你应该调整系统的 RAM 大小以避免分页。把预算花在 CPU、内存速度和内存大小方面,硬盘不重要。
CPU 主频和型号
影响 DAX 引擎代码运行速度的最重要因素是 CPU 主频和型号。在相同的主频下,不同的 CPU 型号可能具有不同的性能,因此仅考虑主频是不够的。最佳实践是在自己的环境中运行基准测试,通过对公式引擎进行压力测试以评估性能。在 Adventure Works 模型上,这样一个查询的示例如下:
EVALUATE ROW ( "Test", COUNTROWS ( GENERATE ( TOPN ( 8000, CROSSJOIN ( ALL ( Reseller[ResellerKey] ), ALL ( Reseller[GeographyKey] ) ), Reseller[ResellerKey] ), ADDCOLUMNS ( SUMMARIZE ( Sales, OrderDate[FullDate], Products[ProductKey] ), "Sales", CALCULATE ( SUM ( Sales[SalesAmount] ) ) ) ) ) )
你可以从这里下载样例工作簿到你的电脑上测试这个查询。打开 Excel 工作簿,从 Excel 加载项中唤起 DAX Studio 运行这个查询,即可评估公式在本地的运算性能
这个查询在 Intel i7-4770K 3.5 GHz 上运行时间平均为 6.8 秒,在 Intel i7-2860QM 2.5 GHz 上运行时间 12.4 秒。一个是台式工作站和一个是笔记本。不要假定服务器运行得更快,基于自己测试的结果做判断,因为结果可能会出乎你的意料。如果服务器上没有 Excel,可以在 Analysis Services 表格上恢复 Power Pivot 模型,如果没有 DAX Studio,可以在 SQL server Management Studio 上运行查询。
一般来说,服务器上使用的 Intel Xeon 处理器是 E5 和 E7 系列,即使有非常多的可用内核,在 2GHz 左右的主频也是非常常见的。如果可能的话,你应该寻找 3 GHz 或更高的主频。另一个重要因素是 L2 和 L3 缓存的大小:它们越大越好。这对于大型表以及基于唯一值超过 100 万的列建立的关系尤其重要。
内存速度
内存速度是影响 DAX 引擎性能的一个重要因素。引擎所做的每一个操作都以很高的速度访问内存。当内存带宽成为瓶颈时,你将看到 CPU 使用率而不是 I/O 居高不下。遗憾的是目前没有性能计数器来监视等待内存访问所花费的时间。在表格模型中,这段时间耗时可能相当可观,很难观测。
一般来说,你应该使用频率至少有 1600 MHz 的内存,但是如果硬件平台允许,你应该选择更快的 RAM(1833、2133、2400 MHz 或更多)。顺便提一下,游戏主机的内存频率通常都很高,是运行 DAX 的不错选择。
核心数量
对于 DAX 引擎来说,CPU 核心数量并不是越多越好,只有当表被分为多段(Segments)时,引擎才在多个线程上拆分执行。默认情况下,每个组包含 800 万行(在 Power Pivot 中为 100 万行)。如果你有八个核心,则除非表至少有 6400 万行,否则你不会看到所有核心都参与到一个查询中。
由于这些原因,增加核心数量仅对非常大的表有效。只有当查询命中一个大表(2 亿行或更多行)时,增加核心数才能提高它的性能。但这已经超过了个人电脑运行的上限,进入了服务器和 SSAS 优化的范畴:
在并发用户数的弹性伸缩方面,如果用户访问相同的表,他们会共享内存,较高的核心数量可能不会提高性能。增加并发用户数量的更好方法是在负载均衡配置中使用更多的服务器。
最佳实践是在单个插槽上获得最大核心数,获得最高的可用主频。不要在同一台服务器上使用两个或更多插槽。AnalysisServices 表格不识别 NUMA 结构,该结构在不同插槽之间拆分内存。每当一个插槽上运行的线程访问由另一个插槽分配的内存时,NUMA 需要更耗时的槽间通信-你可以在硬件调整表格解决方案(SQL Server Analysis Services)中找到有关 NUMA 体系结构的更多详细信息,访问这里了解详情。
内存大小
内存用于存储表格模型的所有数据,你还需要内存来执行进程操作和执行查询任务。拥有足够的内存只能保证查询最终可以返回结果,但是请注意增加可用内存并不能提高性能。
模型使用的缓存不会仅仅因为更多的可用内存而增加。但是,如果服务器对数据分页,那么低可用内存的情况会拖慢查询性能。你需要有足够的内存来存储数据库中的所有数据,并避免在查询执行期间物化(Materialization)因为数据库表具有很高的压缩率,而物化会生成未压缩的数据。
硬盘 I/O 和分页
不必为表格模型的存储 I/O 分配预算。它和多维模型非常不同,在多维模型中,磁盘上的随机 I/O 操作非常频繁,特别是在某些度量值中。在表格模型中,查询期间没有直接的存储 I/O 操作。可能发生这种情况的唯一事件是内存不足的情况。但是,在可用内存不足导致系统分页时,向服务器提供更多内存比增加存储 I/O 吞吐量来提高性能更经济、更有效。
结论
对个人用户而言,CPU>内存速度>核心数量>内存大小,游戏主机更适合 DAX 引擎。
高飞老师好,DAX圣经中提到公式引擎是在单线程下运行的。那么我有个困惑,如果多个用户同一时间并发发送查询,表格模型是否会为每一个用户的查询单独分配一个用于公式引擎的线程呢呢?如果会的话,那么是否意味着增加内核数是有意义的,可以更好的应对多用户的场景。
macbook pro 2014 mid
Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
16g 1666
9.9s 还能再坚持
再测一个
Thinkbook 16
i5-13500H 16GB
3.7s
又找了一台电脑
英特尔 Core i5-8300H @ 2.30GHz 四核
主 板 戴尔 0JYXHN(HM370 芯片组)
内 存 8 GB ( 镁光 DDR4 2666MHz 8GB )
硬 盘 英特尔 SSDSCKKF128G8 SATA 128GB (128 GB / 固态硬盘)
显 卡 NVIDIA GeForce GTX 1050 Ti ( 4 GB / 戴尔 )
7s 了 已经接近群友的常规水平了
终于能凑合用了
开始努力学习
处理器 英特尔 Core i5-6200U @ 2.30GHz 双核
显卡 NVIDIA GeForce 920MX ( 2 GB / 联想 )
内存 16 GB ( 联想 DDR4 2666MHz 8GB x 2 )
11s 手头还算能用的的机器了 先用用吧
感觉游戏主机好像都是 拼显卡的 反而cpu 不是升级的重点
Apple M1 Pro Parallel Desktop 默认分配规则 居然跑了 24.6s 。。。 感觉还是应该搞一台 windows 机器
6.8秒 台式机i3-10100 CPU @ 3.60GHz 8G2666
5.7秒 i7-1165G7 @ 2.80 GHz 16G RAM
i7 1195G7 四核处理器,16G内存 5秒,感觉够用
最新数据12900k默认频率 3.2秒
那么,AMD 的ZEN2 和INTEL 10代U哪个效率更高呢?
请问那个测试应该怎么做呢?我下载了样例文件,也安装了DAX Studio,打开Excel后打开Studio,没有显示连接,无法运行这个查询
物化是否可以简单的理解为,类似ACCESS里面生产一张硬表呢?
台式G5400,3.7GHz,8G内存,daxstudio运行9.4秒
thinkpad e555 两条8g内存
测试竟然需要17.7秒,我是不是该换笔记本了?
修剪平均值 9.4375 8.7375
序号 笔记本 台式机
1 9.5 9.1
2 9.3 8.6
3 9.7 8.8
4 11.4 8.7
5 9.1 8.8
6 9.4 8.7
7 9 8.7
8 9.4 8.7
9 9.1 8.8
10 10 8.7
然后补充一下台式机的主频3.4GHz
然后开机测试了笔记本的数据,这次使用多次测试,计算修建平均值(即剔除最高和最低之后的平均)结果如上。
笔记本的CPU为i7 6700HQ ,主频2.59GHz
台式机戴尔(DELL)灵越5675-R1GN8L配置如下
处理器 AMD Ryzen 7 1700X Eight-Core Processor 八核
主板 戴尔 07PR60 ( AMD PCI 标准主机 CPU 桥 )
内存 8 GB ( 镁光 DDR4 2400MHz )
DAXStudio查询结果用时:9.1S
感受:常规台式机的效能应该还是可以的。