怎么提高ORACLE的访问速度?

sinwer110 2008-09-08 12:20:17
现有两个服务器。。。一个做为数据库服务器。一个做为WEB应用服务器。现在数据库服务器里面有三十多万数据。同时在线有200人左右,但是访问速度变得很慢。现在问题我分析了一下,应该是数据库服务器慢的原因。数据库用的是ORACLE,WEB应用服务器用的WEBSPHERE,主要是查询修改的时候速度变慢。请问各位大哥有何良策提高速度.用SQL/DEVELPER访问速度还好/。
...全文
357 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dandelionl 2008-12-09
  • 打赏
  • 举报
回复
以下是摘录的SQL语句书写的优化原则(供参考) :

1 避免无计划的全表扫描 ...
zhou0216 2008-12-07
  • 打赏
  • 举报
回复
查询和修改的速度慢,那就是查询慢啊
索引,或者优化SQL
maysumei1986 2008-12-05
  • 打赏
  • 举报
回复
以下是摘录的SQL语句书写的优化原则(供参考) :

1 避免无计划的全表扫描

如下情况进行全表扫描:

- 该表无索引

- 对返回的行无人和限制条件(无Where子句)

- 对于索引主列(索引的第一列)无限制条件

- 对索引主列的条件含在表达式中

- 对索引主列的限制条件是is (not) null或!=

对索引主列的限制条件是like操作且值是一个bind variable或%打头的值


2 只使用选择性索引

索引的选择性是指索引列中不同值得数目和标志中记录数的比,选择性最好的是非空列的唯一索引1.0。

复合索引中列的次序的问题:

1 在限定条件里最频繁使用的列应该是主列

2 最具有选择性的列(即最清晰的列)应该是主列

如果1和2 不一致,可以考虑建立多个索引。

在复合索引和多个单个索引中作选择:

考虑选择性 考虑读取索引的次数 考虑AND-EQUAL操作


3 管理多表连接(Nested Loops, Merge Joins和Hash Joins) 优化联接操作

Merge Joins是集合操作 Nested Loops和Hash Joins是记录操作返回第一批记录迅速

Merge Joins的操作适用于批处理操作,巨大表 和远程查询

1全表扫描 --〉 2排序 --〉3比较和合并 性能开销主要在前两步

适用全表扫描的情形,都适用Merge Joins操作(比Nested Loops有效)。

改善1的效率: 优化I/O, 提高使用ORACLE多块读的能力, 使用并行查询的选项

改善1的效率:提高Sort_Area_Size的值, 使用Sort Direct Writes,为临时段提供专用表空间


4 管理包含视图的SQL语句

优化器执行包含视图的SQL语句有两种方法:

- 先执行视图,完成全部的结果集,然后用其余的查询条件作过滤器执行查询

- 将视图文本集成到查询里去

含有group by子句的视图不能被集成到一个大的查询中去。

在视图中使用union,不阻止视图的SQL集成到查询的语法中去。


5 优化子查询


6 使用复合Keys/Star查询


7 恰当地索引Connect By操作


8 限制对远程表的访问


9 管理非常巨大的表的访问

- 管理数据接近(proximity) 记录在表中的存放按对表的范围扫描中最长使用的列排序 按次序存储数据有助于范围扫描,尤其是对大表。

- 避免没有帮助的索引扫描 当返回的数据集合较大时,使用索引对SGA的数据块缓存占用较大,影响其它用户;全表扫描还能从ORACLE的多块读取机制和“一致性获取/每块”特性中受益。

- 创建充分索引的表 使访问索引能够读取较全面的数据 建立仅主列不同的多个索引

- 创建hash簇

- 创建分割表和视图

- 使用并行选项

10 使用Union All 而不是Union

UNION ALL操作不包括Sort Unique操作,第一行检索的响应速度快,多数情况下不用临时段完成操作,

UNION ALL建立的视图用在查询里可以集成到查询的语法中去,提高效率


11 避免在SQL里使用PL/SQL功能调用


12 绑定变量(Bind Variable)的使用管理

使用Bind Variable和Execute using方式

将like :name ||’%’ 改写成 between :name and :name || char(225), 已避免进行全表扫描,而是使用索引。


13 回访优化进程

数据变化后,重新考察优化情况
maysumei1986 2008-12-05
  • 打赏
  • 举报
回复
以下是摘录的SQL语句书写的优化原则(供参考) :

1 避免无计划的全表扫描

如下情况进行全表扫描:

- 该表无索引

- 对返回的行无人和限制条件(无Where子句)

- 对于索引主列(索引的第一列)无限制条件

- 对索引主列的条件含在表达式中

- 对索引主列的限制条件是is (not) null或!=

对索引主列的限制条件是like操作且值是一个bind variable或%打头的值


2 只使用选择性索引

索引的选择性是指索引列中不同值得数目和标志中记录数的比,选择性最好的是非空列的唯一索引1.0。

复合索引中列的次序的问题:

1 在限定条件里最频繁使用的列应该是主列

2 最具有选择性的列(即最清晰的列)应该是主列

如果1和2 不一致,可以考虑建立多个索引。

在复合索引和多个单个索引中作选择:

考虑选择性 考虑读取索引的次数 考虑AND-EQUAL操作


3 管理多表连接(Nested Loops, Merge Joins和Hash Joins) 优化联接操作

Merge Joins是集合操作 Nested Loops和Hash Joins是记录操作返回第一批记录迅速

Merge Joins的操作适用于批处理操作,巨大表 和远程查询

1全表扫描 --〉 2排序 --〉3比较和合并 性能开销主要在前两步

适用全表扫描的情形,都适用Merge Joins操作(比Nested Loops有效)。

改善1的效率: 优化I/O, 提高使用ORACLE多块读的能力, 使用并行查询的选项

改善1的效率:提高Sort_Area_Size的值, 使用Sort Direct Writes,为临时段提供专用表空间


4 管理包含视图的SQL语句

优化器执行包含视图的SQL语句有两种方法:

- 先执行视图,完成全部的结果集,然后用其余的查询条件作过滤器执行查询

- 将视图文本集成到查询里去

含有group by子句的视图不能被集成到一个大的查询中去。

在视图中使用union,不阻止视图的SQL集成到查询的语法中去。


5 优化子查询


6 使用复合Keys/Star查询


7 恰当地索引Connect By操作


8 限制对远程表的访问


9 管理非常巨大的表的访问

- 管理数据接近(proximity) 记录在表中的存放按对表的范围扫描中最长使用的列排序 按次序存储数据有助于范围扫描,尤其是对大表。

- 避免没有帮助的索引扫描 当返回的数据集合较大时,使用索引对SGA的数据块缓存占用较大,影响其它用户;全表扫描还能从ORACLE的多块读取机制和“一致性获取/每块”特性中受益。

- 创建充分索引的表 使访问索引能够读取较全面的数据 建立仅主列不同的多个索引

- 创建hash簇

- 创建分割表和视图

- 使用并行选项

10 使用Union All 而不是Union

UNION ALL操作不包括Sort Unique操作,第一行检索的响应速度快,多数情况下不用临时段完成操作,

UNION ALL建立的视图用在查询里可以集成到查询的语法中去,提高效率


11 避免在SQL里使用PL/SQL功能调用


12 绑定变量(Bind Variable)的使用管理

使用Bind Variable和Execute using方式

将like :name ||’%’ 改写成 between :name and :name || char(225), 已避免进行全表扫描,而是使用索引。


13 回访优化进程

数据变化后,重新考察优化情况
yonghengdizhen 2008-12-04
  • 打赏
  • 举报
回复
如果你确定是数据库的问题,让DBA分析一下等待事件,找到引起问题的根源.
从你描述的现象来看,可以分析一下和存储分配有关的等待事件,修改表的pctfree,pctused或许能解决问题.
lordtan 2008-12-04
  • 打赏
  • 举报
回复
建一索引,使用缓存
优化以下查询语句,看看存储过程写的是不是有性能问题,优化分页代码
实在不行叫你老板再砸点钱,买多两台服务器
zeeler 2008-09-12
  • 打赏
  • 举报
回复
恩,30万数据量就慢了,只能说明你的数据库操作代码质量不高,检查一下数据库索引,程序的SQL语句,连接池的配置和管理(不知道你用连接池了没)等等......
fengjiafeng1984 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 famousboy 的回复:]
优化你的SQL语句,该建索引的地方建索引
[/Quote]
huangma1616 2008-09-09
  • 打赏
  • 举报
回复
以下资料是在去年的一个大型项目中应用的,希望对你有所帮助:

Oracle与提高性能有关的特性
本章讨论Oracle服务器内容,管理员可通过这些方面来提高数据库性能。尽管这些主题属于Oracle服务器的一部分,但测试人员可将这些方面当作提高数据库性能的手段。
我们知道,数据库索引是创建在数据之上的为提高数据访问性能的对象。在设计数据库索引时,必须谨慎并且需要了解用户访问数据的模式。在某些情况下,设计不善的索引将导致系统性能的下降,本章索引是我们讨论的重点。
这里列出了讨论需要的参数以及其使用方法。
 MAX_DSPATCHERS:这个参数指定了系统允许同时进行的调度进程的最大数量。
 MAX_SHARED_SERVERS:这个参数指定了系统允许同时进行的共享服务器进程的最大数量。如果系统中出现的人为死锁过于频繁,那么管理员应该增大这个参数的值。
 PARALLEL_ADAPTIVE_MULTI_USER:当这个参数的值为TRUE时,系统将启动一个能提高使用并行执行的多用户系统性能的自适应算法。这个算法将根据查询开始时的系统负载自动降低查询请求的并行度。
 PARALLEL_AUTOMATIC_ENABLED:如果将这个参数的值设置为TRUE,那么Oracle将确定控制并行执行的参数的默认值。
 PARLLEL_BROADCAST_ENABLED:这个参数允许管理员提高散列连接和合并连接操作的性能,在这样的连接操作中,系统将一个大尺寸的结果集与一个小尺寸的结果集连接在一起(在合并操作中,数据的尺寸是根据字节数,而不是记录数确定的)。
 PARLLEL_EXECUTION_MESSAGE_SIZE:这个参数指定了系统并行执行时的消息的尺寸(在Oracle的旧版本中,这个概念是指并行查询、PDML、并行恢复和并行复制数据等)。
 PARLLEL_MAX_SERVERS:这个参数指定了实例能同时运行的并行执行进程和并行恢复进程的最大数量。随着用户需求的增长,在创建实例时为这个参数设置的值将不再能满足用户需求,所以应当增大这个参数的值。
 PARLLEL_MIN_PERCENT:系统将联合使用PARLLEL_MAX_SERVERS、PARLLEL_MIN_SERVERS和该参数。这个参数允许指定并行执行进程(即参数PARLLEL_MAX_SERVERS之值)的最小百分比。
 PARLLEL_MIN_SERVERS:这个参数指定了实例并行执行进程的最小数量。其值就是实例启动时Oracle创建的并行执行进程数。
 PARLLEL_THREADS_PER_CPU:这个参数指定了实例默认的并行度和并行自适应以及负载平衡算法。它指明了并行执行过程中一个CPU能处理的进程或线程数。
 PARTITION_VIEW_ENABLED:这个参数指定了优化器是否使用分区视图。Oracle推荐用户使用分区表(这是在Oracle8之后引入的)而不是分区视图。分区视图只是为了提供Oracle的后向兼容性。
 REVOVERY_PARALLELISM:这个参数指定了恢复数据库系统时使用的进程数。

famousboy 2008-09-09
  • 打赏
  • 举报
回复
优化你的SQL语句,该建索引的地方建索引
qwj2006 2008-09-09
  • 打赏
  • 举报
回复
还是oracle数据库没有配置好。
仔细看看吧!
fkyq01 2008-09-08
  • 打赏
  • 举报
回复
提高服务器的配置。

查看是否有锁表等待,
就是多人对同一张表的相同数据操作,
如果该过程本身比较慢就会造成锁表等待,
多人操作 比较容易出现这个现象。

improve your procedure.
ten789 2008-09-08
  • 打赏
  • 举报
回复
30W数据 MYSQL内存表都搞定了

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧