许多在线博客我看到一个建议,说并行性适用于数据仓库系统,而不适用于 OLTP 系统。许多专家甚至建议通过在 OLTP 环境中将最大并行度设置为 1 来关闭并行度。我正在尝试为此类建议寻找依据,我的猜测是因为 OLTP 系统会受到许多并发请求的影响,从而使 CPU 处于忙碌状态;查询优化器使用的并行性可能是一种开销。
然而,并行不是一个福音。通过允许多个线程处理请求,我们可以减少查询处理时间。
试图更深入地研究并行性。关于 OLTP 系统中的并行性的任何建议。
许多在线博客我看到一个建议,说并行性适用于数据仓库系统,而不适用于 OLTP 系统。许多专家甚至建议通过在 OLTP 环境中将最大并行度设置为 1 来关闭并行度。我正在尝试为此类建议寻找依据,我的猜测是因为 OLTP 系统会受到许多并发请求的影响,从而使 CPU 处于忙碌状态;查询优化器使用的并行性可能是一种开销。
然而,并行不是一个福音。通过允许多个线程处理请求,我们可以减少查询处理时间。
试图更深入地研究并行性。关于 OLTP 系统中的并行性的任何建议。
SQL Server 只会为昂贵的查询引入并行性。典型的 OLTP 查询根本不受影响。
小心使用全局 MaxDOP 设置,而不要确切了解正在运行的工作负载以及该设置对它的作用。
在 OLTP 中,您的插入通常是小型、快速的事务,在某些情况下甚至可能是非日志操作。
同样在 OLTP 中,查询是典型的点查询,这意味着查询将返回单行或非常小的行集。OLTP 数据库通常可以包含在内存中(表和索引),因为旧数据不是 OLTP 系统感兴趣的东西。
大多数人不在 OLTP 数据库中执行任何 DSS 类型查询。额外的索引、磁盘 I/O 等会干扰缓存/任务切换,并且会损害 OLTP 性能,这更多地基于延迟。
当您进行数据仓库类型处理时,您会查看数据范围、一天的过程、一周/月/年/等的平均值。这就是并行查询有意义的地方。分解问题,将它们交给工作线程并合并结果。
需要进行一些设置才能从中获得任何真正的好处,分区、多核/多处理器 CPU、适当的磁盘控制器/路径、raid 阵列或缓存前端磁盘存储(如 EMC)。它们是为两个完全问题集而设计的。