步骤2:测试初始表结构下的系统性能并建立基线 本章节主要介绍测试初始表结构下的系统性能并建立基线的最佳实践。 在优化表结构前后,请测试和记录以下详细信息以对比系统性能差异: 数据加载时间。 表占用的存储空间大小。 查询性能。 本次实践中的示例基于使用8节点的dws.d2.xlarge集群。因为系统性能受到许多因素的影响,即使您使用相同的集群配置,结果也会有所不同。 项目 规格及参数 机器型号 dws.d2.xlarge VM CPU 4CPU E52680 v2 @ 2.80GHZ 内存 32GB 网络 1GB 磁盘 1.63TB 节点数目 8 请使用下面的基准表来记录结果。 基准 优化前 优化后 加载时间(11张表) 341584 ms 占用存储 StoreSales DateDim Store Item TimeDim Promotion CustomerDemographics CustomerAddress HouseholdDemographics Customer IncomeBand 总存储空间 查询执行时间 查询1 查询2 查询3 总执行时间 执行以下步骤测试优化前的系统性能,以建立基准。 1.将上一节记下的所有11张表的累计加载时间填入基准表的“优化前”一列。 2.记录各表的存储使用情况。 使用pgsizepretty函数查询每张表使用的磁盘空间,并将结果记录到基准表中。 SELECT TNAME, PGSIZEPRETTY(PGRELATIONSIZE(tname)) FROM (VALUES('storesales'),('datedim'),('store'),('item'),('timedim'),('promotion'),('customerdemographics'),('customeraddress'),('householddemographics'),('customer'),('incomeband')) AS names1(tname); 显示结果如下: tname pgsizepretty + storesales 42 GB datedim 11 MB store 232 kB item 110 MB timedim 11 MB promotion 256 kB customerdemographics 171 MB customeraddress 170 MB householddemographics 504 kB customer 441 MB incomeband 88 kB (11 rows) 3.测试查询性能。 运行如下三个查询,并记录每个查询的耗费时间。考虑到操作系统缓存的影响,同一查询在每次执行时耗时会有不同属正常现象,建议多测试几次,取一组平均值。 timing on SELECT FROM (SELECT COUNT() FROM storesales ,householddemographics ,timedim, store WHERE sssoldtimesk timedim.ttimesk AND sshdemosk householddemographics.hddemosk AND ssstoresk sstoresk AND timedim.thour 8 AND timedim.tminute > 30 AND householddemographics.hddepcount 5 AND store.sstorename 'ese' ORDER BY COUNT() ) LIMIT 100; SELECT FROM (SELECT ibrandid brandid, ibrand brand, imanufactid, imanufact, SUM(ssextsalesprice) extprice FROM datedim, storesales, item,customer,customeraddress,store WHERE ddatesk sssolddatesk AND ssitemsk iitemsk AND imanagerid8 AND dmoy11 AND dyear1999 AND sscustomersk ccustomersk AND ccurrentaddrsk caaddresssk AND substr(cazip,1,5) <> substr(szip,1,5) AND ssstoresk sstoresk GROUP BY ibrand ,ibrandid ,imanufactid ,imanufact ORDER BY extprice desc ,ibrand ,ibrandid ,imanufactid ,imanufact ) LIMIT 100; SELECT FROM (SELECT sstorename, sstoreid, SUM(CASE WHEN (ddayname'Sunday') THEN sssalesprice ELSE null END) sunsales, SUM(CASE WHEN (ddayname'Monday') THEN sssalesprice ELSE null END) monsales, SUM(CASE WHEN (ddayname'Tuesday') THEN sssalesprice ELSE null END) tuesales, SUM(CASE WHEN (ddayname'Wednesday') THEN sssalesprice ELSE null END) wedsales, SUM(CASE WHEN (ddayname'Thursday') THEN sssalesprice ELSE null END) thusales, SUM(CASE WHEN (ddayname'Friday') THEN sssalesprice ELSE null END) frisales, SUM(CASE WHEN (ddayname'Saturday') THEN sssalesprice ELSE null END) satsales FROM datedim, storesales, store WHERE ddatesk sssolddatesk AND sstoresk ssstoresk AND sgmtoffset 5 AND dyear 2000 GROUP BY sstorename, sstoreid ORDER BY sstorename, sstoreid,sunsales,monsales,tuesales,wedsales,thusales,frisales,satsales ) LIMIT 100; 经过上面的统计后,记录的基准表信息如下: 基准 优化前 优化后 加载时间(11张表) 341584ms 占用存储 StoreSales 42GB DateDim 11MB Store 232kB Item 110MB TimeDim 11MB Promotion 256kB CustomerDemographics 171MB CustomerAddress 170MB HouseholdDemographics 504kB Customer 441MB IncomeBand 88kB 总存储空间 42GB 查询执行时间 查询1 14552.05ms 查询2 27952.36ms 查询3 17721.15ms 总执行时间 60225.56ms