12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
编程知识 时间:2024-12-18 17:12:13
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
随着企业系统规模不断扩大,数据量也随之增长。针对这种情况,优化器成为了可避免不的问题,它是决定Oracle数据库执行计划和查询性能的关键元素之一。一个好的优化器可以大幅优化
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
随着企业系统规模不断扩大,数据量也随之增长。针对这种情况,优化器成为了可避免不的问题,它是决定Oracle数据库执行计划和查询性能的关键元素之一。一个好的优化器可以大幅优化查询性能,为企业带来巨大的效益。
Oracle优化器有三种基本类型:
1. 请注意,当选择优化器类型时,还取决于许多其他因素,例如Oracle版本、实例配置和应用程序性能。并不是所有类型的优化器都适用于所有情况。
SQL>SELECT /*+ GATHER_PLAN_STATISTICS */ MIN(empid) FROM empl WHERE name = 'JEFF';MIN(EMPID)----------299SQL>SELECT * FROM table(DBMS_XPLAN.display_cursor());PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------SQL_ID anyg3qjfyh6ug, child number 0-------------------------------------SELECT /*+ GATHER_PLAN_STATISTICS */ MIN(empid) FROM empl WHERE name = 'JEFF'Plan hash value: 3556663472--------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time |--------------------------------------------------------------------------| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 || 2 | INDEX FULL SCAN | EMPL_NIDX | 1 | 104 | 104 |00:00:00.01 |--------------------------------------------------------------------------Note------ dynamic sampling used for this statement (level=2)
2. 而在第二种类型中,被称为代理优化器(Proxy mode optimizer)。它是由较新版本中的Oracle Database自动管理框架(Oracle Database Automatic Management Framework)引入的,即简称AMF。该框架会探测给定的查询是否适用代理优化器,如果适用,则AMF会在代理方案和SQL执行计划方案之间进行自动切换。
SQL>BEGINDBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_TABLE_ACCES', 'ON', 'ALL', NULL, NULL);END;/SQL>SELECT * FROM table(DBMS_XPLAN.display_cursor());PLAN_TABLE_OUTPUT---------------------------------------------------------------------------------------SQL_ID 0k8nmrt407fg1, child number 0-------------------------------------SELECT /*+ OPTIMIZER_FEATURES_ENABLE('19.1.0') */ COUNT(*) FROM empl WHERE name LIKE '%B%'Plan hash value: 450636126--------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time |--------------------------------------------------------------------------| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 || 2 | INDEX FULL SCAN | IPK | 1 | 104 | 104 |00:00:00.01 |--------------------------------------------------------------------------Note------ SQL statement "SELECT /*+ OPTIMIZER_FEATURES_ENABLE('19.1.0') */ COUNT(*) FROM empl WHERE name LIKE '%B%'"- automatic DDL optimization for this statement
3. 第三种类型则是自动调整期望标准的优化器,通过自动跟踪SQL语句的执行性能,不断优化计划选择标准,以实现更好的查询性能表现。在第一次运行查询时,Oracle数据库中的优化器将计划结果缓存,以备下次执行高效。但是,当新数据或新索引添加到表中时,计划与SQL语句可能无法再次用于性能。
SQL>SELECT employee_id FROM sales WHERE dept_id = 500 AND sale_amount >100000;SQL>EXEC dbms_stats.gather_table_stats (ownname =>'SH', tabname =>'SALES');SQL>SELECT employee_id FROM sales WHERE dept_id = 500 AND sale_amount >100000;
不管是哪种优化器,当查询性能出现问题时,我们都需要进行数据库调优。在调优之前,你需要确定耗时最长的SQL语句和资源瓶颈,这些问题可以通过SQL监控来诊断。一旦确定了问题,你可以通过以下几种方式解决它:
1. 添加索引,尽可能避免全表扫描;
SQL>CREATE INDEX emp_name_idx ON empl (name);
2. 优化查询语句,尽可能降低其复杂度;
SQL>SELECT COUNT(*) FROM empl WHERE SUBSTR(name, 1, 1) = 'B';
3. 重新配置数据库,使用RAID来提高磁盘I/O性能。
SQL>CREATE TABLESPACE app_data DATAFILE '/u02/oradata/app_data01.dbf' SIZE 500M;SQL>CREATE TABLE app.tab1 (col1 NUMBER) TABLESPACE app_data;SQL>ALTER TABLE app.tab1 ADD CONSTRAINT pk_tab1 PRIMARY KEY (col1) USING INDEX TABLESPACE app_idx;
总之,Oracle优化器是使用Oracle数据库的关键组成部分。通过它,我们可以优化查询性能,提高企业效益。同时,在优化过程中,我们还需要注意到,选择合适的优化器类型、维护良好的数据库结构以及有效的SQL调优能力,都是重要的实践。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19