ParnassusData is a software company Oracle streams 参数优化报告 诗檀软件 www.parnassusdata.com 工程师 : 报告生成日期 : 更新日期 : 郭兆伟 2015 年 7 月 20 日 2015 年 7 月 20 日
文档控制 此文档仅供诗檀软件内部审阅, 不得向与此无关的个人或机构传 阅或复制 变更记录 日期作者及更新人版本号变更信息 审阅人 版本号审阅人职位相关评 1.0 论 审批人 版本号批准人日期相关评论 文档分发 分发号文档名分发位置 1 SHCH-1 ASANA 诗檀软件 Oracle 数据库健康检查报告 2
目录 文档控制... 2 变更记录... 2 审阅人... 2 审批人... 2 文档分发... 2 目录... 3 1. 实验环境... 3 2. 实验及其结果... 3 2.1 创建测试的存错过程和表... 4 2.2 配置优化后的参数 :... 6 3. 其他信息... 7 3.1 出现的其他日志信息 :... 7 4. 总结... 8 5. 其他问题... 9 5.1 未解决的问题... 9 已解决的问题... 9 1. 实验环境 虚拟机环境 rhel 5.6_64 oracle 10.2.0.4 之前搭建的一个双节点 streams 的环境, 关闭双向复制, 先使用单项复制进行模拟冲突的实验 2. 实验及其结果 事务类型 未优化前 优化后 结论 其他 大量小事务 很慢 ( 约 30 分钟以上 ) 较快 (5 分钟以内 ) 大量小事务表现压力主要在应用 内存参数影响较大 端 长事务 很慢 较快 长事务压力主要在捕获端 内存参数影响较大 诗檀软件 Oracle 数据库健康检查报告 3
2.1 创建测试的存错过程和表首先在源端创建测试表 : test_num,id 上是主键 create table test_num( id number primary key, version number ); create or replace procedure stream_test(stream_type in varchar2,stream_table in varchar2) as v_sql varchar2(500); v_init number; begin for i in 1..100000 loop v_sql :='insert into ' stream_table ' values(' i ',' i ')'; execute immediate v_sql; commit; end loop; if stream_type='update' then v_sql := 'update ' stream_table ' set version=version+1'; execute immediate v_sql; end if; commit; end; -- 存储过程可以用来初始化 10 万行数据, 并后期进行 update 操作 查询 select * from V$STREAMS_POOL_ADVICE 发现 stream pool 太小 诗檀软件 Oracle 数据库健康检查报告 4
可以发现设置 136M 性能会有提升 查询 V$STREAMS_APPLY_COORDINATOR 源端 : SELECT CAPTURE_NAME, STATE FROM V$STREAMS_CAPTURE; select * from V$BUFFERED_PUBLISHERS 发现目前 IN FLOW CONTROL: INSUFFICIENT MEMORY AND UNBROWSED MESSAGES, 捕获进行了流控制目标端是正常的消息出现这种情况是由于传播和应用进程无法很快的出队, 导致在捕获端进行了控制 源端日志在后面出现 : Mon Jul 20 16:13:03 2015 Propagation Schedule for (STRMADMIN.QUEUE_TABLE, SVEN2) encountered following er ror: ORA-23603: 由于 SGA 不足, STREAMS 入队中止在目标增加了流池大小 : ALTER SYSTEM SET streams_pool_size='136m' SCOPE=BOTH; 源端的日志记录立马快了 诗檀软件 Oracle 数据库健康检查报告 5
首先进行一个 100000 行记录的插入做初始化操作 可以观察到源端事务很快就完成了, 由于是 insert 一次就提交一次 相当于有很多事务同时进行 压力在抽取端, 源端抽取过慢 目标端经过几十分钟才应用了 2W+ 记录 目标端查询 V$BUFFERED_QUEUES : 发现大量的消息产生了队列溢出 2.2 配置优化后的参数 : 在源端和目标端把流池大小分配给 : ALTER SYSTEM SET streams_pool_size=200m SCOPE=BOTH; execute dbms_apply_adm.set_parameter('apply_10g_2','parallelism','4'); execute dbms_apply_adm.set_parameter('apply_10g_2','_dynamic_stmts','y'); execute dbms_apply_adm.set_parameter('apply_10g_2','_hash_table_size','1000000'); execute dbms_apply_adm.set_parameter('apply_10g_2','disable_on_error','n'); alter table aq$_queue_table_p enable row movement; alter table aq$_queue_table_p shrink space; alter system set JOB_QUEUE_PROCESSES=4 SCOPE=SPFILE; alter system set "_job_queue_interval"=1 SCOPE=SPFILE; cat <<EOF >>/etc/sysctl.conf net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 EOF sysctl -p execute dbms_capture_adm.alter_capture(capture_name=>'capture_10g_1',checkpoint_retent 诗檀软件 Oracle 数据库健康检查报告 6
ion_time=>7); SQL> conn hr/hr SQL> execute stream_test('insert','test_num'); 发现还是被流控制住了 :IN FLOW CONTROL: TOO MANY UNBROWSED MESSAGES, 观察内存建议提升到 400.( 本身 SGA 太小, 没办法再给 stream 池了 ) 之前要花几十分钟的, 修改参数后只用了 5 分钟 这里模拟的是很多小事务 再进行长事务测试 大事务是在事务结束后开始捕获传递, 捕获的时候也是出现 IN FLOW CONTROL: INSUFFICIENT MEMORY AND UNBROWSED MESSAGES 大概几分钟之后也只执行完毕 长事务执行效率要比很多小事务要快 这里主要影响执行效率的是流池的大小, 给流池分配给多的内存, 可以大大提升性能 3. 其他信息 3.1 出现的其他日志信息 : Mon Jul 20 16:55:33 2015 Trying to expand controlfile section 11 for Oracle Managed Files Expanded controlfile section 11 from 28 to 56 records Requested to grow by 28 records; added 1 blocks of records 大事务的回滚, Mon Jul 20 17:07:42 2015 C001: large txn rolled back, xid: 0x0004.01f.7fff00000363 -- 注意重建进程后, 应用进程的 SCN 要再次初始化话, 使用 dbms_apply_adm.set_table_instantiation_scn conn strmadmin/strmadmin declare v_scn number; begin v_scn := dbms_flashback.get_system_change_number(); 诗檀软件 Oracle 数据库健康检查报告 7
dbms_apply_adm.set_schema_instantiation_scn ( source_schema_name => 'hr', source_database_name => 'SVEN1', instantiation_scn => v_scn, recursive => true); end; / 大事务日志里面会出现 : Mon Jul 20 17:32:19 2015 C001: large txn committed, xid: 0x0008.025.7fff0000038e 4. 总结 本次试验对一些主要可以改善流性能的参数, 进行了大量小事务 ( 这里主要是 insert, 实际中可能不太一样 ), 长事务 (update) 的试验 那些不太确定的参数, 例如并行度参数 监听器的一些参数等, 需要结合实际情况整体调试 心跳表和流的健康诊断, 监控在本次试验中没有涉及 诗檀软件 Oracle 数据库健康检查报告 8
5. 其他问题 日志中出现的控制文件增长的信息, 目前还不确定是不是由于大 事务导致的控制文件增长的情况, 如果想了解需要继续查阅资料 5.1 未解决的问题 问题号问题描述解决方案日期 已解决的问题 问题号问题描述解决方案解决日期 诗檀软件 Oracle 数据库健康检查报告 9
ParnassusData Corporation, Shanghai, GaoPing Road No. 733. China Phone: (+86) 400-690-3643 ParnassusData.com Copyright 2013, ParnassusData and/or its affiliates. All rights reserved. This document is provided for information purposes only and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, or including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. UNIX is a registered trademark licensed through X/Open Company, Ltd. 0410 Copyright 2015ParnassusData Corporation. All Rights Reserved. 诗檀软件 Oracle 数据库健康检查报告 10