数据库学习(五)---oracle优化的方法

一、 减少数据访问

  1. 创建并使用正确的索引
  2. 只通过索引访问数据
  3. 优化SQL执行计划

二、返回更少的数据

  1. 数据分页处理
    (1)客户端(应用程序或浏览器)分页
    (2) 应用服务器分页
    (3) 数据库SQL分页:rowid比rownum需要的IO少
  2. 只返回需要的字段

三、减少交互次数

  1. batch DML
    采用batch操作一般不会减少很多数据库服务器的物理IO,但是会大大减少客户端与服务端的交互次数,从而减少了多次发起的网络延迟开销,同时也会降低数据库的CPU开销。

  2. IN List
    例:用ID IN LIST:
    select * from mytable where id in(:id1,id2…idn);
    通过这样处理可以大大减少SQL请求的数据,从而提高性能。

  3. 设置Fetch Size
    如果我们要从服务端一次取大量数据时,可以加大fetch_size,这样可以减少结果传输的交互次数及服务器数据准备时间,提高性能。

  4. 使用存储过程

  5. 优化业务逻辑

  6. 使用Resultset游标处理记录
    采用resultset游标处理记录时,应该将游标的打开方式设置为FORWARD_READONLY模式,否则会把结果缓存在JVM里,造成JVM Out of Memory问题。

四、减少数据库服务器CPU运算

  1. 使用绑定变量
    绑定变量优点: ①防止sql注入 ②提高SQL可读性 ③提高SQL解析性能
    不使用绑定变量一般称为硬解析,使用绑定变量我们称为软解析。
    绑定变量是指sql中对变化的值采用变量参数的形式提交,而不是在sql中直接拼写对应的值。
    非绑定变量写法:select * from employee where id = 123;
    绑定变量写法:select * from employee where id = ? Prepare statement.set Int(1,123)
  2. 合理使用排序
  3. 减少比较操作
  4. 大量复杂运算在客户端处理

五、利用更多的资源

  1. 客户端多进程并行访问,前提是数据库主机资源有空间
  2. 数据库并行处理

六、主体思想保证服务器到不了并发瓶颈,在这个前提下,尝试优化

七、常用的优化策略首选索引,其次是交互次数和分页技术的使用

八、在数据量极其庞大的前提下,首选分布式处理方式

设置并行数的建议:

  1. 如果瓶颈在服务器主机,但是主机还有空闲资源,那么最大并行数取主机cpu核数和主机提供数据服务的磁盘数两个参数中的最小值,同时要保证主机有资源做其它任务。
  2. 如果瓶颈在客户端处理,但是客户端还有空闲资源,那建议不要增加sql的并行,而是用一个进程取回数据后在客户端起多个进程处理即可,进程数根据客户端cpu核数计算。
  3. 如果瓶颈在客户端网络,那建议做数据压缩或者增加多个客户端,采用map reduce的架构处理。
  4. 如果瓶颈在服务器网络,那需要增加服务器的网络带宽或者在服务端将数据压缩后再处理了。

猜你喜欢

转载自blog.csdn.net/qq_36800800/article/details/106994090