最近开发项目使用了Oracle,根据总体架构一开始选择使用Mybatis,发现核心模块用Mybatis效率不够,切换到jdbc实现,效率大增。Oracle可是个庞然大物,特性多多,丝毫不能马虎,否则很多雷等着去踩。现在产品试运行阶段,回头总结一下踩过的雷,以后有新的发现会持续更新。

1、关于ROWNUM关键字

   Oracle返回的某条记录的ROWNUM并不是不变的,不要依赖于ROWNUM,非要依赖ROWNUM,注意添加ORDER BY分支确定ROWNUM确保不同分页的数据不会重复。项目一启动就制订了约束:不能在项目中应用GROUP BY关键字。项目中一次需要汇总统计的输入表达到几百万的数据量级,汇总出来输出最多几万条记录,因此采用分页查询,对分页数据开启多个线程并行执行计算,做完汇总统计再删除多有输入数据,一开始分页查询只用了ROWNUM分页,偶然性的发生汇总出来的数据比输入数据大的情况,接着定位到了是某些记录重复进行汇总统计导致。查了Oracle的官方文档,文档描述ROWNUM是在查询返回来的时候决定值,但不是每次查询相同记录都是相同的ROWNUM,可能同一条记录第一次查询,ROWNUM在1-1000之间,下次查询在1001-2000之间。解决方案:在查询语句中加入ORDER BY ID,其中ID是唯一的,重复统计问题得到解决。

2、关于热块竞争问题

一张四五百万级别的输入表INPUT1关联查找另一张一千万级别的输入表INPUT2,关联查询使用了索引,执行计划显示查询确实走了索引。一开始从INPUT1获取n条记录,对n分成k份,开启k个线程对k份数据并发处理,线程内部一进来就执行关联查询,通过日志得知,查询时而执行的很慢,DBA协调定位,发现并发查询的多个线程之间有相同数据分布在一个块中,导致资源等待。解决方案:在关联查询的地方做同步块处理,即应用关键字synchronized将关联查询包起来。

3、关于共享内存超出限制问题

  利用Mybatis实现跑批插入,INSERT INTO TB_XXX SELECT XX... FROM (SELECT ... FROM DUAL UNION ALL SELECT ... FROM DUAL),子查询中UNION ALL了1000条记录,在开发库和测试库上执行这条语句正常执行,在生产库中执行了一段时间后,开始抛出共享内存不足异常信息,原来DBA对开发库和测试库没有设置共享内存限制,生产库设置了共享内存限制。解决方案:把1000改成了100,暂时问题解决了。

Oracle特性总结的更多相关文章

  1. Oracle 12c In Memory Option初探

    前情提要: Oracle OpenWorld 2013中Larry Ellison爆料的Oracle新特性:Oracle In Memory Database Option 1. 这个新特性将随着12 ...

  2. 使用Oracle ODP.NET 11g的.NET程序发布方法

    使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...

  3. ORACLE数据库存储结构

    一.数据块 Oracle对数据库数据文件中的存储空间进行管理的单位是数据块.数据块是数据库中最小的(逻辑)数据单位,是最小的I/O单位.与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节.每 ...

  4. Oracle 11g AMM与ASMM切换

    现在的Oracle正在往智能化方向发展.如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题.但是进入10g之后,自动内存池调节成为一个重要Oracl ...

  5. [oracle]Oracle数据库安全管理

    目录 +  1.数据库安全控制策略概述 +  2.用户管理 +  3.资源限制与口令管理 +  4.权限管理 +  5.角色管理 +  6.审计 1.数据库安全控制策略概述 安全性是评估一个数据库的重 ...

  6. [转帖]Oracle 12cR2使用经验

    大规模升级来临,谈谈Oracle 12cR2使用经验 随着2019年2月13日,Oracle 19c (Oracle 12.2.0.3) for Exadata 版本发布,Oracle 12cR2体系 ...

  7. Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较

    参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...

  8. Oracle常用常考集合

    登陆远程服务器 sqlplus scott/tiger@192.168.2.1[:port]/sid [as sysdba] 简单查询 select  table_name from user_tab ...

  9. Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~

    Oracle 是如何工作的? Select id,name from t order by id ; – SQL 解析(查看语法是否错误,如果没有错误,分析语意,执行此语句的权限) – 执行计划(OR ...

随机推荐

  1. FCKeditor 添加行距、字体功能 (转载)

    一.首先为FCKeditor添加外部插件在fckeditor/editor/plugins文件夹下建立新文件夹lineHeight,并在其中创建fckplugin.js文件,在其文件中办輸入代码:FC ...

  2. 原生ajax与封装的ajax使用方法

    当我们不会写后端接口来测试ajax时,我们可以使用node环境创建一个本地服务器. 1.创建一个本地服务器可参考http://www.cnblogs.com/heyujun-/p/6793900.ht ...

  3. RocketMQ读书笔记5——消息队列的核心机制

    [Broker简述] Broker是RocketMQ的核心,大部分“重量级”的工作都是由Broker完成的,包括: 1.接受Producer发过来的消息: 2.处理Consumer的消费信息请求: 3 ...

  4. lianxi

    package dududu; public class qiqiqi { public static void main(String[] args) { // TODO 自动生成的方法存根 ; ; ...

  5. as3.2版本中中jar生成方法

    lintOptions { abortOnError false } task makeJar(type: Copy) { //删除存在的 delete 'build/libs/myjar.jar' ...

  6. 如何使用idea把web项目打成war包

    如果是maven项目,打成war包很容易,如果是web项目,需要这样子 1. 2. 3. output directory是war包的目录 4.重新选择 第一步的操作,选择build即可.

  7. webpack2-webpack.config.js配置

     写在前面: 了解更多:https://github.com/miaowwwww/webpack-learn 贴一个webpack.ocnfig.js 的配置属性表 一.代码分割: 1.插件 Comm ...

  8. 远程计算机或设备将不接受连接,IE无法上网

    遇到一个奇葩问题,IE浏览器突然不能上网了,但是其他浏览器可以,QQ什么的也都正常,只有IE是出现:远程计算机或设备将不接受连接 这个问题,网上找了很多答案都没用,什么设置WINS,允许远程访问,取消 ...

  9. linux-记录

    查看运行的进程  ps -aux|grep java 找到要删除的进程的编号 杀死进程  kill -9 1883(进程编号) 重启服务 sh satrtBussinessService.sh

  10. php中的foreach问题(1)

    前言 php4中引入了foreach结构,这是一种遍历数组的简单方式.相比传统的for循环,foreach能够更加便捷的获取键值对.在php5之前,foreach仅能用于数组:php5之后,利用for ...