Posts

Using Application Algorithm to improve Database performance

RWP团队谈性能优化之大开眼界篇(二)应用程序算法 您觉得,应用程序的算法优化与否,最多能对系统性能有多大影响? A. 20-30% B. 50% C. 10倍左右 D. 100倍或更多 E. 没什么大影响吧 处理1行数据1ms,倒是挺快的,但是如果一行一行处理,处理万亿级别的数据的话,就要1ms * 1,000,000,000,000的时间,也就是32年的时间,32年之后处理完了,还能有什么意义呢? 这个计算,告诉我们,当需要处理的数据量很大的时候,用处理少量数据的办法(一行一行处理),就是不合适的了 Row by row(逐行)的数据处理方法,是一个进程处理数据,每次处理一行。对于小的数据集非常适合。处理大量数据的时候,就不适合了。 Arrays(数组)的数据处理方法,也是一个进程处理数据,每次处理一组数据。对于小的数据集非常适合,比row by row的方法效率高,因为减少了数据中网络上往返的时间,commit的时间,和客户端与服务器中的code path。 使用Arrays(数组)的方法,array size设多大比较合适呢?我们进行了demo. Demo里面有7个选手,每个选手用不同的array size向数据库里面插入数据: Demo中可以看到,4x选手(Array size = 4),比1x选手(Array size = 1,也就是row by row),处理速度快很多。这是因为Oracle数据库对于array interface是做了特别优化的,array interface和非array interface的code path是不同的 另外也可以看到,array size并不是越大越好。Array size只是定义了在数据库这个层面,每次处理的数据量,但是在客户端和数据库服务器之间,这些数据还要按照网络传输的单元去缓存和传输。所以当array size到达一定大小的时候,array size对性能大小的影响就没那么大了。Demo里面的后三个选手,用的时间都差不多。大家也不用纠结array size=4096好,还是4099好 Row by row和Arrays都是一个进程处理数据。 如果数据量大,系统上又有那么多资源,需要并行才能把资源用起来。现实中很多人的办法是,把原有的row by row或者arrays的代码拿过来,并行执行,这种方法称为手动...

Oracle Resource Management

RWP团队谈性能优化之大开眼界篇(三)资源管理 您觉得,在什么情况下需要进行资源管理? A. OLTP B. 报表查询 C. 混合工作负载 D. 什么情况都需要 E. 什么情况都不需要 资源管理是在任何情况都需要考虑的,可以使用的方法也很多 首先讨论了工作负载的类型。 OLTP类型的工作负载,特点是并发用户数多,SQL语句一次处理的数据量少。 报表查询类型的工作负载,特点是并发用户数少,通常是数据密集型查询处理大量数据。 数据加载与处理类型的工作负载,特点是并发用户数少,DML处理大量数据。 接下来讨论了混合工作负载的调整策略。系统上资源是有限的。内存资源的竞争一定要避免,因为只要内存不够啦,出现争抢内存的情况,结果肯定都是很糟糕。处理网络和存储相关的操作,也是使用CPU。所以限制了CPU资源的使用,也会限制网络和存储资源的使用。所以资源管理,管理的资源,最重要的是CPU资源。 对于OLTP类型的工作负载来说,想要性能好,系统上CPU使用率不要超过60-70%这个区间 对于混合工作负载,资源管理的目标和CPU策略都是对立的。OLTP的目标是快速的响应时间,CPU策略是最小化,就是系统上要有空闲CPU。报表查询和数据加载与处理类型的工作负载,因为需要处理大量数据,吞吐量是很重要的目标,CPU策略是最大化,就是尽量用到更多的CPU资源,才能性能好 管理混合工作负载,有很多方法。 可以不同的负载跑在不同的数据库上,也可以是不同的负载跑在同一个数据库上。 如果是不同的负载跑在不同的数据库上,那么一个办法就是为每个工作负载分配虚拟机。每个工作负载不能使用超过分配的CPU 另一个办法是,让所有工作负载跑在同一个操作系统上,这时候为数据库启用资源管理计划,用instance caging来控制单个数据库使用的CPU,通过CPU_COUNT参数定义每个数据库能最多能使用多少CPU资源 还有一个办法是,使用多租户,让每个工作负载跑在一个独立的PDB上,然后在CDB上启用资源管理计划来控制各个PDB的CPU使用 如果是不同的工作负载跑在同一个数据库上,那么一个办法是,让每个工作负载使用一个不同的RAC service,然后将RAC service映射到不同的RAC节点。 如果是不同的工作负载跑在一个数据库实例上,那么可以使用DBRM,将不同的工作负载映射到不同的consumer gro...

Database Connection Pool

RWP团队谈性能优化之大开眼界篇( 一)连接池策略 开始的时候让大家思考 到数据库服务器的连接数,您觉得应该跟什么有关? 1. 系统需要支持的最大并发用户数 2. 硬件,数据库服务器上的CPU数量 3. 硬件,数据库服务器上的内存大小 4. 只要设的足够大,应用不报错就行 然后进行了demo。demo中用到一台数据库服务器,两台应用服务器。数据库服务器是Exadata X8-2的一个计算节点(48 CPU Core),应用服务器是Exadata X8-2的两个计算节点,都坐落在美国的一个数据中心里。 开始demo,连接池的最小值是288,最大值是6000。28800个Java Thread 每10000ms向数据库里发送一个request,系统非常闲,CPU使用率不到10%。 将Think Time由10000改为5000,即每个Java Thread每隔5000ms向数据库里发送一个Request,工作负载翻倍。 工作负载翻倍之后,响应时间不变,TPS翻倍,系统的扩展性完美。 进一步减少Think Time,将Think Time由5000改为2500。到数据库的连接从200多激增到了将近5000,连接风暴发生了。过程中响应时间突然变慢好几百倍,TPS没有马上翻倍。过了一会儿,响应时间似乎又稳定下来了,TPS也基本翻倍,基本线性增长了。 连接风暴发生的根本原因,是连接池配置问题。连接池最大值是6000,最小值是288,当连接不够用的时候,连接池就会增长,在demo里面,是不但增长而且急剧的增长了。 Demo里面发生连接风暴的时候,数据库服务上的CPU使用率都不到20%。就是说,即使系统很闲的时候,动态连接池策略也会有连接风暴的风险。动态连接池,是指连接池的最大值不等于最小值。当最大值与最小值相差很大,比如相差几千的时候,连接风暴的风险尤其大。 将Think Time由2500改为1200的时候,再一次经历了连接风暴,到数据库的连接从将近5000增加到了6000。 Think Time=300的时候,响应时间时间非常不稳定,通常在几百毫秒,TPS也非常不稳定,相比Think Time=600/1200的时候,TPS根本就没有升高,反而整体还低了一些,数据库里面的活跃会话数基本在5000以上,数据库里有大量的等待事件,主要是latch: cache buffers c...

How to use SQL Monitor

RWP团队谈性能优化之大开眼界篇(五)SQL Monitor报告实例分析 首先介绍了用于数据库诊断的各种工具汇总,强调SQL Monitor报告是用于SQL级别性能诊断和分析的最佳工具,它显示一条SQL语句的某次执行的详细信息。对于长时间运行的SQL,可以进行精准的分析以确定时间都花在哪里 SQL Monitor报告在Oracle 11g开始引入,它总是可用,是默认启用的,用于监视SQL的单次执行,也包括尚未完成的SQL语句。 SQL语句要被监视需要满足下面的三种情形之一: 1. 所有的并行执行语句 2. 超过5秒的串行执行语句 3. 带有 /*+ monitor */ 提示的语句 SQL Monitor报告有多种格式,推荐使用Active(HTML)的格式,在没有浏览器可以的情况下可以使用TEXT格式的直接在终端查看。有多种方法生成或者直接查看SQL Monitor报告:  OEM的SQL监视页面  EM Express  PerfHub  命令行方式直接生成  SQL Developer 接下来介绍了如何解读SQL Monitor报告。RWP推荐采用自顶向下的方式来查看:  时间都花在哪里?  哪一个行源(row sources)?  估计的和实际的行数一致吗?  执行数  并行服务器执行数  Nested loop 迭代次数  智能分区操作  并行执行:并行进程倾斜? 在SQL Monitor的General部分可以查看SQL的一般信息:是否使用了并行;SQL消耗的数据库时间,数据库时间中CPU和各种等待的占比;SQL消耗的IO信息等等。 Plan Statistics页展示执行计划和过程信息。在这个页面,Activity % 显示了时间花在哪里;可以获得每个操作的估计行数,执行过程中实际返回的行数,从而确定估计值是否有偏差;在此首先关注表或者索引扫描的估计行数,不好的估计值往往导致不好的执行计划。 Plan页可以查看执行计划的更多信息,可以查看每个步骤的过滤条件以及分区裁剪信息。 Activity页以图形的方式显示活动会话和等待事件——类似于单条SQL的顶级活动。在这个页面可以看到整个SQL的执行过程,另外这个页面提供了多个维度来查看SQL的DB时间的分布。 Parallel页只有在并行执行的SQL才会出现,显示了各个并行进程的信息...

How to read Oracle AWR Report

RWP团队谈性能优化之大开眼界篇(四)AWR报告实例分析 本讲首先介绍了用于数据库诊断的各种工具汇总,强调AWR报告是用于系统级别性能诊断和分析的工具。AWR报告是系统级别性能问题的首选工具,提供系统设置和体系结构的整体概况。分析时采取自顶向下的视角:先专注于主要部分以识别主要问题,然后使用其他部分以获取详细信息, 然后简要介绍了AWR包括的各种报告,比如:单实例和多实例的报告,单实例和多实例的对比报告,CDB/PDB级别有不同的报告,以及单个SQL的AWR报告等。在不同的场景下应该选择合适的报告来分析 接下来给出了RWP 推荐的分析AWR报告的顺序: 1.报告开头的系统基础信息 2.ADDM的主要发现 3.负载概览(Load Profile) 4.init.ora参数 5.顶级前台等待事件 6.顶级SQL 7.根据上述步骤里发现的可疑问题,再通过其他部分获取特定的详细信息以进行分析 针对这个顺序中的每个步骤,分别讲解了需要查看和分析的重点 1. 对于报告开头的系统基础信息,需要关注数据库的版本,是否是RAC和/或CDB;同时了解基于core的CPU资源信息,如何将会话数和CPU core结合来检查数据库的连接策略;最后通过DB Time来来获得活动会话的信息 2.对于ADDM的主要发现部分,通过数据库给出的主要发现可以大致定位系统存在问题的可能方面,从而为后续的分析指明方向 3.在负载概览(Load Profile)部分,通过DB时间和CPU时间可以对数据库是消耗较多CPU还是在各种等待上有个直观了解。而解析(特别是硬解析)和用户登陆信息可以对应用的实现有个初步了解,并提前掌握系统可能存在的问题 4.在init.ora参数部分,需要重点关注下划线参数和事件的设置,这些参数应该仅在Oracle售后建议时临时设置;所有参数应该尽量使用默认值,在不同节点上的配置也应该保持一致。设置过多的参数可能会对系统带来不可预知的表现。Oracle的所有测试都是基于默认值的 需要重点关注的init.ora参数包括: •db_block_size •db_file_multiblock_read_count •cursor_sharing •open_cursors •optimizer_* •parallel_* •processes •sessions 5.在顶级前台等待事件部分,...

Oracle Golden Gate Workshop

##### Meeting Outline ######## 数据同步的需求和挑战 Golden Gate 实现数据实时同步 零停机数据库迁移如云 Oracle -> ADW, Mysql ->Oracle  异构,实时,双活,保证数据一致性 为Kafka,大数据环境供数 分入侵式的数据抽取 Oracle,mysql,msSQL--- DBMS,Cloud,Big Data,NoSQL,Streams(Kafak,Spark) 单向查询分流 合并实时BI Oracle Golden Gate Marketplace,  Oracle GG for Big Data,  Oracle GG for Kafka 专属XStream APIs 达到4Gb/s GG 19c 新增并行投递性能提升5倍以上。  延迟小于100ms的网络与本地捕获类似 Year 2017 对Oracle和非Oracle数据库远程抽取和投递取能力 Golden Gate 支持跨操作系统的远程抽取,减少了Golden Gate日常维护量 GG Marketplace 开通三步部署,免费试用 搜索OCI Marketplace 在OCI上部署Golden Gate 访问Golden Gate GG微服务版本 Case 1:云端网络同步 单向传送数据,对源端无干扰,只开放需要的网络端口 实时数据传送 Case 2:EBay GG实时投递 Case 3: QuickBooks 实现数据库高可用,和流数据分发 Case 4: GG零停机的迁移 启动extrace 传送到目标端同步 数据pump做数据初始化 veridata 数据验证 --反向数据传送以保证迁移后数据同步到legacy系统 select dbms_flashback.get_system_change_number from dual; DBoptions enable_instantiation_filtering         OGG 12.2, DB version 11gR2 数据库GG迁移中常见的错误 1. 目标端没有及时禁用触发器,级联删除和数据库job 2. 导出数据时数据库有长事务没有提交,事务开始时间在启用捕获之前 3. R...

Oracle Autonomous Database Workshop

1. Autonomous Database Technical Overview ---Oracle Cloud Infrastructure OCI Region - HA Building Blocks, Availability Domain(AD) Fast and Scalable Bare Metal, VM, and GPU compute Cluster Networking Consistant Performance Storage IoT, ADB, AI/ML, Analytics, Mobile Apps, Colud Native Architectures ---ADB Overview ADB Revolutionizes data management Innovate faster with lower costs A. Data Warehouse (ADW), A. Transaction Processing (ATP) ---ADB Key Features Lower cost, reduce risk, accelerates innovation Simple, Fast, Elastic Self-driving, Self-securing, Self-repairing Gathering Satistics and Hints Capture--identify--verify--decide--monitor ---ADB Architectural Components Exadata system based on Region,  Oracle controls all patching, software version, and isolation Low minimum size/cost - 1 OCPU and 1 TB of storage Low minimum time commitment - 1 hour OCI integration: Connection Manager services, Application Servicer, Oracle ML servers               ...