问题描述
我面临着数据库性能的问题。
早些时候,我的数据库运行在XSeries平台Solaris OS上。
然后我将整个数据和对象迁移到SPARC平台。
两台服务器的规格略有不同。
对于XSeries,数据存储在SAS hdd和SPARC上,数据存储在SSD上。
然后我比较数据库性能,我看到巨大的基数和成本的不同数量,之后我试图通过使用sql调优来优化它,但结果似乎不是更好。
XSeries Flatform解释计划
1-原件
-----------
SPARC平台解释计划
1-原件
-----------
所以请指导我如何让改变这一点变得更好。
谢谢。
早些时候,我的数据库运行在XSeries平台Solaris OS上。
然后我将整个数据和对象迁移到SPARC平台。
两台服务器的规格略有不同。
对于XSeries,数据存储在SAS hdd和SPARC上,数据存储在SSD上。
然后我比较数据库性能,我看到巨大的基数和成本的不同数量,之后我试图通过使用sql调优来优化它,但结果似乎不是更好。
XSeries Flatform解释计划
1-原件
-----------
Plan hash value: 3251059040 -------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2 | 190 | 8 (38)| 00:00:01 | | 1 | SORT ORDER BY | | 2 | 190 | 8 (38)| 00:00:01 | | 2 | VIEW | | 2 | 190 | 7 (29)| 00:00:01 | | 3 | UNION-ALL | | | | | | |* 4 | FILTER | | | | | | | 5 | HASH GROUP BY | | 1 | 100 | 3 (34)| 00:00:01 | | 6 | NESTED LOOPS | | | | | | | 7 | NESTED LOOPS | | 1 | 100 | 2 (0)| 00:00:01 | | 8 | VIEW | ACVW_ALL_AC_ENTRIES | 2 | 100 | 2 (0)| 00:00:01 | | 9 | UNION-ALL | | | | | | |* 10 | TABLE ACCESS BY INDEX ROWID | ACTB_DAILY_LOG | 1 | 63 | 1 (0)| 00:00:01 | |* 11 | INDEX SKIP SCAN | IX08_ACTB_DAILY_LOG | 1 | | 1 (0)| 00:00:01 | |* 12 | TABLE ACCESS BY INDEX ROWID | ACTB_HISTORY | 1 | 60 | 1 (0)| 00:00:01 | |* 13 | INDEX SKIP SCAN | IX01_ACTB_HISTORY | 1 | | 1 (0)| 00:00:01 | |* 14 | INDEX UNIQUE SCAN | PK01_GLTM_GLMASTER | 1 | | 0 (0)| 00:00:01 | |* 15 | TABLE ACCESS BY INDEX ROWID | GLTM_GLMASTER | 1 | 50 | 0 (0)| 00:00:01 | | 16 | NESTED LOOPS | | | | | | | 17 | NESTED LOOPS | | 1 | 89 | 4 (25)| 00:00:01 | | 18 | VIEW | | 1 | 41 | 3 (34)| 00:00:01 | |* 19 | FILTER | | | | | | | 20 | HASH GROUP BY | | 1 | 66 | 3 (34)| 00:00:01 | | 21 | NESTED LOOPS | | 1 | 66 | 2 (0)| 00:00:01 | | 22 | TABLE ACCESS FULL | STTM_CUST_ACCOUNT | 1 | 24 | 2 (0)| 00:00:01 | | 23 | VIEW | ACVW_ALL_AC_ENTRIES | 2 | 84 | 0 (0)| 00:00:01 | | 24 | UNION ALL PUSHED PREDICATE | | | | | | |* 25 | TABLE ACCESS BY INDEX ROWID| ACTB_DAILY_LOG | 1 | 66 | 0 (0)| 00:00:01 | |* 26 | INDEX RANGE SCAN | IX07_ACTB_DAILY_LOG | 1 | | 0 (0)| 00:00:01 | |* 27 | TABLE ACCESS BY INDEX ROWID| ACTB_HISTORY | 1 | 63 | 0 (0)| 00:00:01 | |* 28 | INDEX RANGE SCAN | IX05_ACTB_HISTORY | 1 | | 0 (0)| 00:00:01 | |* 29 | INDEX UNIQUE SCAN | PK01_GLTM_GLMASTER | 1 | | 0 (0)| 00:00:01 | | 30 | TABLE ACCESS BY INDEX ROWID | GLTM_GLMASTER | 1 | 48 | 1 (0)| 00:00:01 | --------------------------------------------------------------------------------------------------------------复制
SPARC平台解释计划
1-原件
-----------
Plan hash value: 3983466711 --------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | --------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 41007 | 3804K| | 562K (68)| 00:09:30 | | 1 | SORT ORDER BY | | 41007 | 3804K| 4568K| 562K (68)| 00:09:30 | | 2 | VIEW | | 41007 | 3804K| | 561K (68)| 00:09:29 | | 3 | UNION-ALL | | | | | | | |* 4 | FILTER | | | | | | | | 5 | HASH GROUP BY | | 40296 | 3935K| 1604M| 338K (66)| 00:05:43 | |* 6 | HASH JOIN | | 13M| 1331M| | 258K (77)| 00:04:22 | |* 7 | TABLE ACCESS FULL | GLTM_GLMASTER | 373 | 18650 | | 6 (50)| 00:00:01 | | 8 | VIEW | ACVW_ALL_AC_ENTRIES | 41M| 1977M| | 252K (76)| 00:04:16 | | 9 | UNION-ALL | | | | | | | |* 10 | TABLE ACCESS BY INDEX ROWID | ACTB_DAILY_LOG | 1 | 43 | | 4 (0)| 00:00:01 | |* 11 | INDEX SKIP SCAN | IX05_ACTB_DAILY_LOG | 1 | | | 3 (0)| 00:00:01 | |* 12 | TABLE ACCESS FULL | ACTB_HISTORY | 41M| 1542M| | 252K (76)| 00:04:16 | |* 13 | HASH JOIN | | 711 | 63279 | | 223K (73)| 00:03:47 | | 14 | VIEW | | 711 | 29151 | | 223K (73)| 00:03:47 | |* 15 | FILTER | | | | | | | | 16 | HASH GROUP BY | | 711 | 62568 | | 223K (73)| 00:03:47 | |* 17 | HASH JOIN | | 3443K| 288M| | 218K (72)| 00:03:42 | | 18 | TABLE ACCESS FULL | STTM_CUST_ACCOUNT | 644 | 23184 | | 4 (25)| 00:00:01 | | 19 | VIEW | ACVW_ALL_AC_ENTRIES | 5924K| 293M| | 217K (72)| 00:03:41 | | 20 | UNION-ALL | | | | | | | |* 21 | TABLE ACCESS BY INDEX ROWID| ACTB_DAILY_LOG | 1 | 45 | | 4 (0)| 00:00:01 | |* 22 | INDEX SKIP SCAN | IX05_ACTB_DAILY_LOG | 1 | | | 3 (0)| 00:00:01 | |* 23 | TABLE ACCESS FULL | ACTB_HISTORY | 5924K| 231M| | 217K (72)| 00:03:41 | | 24 | TABLE ACCESS FULL | GLTM_GLMASTER | 2612 | 122K| | 4 (25)| 00:00:01 | ---------------------------------------------------------------------------------------------------------------------复制
所以请指导我如何让改变这一点变得更好。
谢谢。
专家解答
估计的行计数在两个数据库之间非常不同。这表明统计数据是不同的。
一种简单的检查方法是使用SQL Developer或SQLcl中的info命令。这将为您提供表的列级别统计信息:
如果这些差异很大,请检查如何设置两个数据库上的统计信息。如有必要,您可以将统计信息从一个数据库复制到另一个数据库:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgsql/transporting-optimizer-statistics.html#GUID-7F8EE1CC-A173-4B87-AA2E-CD22198EF4F8
其他要检查的事项:
-原始数据库上是否有任何SQL配置文件或基线?
-是否将原始数据库中的所有索引加载到新数据库中?
它总是值得检查: 这些真的是你得到的计划吗?解释计划只是一个预测。运行查询时获得的执行计划可能不同。有关此的详细信息,请阅读:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan
一种简单的检查方法是使用SQL Developer或SQLcl中的info命令。这将为您提供表的列级别统计信息:
create table t ( x primary key, y not null, z ) as select level x, chr(mod(level, 26)+65), sysdate+1/24 from dual connect by level <= 100; create index i on t (y); exec dbms_stats.gather_table_stats(user, 't'); info+ t Columns NAME DATA TYPE NULL DEFAULT LOW_VALUE HIGH_VALUE NUM_DISTINCT HISTOGRAM *X NUMBER No 1 100 100 NONE Y VARCHAR2(1 BYTE) No A Z 26 NONE Z DATE Yes 2018.01.30.04.02.44 2018.01.30.04.02.44 1 NONE Indexes INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS CHRIS.I NONUNIQUE VALID Y CHRIS.SYS_C0014260 UNIQUE VALID X复制
如果这些差异很大,请检查如何设置两个数据库上的统计信息。如有必要,您可以将统计信息从一个数据库复制到另一个数据库:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgsql/transporting-optimizer-statistics.html#GUID-7F8EE1CC-A173-4B87-AA2E-CD22198EF4F8
其他要检查的事项:
-原始数据库上是否有任何SQL配置文件或基线?
-是否将原始数据库中的所有索引加载到新数据库中?
它总是值得检查: 这些真的是你得到的计划吗?解释计划只是一个预测。运行查询时获得的执行计划可能不同。有关此的详细信息,请阅读:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。