常用测试模型:TPCDS
1 前言
TPCDS是模拟OLAP应用的典型场景,因其贴近真实场景,且有工具直接生成数据,而成为SQL引擎测试组最常用的测试模型。然而实际手工用例编写过程中,并没有使用TPCDS完整模型,而只是选择部分表作为测试表,同时测试用例编写中主要考虑语法、及与相关特性结合,而没有结合实际应用场景。为了提高手工用例的质量,更贴近用户使用,同时结合TPCDS场景,构建集成测试和系统测试的测试用例、测试场景,深入分析TPCDS是非常有必要的,本文将从几个角度分别进行分析:模型、场景、语句、数据。
2 TPCDS模型
2.1 TPCDS场景概述
TPCDS场景中,包含了一个成熟的决策支持系统所具有的两项最重要的因素:
1. 用户查询语句,将数据操作转化为商业智能。TPCDS的语句可以分为以下四类决策支持语句:
l 报告型,这类语句通常是预定义的,会周期性地运行,来判断企业的财务和运行状况,比如月度、季度、年度财务报表。通常为静态的,改变的只是时间段、地理位置或商品名称。
l 即席查询(Ad hoc),这类语句主要用于即时、特定的商业问题。它与报告型语句的主要差别在于预知程度(报告型都是计划中的,而Ad hoc通常是临时性的)。
l 迭代OLAP,这类语句主要通过对数据进行研究分析来判断事物之间的联系和发展趋势。与Ad hoc语句相似,区别为该类语句基于一个具体的用户场景,且会提交一系列的复杂或简单语句。比如,通过某类客户过去几年的购买力分析,预测将来的购买力趋势。
l 数据挖掘,这类语句是对大量数据进行分析,挖掘潜在的、无法直观得出的结论,从而支持商业决策。比如购物网站的购买推荐。
说明:报告型语句通常可预先优化,因此执行时间短,而即席查询正常相反。TPCDS中,catalog 渠道相关语句模拟报告型语句,而store和web渠道相关语句模拟即席查询部分。
2. 数据维护,对于决策分析所依赖的源数据需要同步管理。在实际生产环境中,数据维护的过程通常包括三个步骤:数据抽取、数据转换、数据加载(ETL)。TPCDS数据维护过程为:
l 加载要更新的数据集,包括insert/delete/update的数据
l 加载要更新的数据集到数据仓库,进行数据转换
l 插入新的事实表记录,并根据时间删除某些记录
举例说明TPCDS模拟的商业活动:
1. 记录各个销售渠道的所有客户购买信息与退货信息
2. 根据促销信息修改价格
3. 维护仓库存货信息
4. 创建动态网页
5. 维护客户信息
2.2 TPCDS模型介绍
2.2.1 概念
在多维分析的商业智能解决方案中,根据事实表和维度表的关系,常见的模型分为星型模型和雪花型模型。
星型模型:
中央表包含事实数据,多个表以中央表为中心呈放射状分布,它们通过数据库的主键和外键相互连接,是一种使用关系数据库实现多维分析空间的模式,其基本形式必须实现多维空间,以使用关系数据库的基本功能。同时星型模型也是一种非正规化的模型,多维数据集的每一个维度直接与事实表连接,没有渐变维度,所以存在冗余数据。在星型模型中,只需要扫描事实表就可以进行查询,主要的数据都在庞大的事实表中,所以查询效率较高,同时每个维度表和事实表关联,非常直观,很容易组合出各种查询。
雪花型模型:
雪花模型在星型模型的基础上,维度表进一步规范化为子维度表,这些子维度表没有直接与事实表连接,而是通过其他维度表连接到事实表上,看起来就像一片雪花,故称雪花模型。也就是说雪花模型是星型模型的进一步扩展,将其维度表扩展为更小的维度表,形成一种层次。这样就通过最大限度的减少数据存储量以及联合较小的维度表来改善查询性能,且去除了星型模型中的冗余数据。
两种模型比较:
星型模型 |
雪花型模型 |
|
特点 |
1. 非正规化; 2. 多维数据集中的每一个维度都与事实表连接(通过主键和外键); 3. 不存在渐变维度; 4. 有冗余数据; 5. 查询效率可能会比较高; 6. 不用过多考虑正规化因素,设计维护较为简单 |
1. 正规化; 2. 数据冗余少; 3. 有些数据需要连接才能获取,可能效率较低; 4. 规范化操作较复杂,导致设计及后期维护复杂; |
2.2.2 TPCDS模型概述
TPCDS模型模拟一个全国连锁的大型零售商的销售系统,其中含有三种销售渠道:store(实体店)、web(网店)、catalog(电话订购),每种渠道使用两张表分别模拟销售记录和退货记录,同时包含商品信息和促销信息的相关表结构。
TPCDS采用雪花型数据模型,三种渠道的销售、退货表、及总体的存货清单作为事实表,其他商品相关信息、用户相关信息、时间信息等其他信息等都作为维度表,同时各表命名达到见名识义,详细如下表所示:
事实表 |
维度表 |
Store Sales、Store Returns Catalog Sales、 Catalog Returns Web Sales、 Web Returns Inventory |
Store、Call Center、Web_site Warehouse 、Catalog_page、Web_page Customer、Customer_address、Customer_demographics Household_demographics、Income_band Date_dim、Time_dim Item、Promotion、Reason、Ship_mode |
上述维度表具体分为三类:
1. 静态的:导入数据库以后,数据将永远保持不变,如date_dim、time_dim
2. 历史相关的:即数据记录跟时间相关,每条记录只在对应的时间段内有效。比如:item(如一月份有商品1,二月份有商品2)
3. 非历史相关的:即数据记录跟时间无关,不需要保留历史数据,比如:customer
它包含几组模型关系图,详细如下:
l Store_sales 的ER图
l Store_returns 的ER图
l Catalog Sales 的ER图
l Catalog Returns 的ER图
l Web Sales 的ER图
l Web Returns的ER图
l Inventory的ER图
Schema说明:
1) 表、索引可以使用水平和垂直分区
2) 除了基表,可以建立其他的辅助表结构(EADS),如索引、物化视图(只允许事实表与维度表间的主外键关系连接)。
3) 可以使用主外键、NOT NULL约束
2.3 TPCDS数据
TPCDS中,以SF定义数据量,如下图:
具体对应的行数如下图:
2.4 TPCDS语句
TPCDS所有99个Query,覆盖SQL99和2003的核心部分以及OLAP。下面我们从语法和语义两个角度进行分析。
1. 语法
l 语句特点,总结如下:
SQL特征 |
查询数量 |
Correlated subquery |
10 |
Non-correlated subquery |
34 |
Group by |
81 |
Order by |
89 |
Rollup |
11 |
Exists |
5 |
Union |
18 |
Intersect |
3 |
Case |
29 |
Substr |
9 |
Having |
7 |
Over |
15 |
CTE |
28 |
l 过滤条件主要用在维度表上,具体集中在如下几张表:date_dim(d_year/d_date/ d_qoy/d_dom)、item(i_category/i_current_price/i_manufact_id/i_class)、customer_address(ca_state/ca_zip/ca_gmt_offset/ca_city/ca_county)、customer_demographics(cd_gender/cd_marital_status/cd_education_status)、houshold_demographics(hd_vehicle_count/hd_buy_potential/hd_dep_count)、store(s_state);
l 连接条件为表间的PK-FK关系上
l 聚集运算主要集中在事实表上,例如:价格、数量等。
2. 语义
TPCDS中每个语句都回答一个商业问题,重点在于各种统计,可以分为从客户、商品两个维度进行,统计通常只针对某个具体的时间、具体的类别,进行环比、同比等各种分析,各语句语义参见附录。语句可以进行修改,但不能改变语义。
2.5 TPCDS测试流程
TPC-DS 测试流程包括:
1) 数据加载测试
l 数据加载分为两种方式:a)使用生成完的数据进行导入;b)使用dsdgen边生成边导入。
l 数据加载时间包括:测试基础表创建、数据加载、约束验证、辅助数据结构( 如索引) 创建、表和辅助数据统计分析等。
l Power测试之前,不应重启系统
2) 查询顺序执行( Power)测试
l 评测数据库对单个查询流的处理能力。
3) 第一次查询并行执行测试
l 用于测试DBMS对多个查询流并发查询和操作的处理能力,最小值为4(记为Sq)。例如,模拟20个用户同时进行操作,则同时启动20个session。
l 每个session会是一个不同的语句执行顺序(由dsdgen可生成,该顺序是固定的)。
l 每个session一次只运行一条语句。
4) 第一次数据维护测试
l 更新次数为并发测试中的并发数除以2,即Sq/2。例如,模拟20个用户同时操作,则其中10个用户会有更新操作。
l 单次更新中的语句可以顺序或并发执行,更新语句只涉及事实表。
l 更新数据由dedgen生成,更新的顺序与dsdgen生成保持顺序一致。
l 第一步中创建的EADS,会随之进行更新维护。
l 数据维护过程中需要有硬件故障注入。
5) 第二次查询并行执行测试
6) 第二次数据维护测试
2.6 TPCDS度量方法
TPC-DS 基准定义了两个评价指标:
1. 反映每秒的有效查询数据量的性能指标,其计算公式为:
各个参数的含义如下:
l SF,即数据量
l Q= Sq * 99,Sq 指并发测试中并发的个数
l TPT=TPower*Sq ,TPower 指Power测试的总执行时间
l TTT= TTT1+TTT2 ,TTT1指并发第一次测试的总执行时间,TTT2指并发第二次测试的总执行时间
l TDM= TDM1+TDM2,TDM1指第一次数据维护的总执行时间,TDM2指第二次数据维护的总执行时间
l TLD=0.01*Sq*TLoad ,TLoad指数据加载时间
l 上述的时间单位要精确到秒
2. 反映每秒每查询数据量的性价比指标,值越小说明性价比越高,其计算公式为:
其中 P 是测试总花费。
3 测试指导
3.1 用例
根据上文TPCDS的具体分析,用于手工用例的指导原则如下:
1. 选择的表应为上文中的某个具体的ER图中的全部或部分表,根据使用频率,选取最小集示例如下:
2. 分布键主要建在PK键上,分区键主要建在常用的过滤条件上,在常用的过滤条件和PK、FK上建立单列、多列索引
3. 实际编写用例时,注意如下几点:
l 表之间的连接条件,主要根据上图中的PK-FK关系建立连接
l 过滤条件主要放在维度表
l 聚集运算主要放在事实表
l 窗口函数、OLAP函数的灵活使用
l 条件结合函数使用(如字符串函数、类型转换函数、数学运算函数)
l 表达式的灵活使用(与条件结合、与聚集运算结合)
l 灵活运用子查询、相关子查询
l 多处使用同样的临时结果集时,考虑使用CTE,即CTE通常在多处被引用
l 集合运算主要用在同一类操作、不同的事实表上
3.2 场景
集成测试、系统测试、专项测试等都可以利用TPCDS场景,或根据TPCDS场景构建新的测试场景,构建场景注意:
1. 场景测试应包括创建、加载、查询、更新等整体流程,做到一键式测试。测试结果可分析、可重现。
2. 查询语句,依据2.1中四类语句进行构建,查询语句包含简单、复杂语句,结果集有大有小,同时查询语句可选择串行、并发运行。
3. 更新语句,更新与查询语句交替进行测试,更新以事实表为主,更新的并发度与查询的并发度对应。
- 点赞
- 收藏
- 关注作者
评论(0)