Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1521671
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: Oracle

2011-11-14 16:38:46

数据库访问优化法则详解之利用更多的资源

利用更多的资源

可利用更多的资源,达到优化数据库的目的。

客户端的多进程并行访问

多进程并行访问是指在客户端创建多个进程(线程),每个进程建立一个与数据库的连接,然后同时向数据库提交访问请求。当数据库主机资源有空闲时,我们可以采用客户端多进程并行访问的方法来提高性能。如果数据库主机已经很忙时,采用多进程并行访问,性能不会提高,反而可能会更慢。所以,最好与DBA 或系统管理员进行沟通后再决定是否采用这种方式。

例如:我们有10 000 个产品ID,现在需要根据ID 取出产品的详细信息,如果单线程访问,按每个IO 5ms 计算,忽略主机的CPU 运算及网络传输时间,我们需要50s才能完成任务。如果采用5 个并行访问,每个进程访问2000 ID,那么10s 就有可能完成任务。

那是不是并行数越多越好呢?开1000 个并行,是否只要50ms 就能搞定?答案肯定是否定的。当并行数超过服务器主机资源的上限时性能就不会再提高,如果再增加,反而会增加主机的进程间调度成本和进程冲突概率。

以下是一些如何设置并行数的基本建议:

1)如果瓶颈在服务器主机,但是主机还有空闲资源,那么最大并行数取主机的CPU核数和主机提供数据服务的磁盘数两个参数中的最小值,同时要保证主机有资源做其他任务。

2)如果瓶颈在客户端处理上,但是客户端还有空闲资源,那建议不要增加SQL 的并行,而是用一个进程取回数据后,在客户端起多个进程处理即可,进程数根据客户端的CPU 核数计算。

3)如果瓶颈在客户端网络,那建议做数据压缩或者增加多个客户端,采用mapreduce 的架构处理。

4)如果瓶颈在服务器网络,那需要增加服务器的网络带宽或者在服务端将数据压缩后再处理了。

数据库的并行处理

数据库的并行处理是指客户端一条SQL 的请求,数据库内部自动分解成多个进程并行处理,如图3-8 所示。

 

 

并不是所有的SQL 都可以使用并行处理,一般只有对表或索引进行全部访问时才可以使用并行。数据库表默认是不打开并行访问的,所以需要指定SQL 并行的提示,如下所示:

select /*+parallel(a,4)*/ * from employee;

并行的优点:

使用多进程处理,充分利用数据库主机资源(CPU IO),提高性能。

并行的缺点:

1)单个会话占用大量资源,影响其他会话,所以只适合在主机负载低的时期使用。

2)只能采用直接IO 访问,不能利用缓存数据,所以执行前会触发将脏缓存数据写入磁盘的操作。

注:(1)并行处理在OLTP 类系统中慎用。使用不当会导致一个会话把主机资源全部占用,而正常事务得不到及时响应,所以其一般只是用于数据仓库平台。

2)一般而言,对于百万级记录以下的小表采用并行访问的话,并不能提高,反而可能会更差。

写在最后:性能优化是一门艺术,选择了正确的方法可以让你事半功倍。本文的优化法则带给你的是正常思路,也可以说是基本知识。当然,也许有很多专家提出一些新的“奇门武功”,但往往不是常人可掌控,甚至会使人“走火入魔”,Oracle 数据库中的一些配置参数优化就曾经让许多人“走火入魔”。在这里还需要强调一点,技术人最容易犯的错误是过度优化。

切记,性能优化是无止境的。当性能达到业务期望时,就不要再过度优化了,因为优化的成本会越来越高,过度优化会让系统的可维护性及可扩展性降低。

 

 

本文选自《Oracle DBA手记3:数据库性能优化与内部原理解析》一书

本书详细信息:http://blog.chinaunix.net/space.php?uid=13164110&do=blog&id=3017863

 

阅读(782) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~