理解Oracle的体系结构
不要在MTS下运行长事物
不要在多线程服务器上运行45秒以上的事务,若一个进程阻塞可能导致长时间挂起
使用绑定变量
select * from amp where empno=:empno
绑定变量,它的值在查询执行时提供,查询经过一次编译后,查询方案存储在共享池(库高速缓存),用来检查和复用
- 提交引用相同对象的完全相同的查询将使用共享池中的编译方案
- 不仅使用较少资源
- 减少锁存时间
- 降低锁存频率
- 提高了软件性能和可伸缩性
理解并行控制
并行控制实现数据库和系统文件分离,数据库之间分离
实现封锁
数据库利用锁定确保指定时间内,一个事务至多修改一处指定的数据
Oracle封锁策略
- 只有当修改时,Oracle在行级上锁定数据,不能把锁定上升到块级或表级
- Oracle绝不会为读取而锁定数据,简单读取不能在数据行上设置锁定
- 数据的写入器不会阻塞数据读取器
- 只有当另一个数据写入器已经锁定了某行数据后,才阻塞对他人对改行数据的写入
select for update
通过 for update 语句加锁,实现多进程下的资源同步
多版本
- 一致读查询:在某一时刻查询产生一致结果
- 非阻塞查询:数据写入器从来不阻塞查询
- delete命令把数据复制到一个称为回滚段的数据区域保存
oracle所拥有的处理机制,无论何时修改,Oracle都在两个不同地方产生记录
- 一条记录到redo(重做),存储前滚信息
- 另一条到undo(撤销),回滚段,用于事务的撤销回复之前的映像
oracle的查询如何保证数据一致
Oracle只确定数据是否变化,不关心数据是否锁定