OLAP 或 OLATP - 如何确定

Ata*_*api 4 performance sql-server olap

我有一个带有数据库的 SQL Express 服务器,该服务器由一个应用程序使用。我正在尝试优化数据库,但不确定数据库是 OLTP 还是 OLAP。

没有安装分析服务器,数据库在 SQL Server 实例内部,因此它应该是 OLTP,但是当我在数据库上运行读/写比率时,我有以下内容:

          Reads    Writes    Read%   Write %

DB file   400 000   75 000   85%     15%

DB log        250   30 000    1%     99%
Run Code Online (Sandbox Code Playgroud)

标准的 OLTP DB 应该有更多的读取而不是写入,对吧?这让我怀疑它可能是 OLAP DB。

我问这个关于超线程技术的使用、MAXDOP 设置以及是否将缓存配置为直写或回写等。

我使用的查询如下:

SELECT DB_NAME(DB_ID()) AS [Database Name] ,
[file_id] , num_of_reads , num_of_writes , num_of_bytes_read , num_of_bytes_written ,
CAST(100. * num_of_reads / ( num_of_reads + num_of_writes ) AS DECIMAL(10, 1)) AS [# Reads Pct] ,
CAST(100. * num_of_writes / ( num_of_reads + num_of_writes ) AS DECIMAL(10,1)) AS [# Write Pct] ,
CAST(100. * num_of_bytes_read / ( num_of_bytes_read + num_of_bytes_written ) AS DECIMAL(10, 1)) AS [Read Bytes Pct] ,
CAST(100. * num_of_bytes_written / ( num_of_bytes_read + num_of_bytes_written ) AS DECIMAL(10,1)) AS [Written Bytes Pct]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) ;
Run Code Online (Sandbox Code Playgroud)

高级 DBA 有什么想法吗?

Tho*_*ser 17

从 DBA 的角度来看,OLAP 和 OLTP 之间的主要区别在于您应用于查询的调整方法。读/写比率并没有真正告诉您任何有用的信息。

我有一个小“魔力象限”,我用它来说明差异(在您的情况下,将 BI/DW 和 ETL 视为与 OLAP 相同):

工作量类别

基本上,如果您必须接触大量数据才能产生查询结果,那么您就是 OLAP。相反,如果您可以通过接触很少的数据来产生返回值,那么您就是 OLTP。

显然,如果您的索引策略很差,那么 OLTP 最终会看起来像 OLAP - 仅仅因为您最终总是进行表扫描。区分这种区别的一个好方法是查看系统中前 10 个最重要的查询必须涉及多少数据 - 无论您的索引策略有多好。

一旦确定了大部分工作负载是什么,您就可以开始应用特定于工作负载的调优技术。以下是您可能会考虑的一些特定于工作负载的技巧(始终根据您的特定工作负载量身定制)

OLAP:

  • 首选散列连接
  • 优化表扫描速度(通常通过为顺序 I/O 布置数据)
  • 聚合视图通常比索引更好
  • 列存储索引优于 B 树
  • 顺序输入/输出
  • 积极去规范化
  • 使用高 MAXDOP
  • 优化网络带宽

OLTP:

  • 首选循环连接
  • 优化索引查找(应该总是有一个指向数据的索引路径)
  • 很少聚集
  • B树索引
  • 随机输入/输出
  • 将数据库保持在 3NF
  • 使用 MAXDOP 1
  • 优化网络延迟

  • 我喜欢那个图形。很多。 (3认同)

小智 -5

由于数据库是在普通 SQL Server 实例中创建的,因此它是一个 OLTP 数据库,因为 OLAP 数据库仅在 Analysis Server 实例中创建。此外,您无法从 OLAP 数据库中插入、更新或删除,因此作为软件开发人员,您无法选择使用 OLAP 作为解决方案的核心数据库。不仅如此,你不能用普通的SELECT语句查询OLAP数据库,你应该使用MDX语句。

OLTP 代表在线事务处理,这意味着它依赖于事务。然而,另一方面,OLAP 依赖于所谓的处理。OLAP数据库依赖于具有特定模式的普通数据库,在加载数据后(可能使用SSIS),进行处理以将数据加载到OLAP数据库中。

  • @HGF:我编写了 Analysis Services 性能指南 2008R2,所以我也对该引擎有一些了解。但即使是 SQL Server Express 在 OLAP 工作负载中也占有一席之地。除了 Microsoft 泡沫和 DAX/MDX 混乱之外,SQL 仍然是最广泛使用的查询语言,关系引擎也是出色的 OLAP 引擎。 (4认同)
  • OLAP 是一种工作负载,而不是一项特定技术。使用标准 SQL Server 作为 OLAP 引擎是完全可行的。 (3认同)
  • HGF,我认为您错过了@ThomasKejser 评论的要点。他可能指的是你的第一句话(*由于数据库是在普通的 SQL Server 实例中创建的,因此它是一个 OLTP 数据库,因为 OLAP 数据库是在分析服务器实例中创建的**仅**。*)我想我的意思是对于 OLAP 工作负载,使用 SQL-Server(而不是分析服务器)是完全可以的(尽管我猜不是很常见)。 (2认同)
  • 请不要**假设您知道谁投票了 - 仅仅因为有人发表评论并不意味着他们投了反对票。投票是私密的,这是有原因的,我从未见过强调谁在何时以哪种方式投票有任何好处。 (2认同)