我现在在做一个项目,这个项目的数据量很大,而且表也很大,字段也很多,查询条件也是很多的。现在查询起来很慢,优化sql语句是一方面。现在应该怎么优化oracle数据库啊。我把我的oracle数据库的一些参数发出来高手看看怎么优化。这个是执行SELECT NAME,VALUE FROM v$parameter WHERE NAME IN
('sga_max_size','db_cache_size',
'shared_pool_size','shared_pool_reserved_size','large_pool_size','java_pool_size',
'db_block_size','db_block_buffers','log_buffer','sort_area_size','sort_area_retained_size',
'hash_area_size','sessions','open_cursors'
) ORDER BY NAME;执行结果:
1 db_block_buffers 0
2 db_block_size 8192
3 db_cache_size 205520896
4 hash_area_size 131072
5 java_pool_size 54525952
6 large_pool_size 54525952
7 log_buffer 7024640
8 open_cursors 300
9 sessions 170
10 shared_pool_reserved_size 9437184
11 shared_pool_size 188743680
12 sort_area_retained_size 0
13 sort_area_size 65536这写参数,应该怎么优化数据库啊!高手指点
最好附上代码…… 谢谢
('sga_max_size','db_cache_size',
'shared_pool_size','shared_pool_reserved_size','large_pool_size','java_pool_size',
'db_block_size','db_block_buffers','log_buffer','sort_area_size','sort_area_retained_size',
'hash_area_size','sessions','open_cursors'
) ORDER BY NAME;执行结果:
1 db_block_buffers 0
2 db_block_size 8192
3 db_cache_size 205520896
4 hash_area_size 131072
5 java_pool_size 54525952
6 large_pool_size 54525952
7 log_buffer 7024640
8 open_cursors 300
9 sessions 170
10 shared_pool_reserved_size 9437184
11 shared_pool_size 188743680
12 sort_area_retained_size 0
13 sort_area_size 65536这写参数,应该怎么优化数据库啊!高手指点
最好附上代码…… 谢谢
解决方案 »
- 一个表80多列正常吗?
- 导入导出数据详解
- 关于组合分区的问题,请高手解答
- pb + orcale9i的问题 请各位达人帮忙
- 多表查询,有点难
- 急救!!ORACLE从8I升级为10I后原来使用DP2000开发的FORM无法编译。
- 急!!建的视图不能排序,ORA-01804错误!
- 各位请帮下书忙:我的oracle中的OracleOraDb10g_home1TNSListener服务启动不了
- 请教:用户sys和system的区别在哪?
- 用sqlldr导入文本文件,如何在源txt的第一行数据之前放字段名,同时使log文件不报错?
- Linux系统下Java调用Oracle EXP命令用户权限问题,求高手帮忙!
- 关于owb建立资料库的问题
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
db_block_buffers 0
db_block_size 16384
db_cache_size 1056964608
hash_area_size 28000000
java_pool_size 67108864
large_pool_size 16777216
log_buffer 7000064
open_cursors 400
sessions 335
sga_max_size 2147483648
shared_pool_reserved_size 104857600
shared_pool_size 536870912
sort_area_retained_size 0
sort_area_size 6553614 rows selected
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.
例子:
(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB')
(低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB')
SQL优化建议34条
http://user.qzone.qq.com/251097186/blog/1247125222
2. 对于大的表的操作, 如果表非常大,最好考虑建分区表,这样能提高读取速度,同时要在相应的字段上建索引或者分区索引Oracle 分区表
http://user.qzone.qq.com/251097186/blog/1246510947Oracle 分区表维护
http://user.qzone.qq.com/251097186/blog/1253262830
3. 建好后用EXPLAIN plan 来分析下SQL语句,看看cost是多少,一般cost是越少约好.
用Toad,pl sql dev等工具查看比较方便,当然在sqlplus中也可以:SQLPLUS 里执行 EXPLAIN PLAN
SQL>EXPLAIN PLAN FOR 你的sql语句;
eg:SQL>EXPLAIN PLAN FOR SELECT * FROM EMP WHERE EMPNO=7369;
然后
SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
对于数据库的调整,做个AWR分析下数据库, 在根据相应的参数来修改,楼主贴出现在的参数是没有多少价值的..
AWR使用
SQL>@?/rdbms/admin/awrrpt.sql Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
输入 report_type 的值:
Type Specified: html
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.
输入 num_days 的值: 1
Listing the last day's Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
orcl10g ORCL10G 142 03 7月 2009 08:11 1
143 03 7月 2009 09:00 1
144 03 7月 2009 10:00 1
145 03 7月 2009 11:00 1
146 03 7月 2009 12:01 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值: 142
Begin Snapshot Id specified: 142
输入 end_snap 的值: 146
End Snapshot Id specified: 146
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_142_146.html. To use this name,
press <return> to continue, otherwise enter an alternative.
输入 report_name 的值: D:\awrrpt_1_142_146.html
Report written to D:\awrrpt_1_142_146.html