从数据仓库物理设计分析影响查询性能的三项关键技术

实例演示采用 IBM BCU 设计 架构,以基准测试 TPC-H 为数据源(300GB 数据量)和测试案例,展示了“三驾马车” 对查询性能的拉动效果。无论是在 POC 测试还是在现实生产系统中,查询性能都是 客户非常关注的重要指标。通过本文,读者可以充分了解“三驾马车”的奥秘所在, 文中的实例演示对读者有借鉴和参考意义。

在">数据仓库领域中,无论是在生产系统中,还是 POC(Proof Of Concept) 性能测试,查询性能对于客户来说都是非常重要的性能指标。良好的查询性能 为各类数据仓库应用的高效作业奠定了基础。而对于查询性能来说,众所周知, 其主要性能瓶颈来自于系统 I/O,因此本文从数据仓库物理设计的角度出发, 阐述了影响查询性能的三项关键技术,并以基准测试 TPC-H 进行了实例演示, 展示性能提升的效果。

关于分区数据库,表分区和多维集群(MDC),developerWorks 上已经有 很多优秀的文章对其基本原理和特点分别进行了阐述,本文将不再赘述。本文 重点关注该三项技术在物理设计方面对查询性能的影响。

理论依据

分区数据库(Database Partitioning Feature)

分区数据库中的 Share-Nothing 架构,将繁重而又耗时的系统 I/O 作业平均分配到集群中的各个节点,结合 SAN(Storage Area Network)存储 网络,能够充分利用磁盘控制器的 I/O 性能以及存储网络的带宽。

为了能够平衡各节点的 I/O 繁忙程度,均衡的数据分布,就显得尤为重要。 数据的分布情况取决于数据本身以及数据库分区键的选择,数据库分区键的 选择应遵循以下原则:

1. 唯一数值较多、较分散的列;

2. 经常用于联结(JOIN)的列;

在数据均衡分布的情况下 , 才能避免某一节点因处理过多数据造成 I/O 过度 繁忙从而成为整个集群的瓶颈。

在单机数据库环境下,查询的处理只能利用单机中的系统资源(CPU, Memory,I/O),当数据存储在单张大表时,BI(Business Intelligence) 查询通常需要访问表中的大部分数据,如对于查询 sql1 来说,在单机环境下, 数据的物理分布如图 1 所示。在没有创建索引的情况下,数据库需要扫描整张 大表来查询符合条件的记录,不难想象扫描大表所需要的繁忙 I/O 对查询整体 性能的影响。

清单 1. 查询 sql1

SELECT C_NAME, C_TOTAL_SPEND, C_LOYALTY_TIER from CUSTOMER where C_REGION = ‘ North America ’ AND C_MONTH= ‘ March ’ AND C_TYPE= ‘ VIP ’

(注:蓝色三角形代表符合查询条件的数据,即 C_REGION= ‘ North America ’ AND C_MONTH= ‘ March ’ AND C_TYPE= ‘ VIP ’)

图 1. 单机数据库环境中数据的物理分布

采用多分区数据库,可以将数据均衡地分布于集群中的各节点,虽然 BI 查询 仍需要扫描整张大表、读取大部分数据,但查询可以并行到所有节点,如图 2 所示。

图 2. 分区数据库环境中数据的物理分布

时间: 2024-08-03 18:06:09

从数据仓库物理设计分析影响查询性能的三项关键技术的相关文章

数据仓库中拉动查询性能的三驾马车

前言 在数据仓库领域中,无论是在生产系统中,还是 POC(Proof Of Concept) 性能测试,查询性能对于客户来说都是非常重要的性能指标.良好的查询性能 为各类数据仓库应用的高效作业奠定了基础.而对于查询性能来说,众所周知, 其主要性能瓶颈来自于系统 I/O,因此本文从数据仓库物理设计的角度出发, 阐述了影响查询性能的三项关键技术,并以基准测试 TPC-H 进行了实例演示, 展示性能提升的效果. 关于分区数据库,表分区和多维集群(MDC),developerWorks 上已经有 很多优

Sql Server 查询性能优化之走出索引的误区分析_MsSql

据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是,或者干脆把整个查询SQL直接发给DBA,让DBA直接帮忙优化了,所以造成的状况就是开发人员对于索引的理解.认识很局限,以下就把我个人对于索引的理解及浅薄认识和大家分享下,希望能解除一些大家的疑惑,一起走出索引的误区 误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的

where 1=-1 and 1=1 会不会影响查询效率?

                    今天用sql profiler跟一个底层生成的SQL 的时候,跟到这样一段代码:       WITH TempQuery AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY CreateTime DESC) AS 'RowNumberForSplit' FROM (select E.Name as Name, U.RealyName as RealyName,C.[Description] as Descriptions

分析Sql Server查询性能优化之走出索引的误区

误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的观点是错误的,SQL Server查询优化器是基于开销进行选择的优化器,通过一系列复杂判断来决定是否使用索引.使用什么类型索引.使用那个索引.SQL Server内部维护着索引列上的数据的统计,统计信息会随着索引列内容的变化而变化,索引的有效期完全取决于索引列上的统计信息,随着数据的变化关于索引的检索机制也随之变化.对于查询优化器来说始终保持查询开销最低始终是其的不二选择,如果一个非聚集索引的列上有大量的重复值,

Sql Server 查询性能优化之走出索引的误区分析

据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是,或者干脆把整个查询SQL直接发给DBA,让DBA直接帮忙优化了,所以造成的状况就是开发人员对于索引的理解.认识很局限,以下就把我个人对于索引的理解及浅薄认识和大家分享下,希望能解除一些大家的疑惑,一起走出索引的误区 误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的

MySQL架构优化实战系列2:主从复制同步与查询性能调优

一.主从复制同步部署   1.概念 主从复制:2台以上mysql服务器, 做负载均衡, 主服务器负责增删改 , 从服务器负责查询 同步原理:mysql开启bin-log日志,主服务器所有的增删改操作会记录到bin-log日志:然后主服务器把bin-log日志发送 给 从服务器 , 从服务器重放bin-log日志 确保数据同步 2.开启bin-log日志 配置 my.cnf 文件 并重启 mysql [root@localhost etc]# vim /etc/my.cnf     [root@l

SQLServer性能优化之 nolock,大幅提升数据库查询性能

原文:SQLServer性能优化之 nolock,大幅提升数据库查询性能 公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了index的建立之外,当我们在下SQL Command时,在语法中加一段WITH (NOLOCK)可以改善在线大量查询的环境中数据集被LOCK的现象藉此改善查询的效能. 不过有一点千万要注意的就是,WITH (NOLOCK)的

SQL查询性能分析

原文:SQL查询性能分析 原文出处:http://blog.csdn.net/dba_huangzj/article/details/7623926 SQL查询性能的好坏直接影响到整个数据库的价值,对此,必须郑重对待. SQL Server提供了多种工具,下面做一个简单的介绍:   一.SQL Profiler工具 SQL Profiler可用于: l  图形化监视SQLServer查询: l  在后台收集查询信息: l  分析性能: l  诊断像死锁这样的问题: l  调试Transact-S

SQL Server查询性能优化之创建合理的索引(下)

续上一篇SQLServer查询性能优化之创建合理的索引(上) 数据库索引分为聚集索引和非聚集索引,聚集索引就是物理索引,也就是数据的物理的存储顺序,聚集索引的叶子节点就是数据行本身:非聚集索引是逻辑索引,也可以简单的认为是对聚集索引建立的索引,一般来说聚集索引的键就是非聚集索引的叶子节点(在不使用include时). 关于索引的选择 对于索引类型来说没什么好选的,一般来说聚集索引是必须的(有特殊需要的另说),非聚集索引看实际需要灵活建立.因此对于索引来说主要是决定在那些列上建立索引,尤其是对于聚