Oracle特性总结
最近开发项目使用了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特性总结的更多相关文章
- Oracle 12c In Memory Option初探
前情提要: Oracle OpenWorld 2013中Larry Ellison爆料的Oracle新特性:Oracle In Memory Database Option 1. 这个新特性将随着12 ...
- 使用Oracle ODP.NET 11g的.NET程序发布方法
使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...
- ORACLE数据库存储结构
一.数据块 Oracle对数据库数据文件中的存储空间进行管理的单位是数据块.数据块是数据库中最小的(逻辑)数据单位,是最小的I/O单位.与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节.每 ...
- Oracle 11g AMM与ASMM切换
现在的Oracle正在往智能化方向发展.如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题.但是进入10g之后,自动内存池调节成为一个重要Oracl ...
- [oracle]Oracle数据库安全管理
目录 + 1.数据库安全控制策略概述 + 2.用户管理 + 3.资源限制与口令管理 + 4.权限管理 + 5.角色管理 + 6.审计 1.数据库安全控制策略概述 安全性是评估一个数据库的重 ...
- [转帖]Oracle 12cR2使用经验
大规模升级来临,谈谈Oracle 12cR2使用经验 随着2019年2月13日,Oracle 19c (Oracle 12.2.0.3) for Exadata 版本发布,Oracle 12cR2体系 ...
- Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较
参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...
- Oracle常用常考集合
登陆远程服务器 sqlplus scott/tiger@192.168.2.1[:port]/sid [as sysdba] 简单查询 select table_name from user_tab ...
- Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~
Oracle 是如何工作的? Select id,name from t order by id ; – SQL 解析(查看语法是否错误,如果没有错误,分析语意,执行此语句的权限) – 执行计划(OR ...
随机推荐
- 部署基于python语言的WEB发布环境
一.部署说明 1.python语言介绍 python简介 2.实验环境 实验机器:Vmware虚拟机 8核10G 网卡:桥接模式 系统:centos7.5 防火墙:关闭 Selinux:关闭 网段:1 ...
- 排序算法Nb三人组-归并排序
归并排序只能对两个已经有序的列表进行合并排序,所以要我们自己创建出两个有序列表.最后在进行合并. def merge2list(li1, li2): li = [] i = 0 j = 0 while ...
- js数组方法 改变原数组和不改变原数组的方法整理
改变原数组: pop(): 删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值.如果数组已经为空,则 pop() 不 改变数组,并返回 undefined 值 ...
- Vue.js基础2
声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进 DOM: <div id="app"> {{ message }} </div ...
- daemontools检测进程,退出拉起
一.学习的原因: 为了实现在服务异常停止运行后,有一个监控程序能监控到它,并自动重新启动这个服务.以下以tomcat为例子 二.工具supervise Daemontools是一个包含了很多管理Uni ...
- python 面向对象 【进阶】
多态 多态跟python没有太大关系,因为python本身原生支持多态. def func(arg): #多态 print (arg) func(1) func(‘pand ...
- Jmeter对HTTP请求压力测试、并发测试
最近公司需要开发一个简单的报名系统,供外网用户提供报名服务,由于我们公司是个初创的微型公司,开发人员都是刚毕业不久,开发经验相当缺乏. 对于服务器性能测试这块的经验更是少得可以忽略.迫使不得不让我们去 ...
- C++异常安全
转自:http://www.cnblogs.com/zgfLawliet/p/3417308.html 异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异 ...
- Php 性能参数优化 及 Iptables 防火墙限制用户访问平率
Php-Fpm.Conf 文件配置优化 [global] pid = run/php-fpm.pid process_control_timeout=5 [www] listen.allowed_cl ...
- js常用代码记录
1.动态key得到某对象中相对应的value js中想根据动态key得到某对象中相对应的value的方法有二: var key = "name1";var value = obj[ ...