1. 性能测试方案介绍

由于新的服务器与原有数据库在系统架构、硬件配置等方面已经有了较大的差异,为了模拟新服务器承载业务的性能,需要对新服务器进行性能测试;当前EBS数据库为ORACLE 12.1.0.2版本,基于ORACLE的特性可以使用数据库的SQL Performance Analyzer (SPA)性能分析功能、数据库重放(Database Replay)功能,来模拟真实业务的负载;通过对比现有生产环境和新服务器上的性能数据报告,可以获取数据库的性能差异;同时可以对新环境运行速度较差的SQL进行相应的性能分析优化,并反复进行性能测试对比,最终实现业务在新环境的稳定高效运行。

      1. SQL性能分析(SPA)

SQL 执行计划的变化可能会严重影响应用程序性能和可用性。数据库迁移测试过程中需要识别和修正由于系统更改而导致性能变差的SQL语句。SQL Performance Analyzer (SPA) 可以预测和防止由环境更改导致的 SQL 执行性能问题。SPA通过在迁移目标环境更按序运行 SQL 语句来测试迁移后数据库环境的变改对SQL执行计划/执行效率和统计信息的影响。SPA生成的报告列出了由于系统更改对性能的提升以及性能变差的SQL语句。针对性能变差的SQL语句,会提供相应的执行计划详细信息以及调整建议,从而人工介入对这些性能变差的SQL语句进行处理。

SPA的SQL捕获、SQL执行和SQL比较以识别性能变差的SQL的过程都是自动完成的。SPA集成了SQL优化器顾问和SQL计划管理(SQL Plan Management)功能,其中SQL计划基线和SQL优化器顾问可以用来解决退化的SQL。使用SAP能够以较低的成本来验证对迁移后的环境对SQL执行效率的影响并进行改进。

整个SPA流程图如下:

    1. 性能测试方案与流程
      1. SQL性能分析(SQL Performance Analyzer )测试流程

备注:此种方式不需要在生产环境进行,不影响生产环境。

步骤

操作内容

注意事项

1

新服务器2(IP10.2.192.56)停止与新服务器1的数据增量同步,数据库设置为可读写打开状态

将JOB_PROCESS参数设置为0,禁止自动定时任务运行,避免JOB中有DBLINK等相关与其他业务交互的功能影响生产业务。

2

SPA测试环境准备

创建相应的测试用户、配置性能参数、AWR信息等

3

从AWR数据中采集业务SQL集合

获取AWR数据中的真实业务SQL,并加载到SAP性能测试集合中。

4

创建SAP性能测试基准

获取变更前的SQL执行效率

5

数据库参数等优化

基于以往经验进行第一次参数优化

6

在新环境上进行SAP性能测试

使用前期捕获的AWR中SQL集合,获得当前环境执行SQL的效率

7

变更前后性能对比

对前后2次的性能数据进行对比分析

8

根据测试数据进行数据库优化

  1. 对新环境运行变慢的SQL进行分析优化
  2. 对一直运行较慢的低效SQL分析优化

3、根据测试结果对数据库的参数、配置等进行分析优化

9

重复再进行多次SPA性能分析优化

由于AWR数据的采集周期是一段时间(比如1周),因此可以采集多个时间段的性能数据(需要多次在当前数据库上同步最新EBS数据),进行相应的SPA性能测试分析,以此获得更准确的业务运行SQL并分析优化。

  • 性能测试报告

按照ORACLE SPA(SQL Performance Analyzer)性能测试方案,对生产环境在3月31日至4月3日(时间跨度在月末和月初)的典型工作时间(8-17点)的性能数据进行收集,并使用SPA测试方式进行测试(底层原理是重新执行一遍这些SQL并对真实执行和测试执行的数据进行分析对比),得出结论如下:

1、总共测试的SQL量约1800条,涉及3月31日至4月3日(时间跨度在月末和月初),具有较好的代表性。

2、测试前后性能对比,总体看未出现性能下降的情况,部分SQL有性能提升(仅有一条SQL在3.31测试场景出现了性能下降,其他日期场景的结果正常)。

具体测试结果数据如下:

    1. 对3月31日上午性能数据的测试结果

2025.3.31为周一,对上午的业务SQL进行了性能测试(拆分为8-10点、10-12点2次分析),分析汇总如下:

  1. 总共分析了394个SQL。
  2. 性能有提升的SQL有15个。SQL见后续。
  3. 性能有下降的SQL有1个。SQL见后续。
  4. 有报错的7个,不支持的是80个(主要是存储过程)

8-10点的SQL分析情况:

10-12点的SQL情况:

性能有下降的SQL分析(执行计划变化,可以进行对应优化):

SQL ID

: 07p8uawccqqd9

Execution Frequency

: 3471

SQL Text

: SELECT SUM((CASE WHEN NVL(S.POS_FLAG, 'N') = 'Y' THEN MOQ.TRANSACTION_QUANTITY ELSE 0 END)), SUM((CASE WHEN NVL(S.POS_FLAG, 'N&ap os;) = 'Y' THEN MOQ.TRANSACTION_QUANTITY * CMSI.LIST_PRICE_PER_UNIT EL SE 0 END)), SUM((CASE WHEN NVL(S.POS_FLAG, 'N') = 'N' AND S. OL_FLAG IS NULL THEN MOQ.TRANSACTION_QUANTITY ELSE 0 END)), SUM((CASE WHEN NVL(S .POS_FLAG, 'N') = 'N' AND S.OL_FLAG IS NULL THEN MOQ.TRANSAC TION_QUANTITY * CMSI.LIST_PRICE_PER_UNIT ELSE 0 END)), SUM((CASE WHEN NVL(S.POS_ FLAG, 'N') = 'N' AND S.OL_FLAG IS NOT NULL THEN MOQ.TRANSACT ION_QUANTITY ELSE 0 END)), SUM((CASE WHEN NVL(S.POS_FLAG, 'N') = &apos ;N' AND S.OL_FLAG IS NOT NULL THEN MOQ.TRANSACTION_QUANTITY * CMSI.LIST_PRI CE_PER_UNIT ELSE 0 END)) FROM INV.MTL_ONHAND_QUANTITIES_DETAIL# MOQ, MTL_LOT_NUM BERS MLN, MTL_SECONDARY_INVENTORIES MSI, CUX_MTL_SYSTEM_ITEMS_B CMSI, ORG_ORGANI ZATION_DEFINITIONS OD, HR_ALL_ORGANIZATION_UNITS HAO, CUX_STORE_LIST_V S WHERE M OQ.INVENTORY_ITEM_ID = MLN.INVENTORY_ITEM_ID AND MOQ.ORGANIZATION_ID = MLN.ORGAN IZATION_ID AND MOQ.LOT_NUMBER = MLN.LOT_NUMBER AND MSI.SECONDARY_INVENTORY_NAME = MOQ.SUBINVENTORY_CODE AND MLN.ATTRIBUTE1 IS NOT NULL AND MLN.ATTRIBUTE2 IS NOT NULL AND CMSI.INVENTORY_ITEM_ID = MOQ.INVENTORY_ITEM_ID AND MLN.ATTRIBUTE1 = TO _CHAR(:B3 ) AND MLN.ATTRIBUTE2 = TO_CHAR(:B2 ) AND OD.OPERATING_UNIT = HAO.ORGAN IZATION_ID AND NVL(HAO.ATTRIBUTE20, 'N') = 'N' AND OD.ORGANI ZATION_ID = MOQ.ORGANIZATION_ID AND MSI.ATTRIBUTE1 = S.STORE_NO AND MSI.ATTRIBUT E2 = :B1

    1. 对3月31日下午性能数据的测试结果

2025.3.31为周一,对下午13-17点的业务SQL进行了性能测试分析汇总如下:

  1. 总共分析了227个SQL。
  2. 性能有提升的SQL有3个。SQL见后续。
    1. 对4月1日上午性能数据的测试结果

2025.4.1为周二,对上午8-12点的业务SQL进行了性能测试分析汇总如下:

  1. 总共分析了276个SQL。
  2. 性能有提升的SQL有4个。SQL见后续。
    1. 对4月1日下午性能数据的测试结果

2025.4.1为周二,对下午13-17点的业务SQL进行了性能测试分析汇总如下:

  1. 总共分析了246个SQL。
  2. 性能有提升的SQL有2个。SQL见后续。
    1. 对4月2日公司时间8-17点性能数据的测试结果

2025.4.2为周三,对8-17点的业务SQL进行了性能测试分析汇总如下:

  1. 总共分析了389个SQL。
  2. 性能有提升的SQL有7个。SQL见后续。
    1. 对4月3日公司时间8-17点性能数据的测试结果

2025.4.3为周四,对8-17点的业务SQL进行了性能测试分析汇总如下:

  1. 总共分析了400个SQL。
  2. 性能有提升的SQL有12个。SQL见后续。

  • 其他性能优化方式
    1. 数据库参数优化

新服务器在内存配置上有了很大的提升,同时数据库架构也从RAC集群变为单机模式,因此对于数据库参数,重新进行分析,结合原有生产环境的参数,新的参数如下:

A、有变动的参数清单:

===========忽略

db_keep_cache_size 0   ===>>确认忽略

*._smu_debug_mode=0  ==默认值就是0===>>确认忽略

recyclebin ON ==默认值===>>确认忽略

memory_max_target 0   默认值就是0

memory_target 0默认值就是0

_clusterwide_global_transactions FALSE===>>确认忽略 不是RAC架构

*.o7_dictionary_accessibility=FALSE#MP  默认值

_partition_large_extents FALSE===>>确认忽略,作用是降低点分区表占用的空间

============已经设置

lock_sga TRUE===>>已经设置

deferred_segment_creation FALSE ===>>已经设置

*.processes=3000  ==原来2个节点 ===>>已经设置10000

open_cursors 8000 ===>>已经设置

_use_adaptive_log_file_sync FALSE ===>>已经设置

log_buffer 10485760  ===>>实际更大,忽略

max_dump_file_size 100M   ===>>已经设置

event 28401 trace name context forever, level 1, 10949 trace name context forever, level 1, 10995 trace name context forever, level 16 ===>>已经设置

parallel_adaptive_multi_user TRUE ===>>已经设置

optimizer_adaptive_features FALSE  ===>>已经设置

_kks_obsolete_dump_threshold 0 ===>>已经设置

最新参数设置:

*._b_tree_bitmap_plans=FALSE# Required 11i setting

*._fast_full_scan_enabled=FALSE

*._kks_obsolete_dump_threshold=0

*._like_with_bind_as_equality=TRUE

*._optimizer_autostats_job=false# Turning off auto statistics

*._report_capture_cycle_time=0

*._smu_debug_mode=4

*._sort_elimination_cost_ratio=5

*._system_trig_enabled=true

*._TRACE_FILES_PUBLIC=FALSE

*._undo_autotune=TRUE

*._use_adaptive_log_file_sync='FALSE'

*.aq_tm_processes=1

*.audit_file_dest='/u01/app/oracle/diag/rdbms/adump'

*.AUDIT_SYS_OPERATIONS=TRUE

*.compatible='12.1.0'

*.control_file_record_keep_time=40

*.control_files='/datanvme/ebsproddata/controlfile01.dbf','/datanvme/ebsproddata/controlfile02.dbf'#Restore Controlfile

*.cursor_sharing='EXACT'

*.db_block_checking='FALSE'

*.db_block_checksum='TRUE'

*.db_block_size=8192

*.db_cache_size=644245094400

*.DB_FILE_NAME_CONVERT='/app/RAC/oradata','/datanvme/ebsproddata'

*.db_files=2000

*.db_flashback_retention_target=2880

*.db_name='PROD'

*.db_recovery_file_dest='/datanvme/flashback'

*.db_recovery_file_dest_size=5497558138880

*.db_unique_name='PROD_TEST'

*.deferred_segment_creation=FALSE

*.diagnostic_dest='/u01/app/oracle'

*.dml_locks=10000

*.event='10949 trace name context forever,level 1','10995 trace name context forever,level 16','28401 TRACE NAME CONTEXT FOREVER, LEVE

L 1'

*.fal_client='PROD_TEST'

*.fal_server='PROD_XH'

*.job_queue_processes=0

*.large_pool_size=4294967296

*.lock_sga=TRUE

*.log_archive_config='DG_CONFIG=(PROD,PROD_DG,PROD_XH,PROD_TEST)'

*.log_archive_dest_1='location=/datanvme/archive'

*.log_archive_format='%t_%s_%r.dbf'

*.log_checkpoint_interval=100000

*.log_checkpoint_timeout=1200

*.log_checkpoints_to_alert=TRUE

*.LOG_FILE_NAME_CONVERT='/app/RAC/oradata','/datanvme/ebsproddata'

*.max_dump_file_size='104857600'

*.nls_comp='binary'# Required 11i setting

*.nls_date_format='DD-MON-RR'

*.nls_length_semantics='BYTE'# Required 11i setting  

*.nls_numeric_characters='.,'

*.nls_sort='binary'# Required 11i setting

*.nls_territory='america'

*.o7_dictionary_accessibility=FALSE#MP

*.olap_page_pool_size=4194304

*.open_cursors=8000

*.optimizer_adaptive_features=FALSE

*.optimizer_dynamic_sampling=0

*.optimizer_secure_view_merging=false

*.OS_AUTHENT_PREFIX=''

*.parallel_force_local=TRUE

*.parallel_max_servers=0

*.parallel_min_servers=0

*.parallel_servers_target=100

*.pga_aggregate_limit=0

*.pga_aggregate_target=21474836480

*.plsql_code_type='INTERPRETED'# Default 11i setting

*.processes=10000

*.sec_case_sensitive_logon=FALSE

*.service_names='PROD, PROD_ebs_patch,PROD_ebs_patch'

*.session_cached_cursors=500

*.sessions=6000

*.sga_max_size=1288490188800

*.sga_target=1288490188800

*.shared_pool_reserved_size=4294967296

*.shared_pool_size=64424509440

*.SQL92_SECURITY=TRUE

*.standby_file_management='AUTO'

*.streams_pool_size=2147483648

*.temp_undo_enabled=true

*.undo_management='AUTO'# Required 11i setting

*.undo_retention=36000

PROD.undo_tablespace='APPS_UNDOTS1'

*.utl_file_dir='/usr/tmp','/usr/tmp','/app/PROD/12.1.0/appsutil/outbound/PROD_erpdb1','/usr/tmp'

*.workarea_size_policy='AUTO'# Required 11i setting

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐