oracle11g SPA 应用在9i升级到10g SQL性能测试.docx
- 文档编号:11453263
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:10
- 大小:85.88KB
oracle11g SPA 应用在9i升级到10g SQL性能测试.docx
《oracle11g SPA 应用在9i升级到10g SQL性能测试.docx》由会员分享,可在线阅读,更多相关《oracle11g SPA 应用在9i升级到10g SQL性能测试.docx(10页珍藏版)》请在冰豆网上搜索。
oracle11gSPA应用在9i升级到10gSQL性能测试
SPA实施目的
为了保证升级10g能更加平稳,我们采用Oracle11gSQL性能分析器(SQLPerformanceAnalyzer,以下简称SPA)新功能来预测数据库的关键SQL在Oracle10g平台上性能情况,以便提前发现问题并做相关的优化。
大型业务关键应用程序要在响应时间、吞吐量、运行时间和可用性方面提供特定服务级别的保证。
对系统的任何更改(如升级数据库或修改配置)通常都需要进行全面的测试和验证,然后才能在生产系统中实施这些更改。
在移到生产系统之前为了保证安全,数据库管理员(DBA)必须让测试系统承受与生产环境中的工作量很近似的压力,以便分析系统级更改对整体SQL性能的影响,并在在移到生产之前进行必要的优化。
OracleDatabase11g引入了SQL性能分析器;使用该工具可以准确地预测系统更改对SQL语句性能的影响。
这种功能可向DBA提供有关SQL语句性能的详细信息,例如,执行前后的统计信息,提高或降低性能的语句。
这样,你就在测试环境中先进行更改,以确定数据库升级是否会影响SQL性能。
SQL性能分析器可用于预测和防止会影响SQL执行计划结构的任何数据库环境更改所带来的潜在性能问题。
这些更改可以包括(但不限于)以下任何一种更改:
●数据库升级
●实施优化建议
●更改方案
●收集统计信息
●更改数据库参数
●更改操作系统和硬件
SQL性能分析器是11g的新功能,通过相关的配置可以应用在Oracle9i升级到10g的过程中,大致的框架如下:
先收集9i数据库的上的sqltrace信息(需要涵盖关键业务的SQL),然后在11g数据库上生成STS(SQLTuningSet)和SQL统计信息,接着把这些SQL通过数据库链连接到10g数据库上运行并把统计信息返回到11g库上,最后对每条SQL生成9i和10g上的对比报告,从这个报告便能发现SQL性能是否改善,执行计划有没有改变。
SPA实施步骤
9i库上收集必要的trace信息
根据现场提供的信息,我们在9i的数据库选取典型的会话收集trace信息。
比如我们选择进程号是23287的会话进行跟踪:
oradebugsetospid23287
oradebugunlimit
oradebugevent10046tracenamecontextforever,level4
关闭跟踪:
oradebugsetospid23287
oradebugevent10046tracenamecontextoff
还可以使用其他方法:
1)使用dbms_support跟踪数据库session
@?
/rdbms/admin/dbmssupp
execDBMS_SUPPORT.START_TRACE_IN_SESSION(&SID,waits=>true,binds=>false);
execDBMS_SUPPORT.STOP_TRACE_IN_SESSION(&SID,null);
2)生成整个系统trc
altersystemsetevents'10046tracenamecontextforever,level12';
altersystemsetevents'10046tracenamecontextoff';
在9i数据库通过选取特定模块的会话进行跟踪,由于会产生大量的trc,考虑到磁盘空间的问题,建议指定user_dump_dest目录到剩余空间较多的文件系统,
设置下列参数:
timed_statistics=TRUE
max_dump_file_size=UNLIMITED。
创建10g测试环境
10g测试环境版本必须是10.2.0.2以后的版本。
SPA支持模式执行9i中的SQL,所以不会对数据做任何的改动,对目前的生产环境的性能几乎没有影响。
另外,为了实现SPA的功能,需要安装相关的补丁,还要安装JAVAVM等组件。
(补丁参考Note:
560977.1,组件参考Note:
276554.1)。
10g的CBO优化器依赖于表的统计信息,如果没有统计信息将会动态采样,动态采样对SQL性能和系统的资源有很大的影响,所以必须收集统计信息。
安装相关的组件在10.2版本的数据库(补丁参考Note:
276554.1)
安装JAVAVM
@?
/javavm/install/initjvm.sql;
创建DBMS_XQUERYINT
@?
/rdbms/admin/initxqry.sql
创建OXQServer.class
@?
/rdbms/admin/initxml.sql
授予SYSTEM用户权限:
grantexecuteonDBMS_SQLPAtosystem;
grantadvisortosystem;
需要说明的是,虽然测试环境基本能模拟生产环境的数据量,但测试库和生产库的数据和压力还有一些差异的地方,所以最后的性能对比结果还要看看是否和环境有关。
创建11gSPA环境
要实现SPA必须要有11g的环境,建议安装最新的PSU补丁,需要安装相关的补丁(补丁参考Note:
560977.1)。
下面列出主要是9i数据库升级到10g数据库,11g测试数据库和10g升级数据库需要安装的补丁。
升级前版本
升级后版本
安装补丁
下载途径
9.x
10.2.0.2/10.2.0.3/10.2.0.4
1)使用11.1.0.6测试需要安装patch:
6865809
使用11.1.0.7测试,需要安装patch:
8756594
推荐使用11.1.0.7
2)10.2.0.2数据库需要安装patch:
6903322
10.2.0.3数据库需要安装patch:
6903335
10.2.0.4数据库需要安装patch:
6893073
从METALINK下载
创建11g数据库到10g数据库的dblink以及11g数据库存放9i生成trc的目录:
创建11g上创建9i对象表,使用下面的脚本:
createtable9i_mapas
selectobject_idid,owner,
substr(object_name,1,30)name
fromdba_objects
whereobject_typeNOTIN
('CONSUMERGROUP','EVALUATIONCONTEXT',
'FUNCTION','INDEXTYPE','JAVACLASS',
'JAVADATA','JAVARESOURCE','LIBRARY',
'LOB','OPERATOR','PACKAGE',
'PACKAGEBODY','PROCEDURE','QUEUE',
'RESOURCEPLAN','SYNONYM','TRIGGER',
'TYPE','TYPEBODY')
unionall
selectuser_idid,usernameowner,nullname
fromdba_users;
在11g数据库上创建存放trc的目录:
createorreplacedirectoryspa_diras'/archlog1/spa/trace';
在11g数据库上创建连接到10g数据库的DBLINK
createpublicdatabaselinkspa_linkconnecttosystemidentifiedbyoracleusing'spa_test';
进行SPA测试
在11g上数据库进行SPA性能分析请参考DocID742644.1。
1_create_mapping_table.sql:
在9i数据库创建mapping表。
2_sqltrace2sts.sql:
抽取9i数据库生成的trc生成SQLtuningset。
有生成trc可能会非常大,可能会导致生成SQLtuningset非常慢。
SQL>@2_sqltrace2sts.sql
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|NOTE:
|1-Thisscriptshouldbeexecutedonthe11gsystemrunningSPA
|2-Tracefilesandmappingtableshouldhavealreadyimportedinto
|the11gsystemwhichisrunningSPA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Specifythenameofthedirectoryobjectcontainingthetracefiles
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入dir_name的值:
spa_dir--<指定trc保存的目录
>>directoryobjectspecified:
spa_dir
|Specifythenameofthemappingtabletouse
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入table_name的值:
9i_map--<输入创建mapping表
>>mappingtablespecified:
9i_map
|SpecifythenameoftheSQLtuningset(STS)tocreate
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入sts_name的值:
spa_test---输入新创建的sts名称
>>SQLtuningsetspecified:
spa_test
|CreatinganemptySQLtuningset
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|PopulatingSQLtuningsetfromthespecifiedSQLtracefiles
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3_spa_first_sqltrial.sql:
创建SPAtask,根据在9i生成的trc产生执行计划和统计信息。
SQL>@3_spa_first_sqltrial.sql
|10MostactiveSQLtuningsets
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NAMEOWNERSQL_COUNT
----------------------------------------------------------------------
spa_testSYS0
|SpecifythenameandownerofSQLtuningsettouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入sts_name的值:
spa_test
输入sts_owner的值:
>>SQLtuningsetspecified:
spa_testownedby
|SpecifythenameofSQLperformanceanalyzertasktocreate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入task_name的值:
spa_task
>>SPATaskspecified:
spa_task
|SpecifythenameofthefirstSQLtrialtocreate.Thistrial
|willbecreatedbyconvertingthespecifiedSTS.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入first_trial的值:
first
>>SPAFirstSQLtrialspecified:
first
|RuncreateaSPAanalysistask
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4_spa_second_sqltrial.sql:
通过DBLINK在10.2数据库上执行相关SQL语句,生成执行计划和统计信息。
SQL>@4_spa_second_sqltrial.sql
|10MostactiveSQLperformanceanalyzertasks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|SpecifythenameofSPAtasktouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入tsk_name的值:
spa_task
>>SPAtaskspecified:
spa_task
|SpecifythenameofthesecondSQLtrialtocreate.Thistrial
|willbecreatedbyremotelytestexecutingSQLstatements
|overapublicdatabaselink
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入second_trial的值:
second
>>SPAsecondSQLspecified:
second
|10Mostrecentdatabaselinks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Specifythenameofdb_linktouserbySPA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入dblink的值:
spa_link
>>databaselinkspecified:
spa_link
|Specifyaper-SQLtimelimittocontrollongrunningqueries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入per_sql_time_limit的值:
>>per-SQLtimelimitspecified:
5_spa_compare.sql:
比较两次SQL测试,在选择compare_metric推荐使用CPU_TIME或者BUFFER_GETS。
执行rpt.sql生成报告。
SPA生成测试报告
数据库SPA测试
一般情况下会生成3个html文件:
cpu_errors.html、cpu_regress.html、cpu_summary.html。
cpu_errors.html显示执行错误的sql语句,cpu_regress.html显示性能下降的sql语句,cpu_summary.html是比较两次sql语句执行的汇总。
以下是基于CPU_TIME的SummaryReport:
总共采集了303条语句,没有性能下降的语句,有6条语句性能得到改善,还有113语句执行失败。
WithError的语句121条,可以分为两类:
一类是Insert语句,SPA工具不支持
另一类是和dblink相关的语句,因为相关的dblink在BOSS库上没有创建导致语句执行失败
SPA总结
正如所有的测试一样,SPA测试不可能发现所有升级后可能遇到的性能问题,由于环境的差异、场景的差异等等一些现实的问题,在升级后仍然有可能遇到一些预料之外的性能问题,但SPA可以尽可能减少这些问题。
在SPA测试中发现的REGRESSED的SQL语句,我们可以提前分析解决。
在升级后发现的新的REGRESSED的SQL语句,可以尝试通过10g提供的相关工具,如SQLTuningAdvisor、SQLProfile等分析解决。
由于测试时间有限,选取的会话数不能涵盖所有的应用场景,测试有一定的的局限性,所以还需要借助其他手段的测试,如功能测试、压力测试以及用户体验性测试等,从另一个角度验证升级后的性能变化。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle11g SPA 应用在9i升级到10g SQL性能测试 应用 升级 10 SQL 性能 测试