iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >基于成本的优化--CBO
  • 646
分享到

基于成本的优化--CBO

2024-04-02 19:04:59 646人浏览 薄情痞子
摘要

选择CBO的优化方式 默认条件下,CBO将sql语句的吞吐量作为优化目标 三种不同的优化方式 ALL_ROWS :该优化方式是oracle的默认模式,优化目标是实现查询的最大吞吐量

选择CBO的优化方式
		默认条件下,CBO将sql语句的吞吐量作为优化目标
		
		三种不同的优化方式
			ALL_ROWS	:该优化方式是oracle的默认模式,优化目标是实现查询的最大吞吐量

			FIRST_ROWS_n:该优化方式使用CBO的成本优化输出查询的前n行数据,目标是以满足快速相应的查询需求,

			FIRST_ROWS  :该方式是FIRST_ROWS_n优化方式的老版本,作用是使用CBO的成本优化尽快输出查询的前几行数据,满足最小相应时间的需求

	查询当前数据库的CBO优化方式
		show parameter optimizer_mode

	在实例级设置优化方式
		alter system set optimizer_mode = FIRST_ROWS_10 scope=spfile

	在会话级设置优化方式
		alter session set optimizer_mode=ALL_ROWS

	会话级上设置优化方式必须使用hint提示
		select  ename,sal,mgr
		from scott.emp

	优化器工作过程
		步骤
			1.SQL转换
				在CBO优化中,一个SQL语句往往被转换成另一种表达形式,这个转换的基础是CBO认为转换后的查询会更有效

			2.确定访问路径
				一个SQL查询中对数据的访问的路径要根据访问这些数据消耗的资源来判断,在多个查询路径中选择计算成本最小的一个。

			3.确定联结方式
				在SQL语句中涉及多个表时,CBO会根据统计数据以及表的键的信息来选择连接方式,在多个连接方法中选择计算成本最低的一个作为最佳连接方法

			4.确定联结次序
				CBO会对不同的连接次序中进行计算以选择最好的执行计划。

		自动统计数据
			查看GATHER_STATS_JOB状态
				select job_name,state,owner
				from dba_scheduler_jobs;

			通过数据字典DBA_TABLES查询用户SCOTT拥有表的统计分析情况
				select last_analyzed,table_name,owner,num_rows,sample_size
				from dba_tables
				where owner='SCOTT'

		手动统计数据库数据
			DBMS_STATS
				存储过程
					GATHER_DATABASE_STATS	        为全库中的表统计数据
					GATHER_SCHEMA_STATS		为某个模式统计数据
					GATHER_TABLE_STATS		为某个特定的表统计数据
					GATHER_INDEX_STATS		为某个索引表统计数据

				上述统计数据保存在 DBA_TAB_STATISTICS 和 DBA_TAB_COL_STATISTICS 

			为模式SCOTT的所有表统计数据
				execute DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'SCOTT');

			验证模式SCOTT的数据统计成功
				select last_analyzed,table_name,owner,num_rows,sample_size
				from dba_tables
				where owner='SCOTT'

			为模式SCOTT用户的表EMP统计数据
				execute DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP');
			
			为DEPT的索引统计数据
				execute DBMS_STATS.GATHER_INDEX_STATS('SCOTT','PK_DEPT')

			手工收集数据库级别的统计数据-----需要对初始化参数JOB_QUEUE_PROCESSES设置一个非0值
				execute DBMS_STATS.GATHER_DATABASE_STATS(estimate_percent=>null)

				查询表的统计数据 		DBA_TAB_STATISTICS
				查询表的列的统计数据	        DBA_TAB_COL_STATISTICS

		统计OS数据
			DBMS_STATS.GATHER_SYSTEM_STATS			SYS.AUX_STAST$

			无负载方式下收集10分钟的系统统计数据	
				execute DBMS_STATS.GATHER_SYSTEM_STATS('NOWORKLOAD',10)

			收集系统统计数据
				execute DBMS_STATS.GATHER_SYSTEM_STATS('start')

				execute DBMS_STATS.GATHER_SYSTEM_STATS('stop')
				每三分钟执行一次

			查询统计的系统数据
				select * from SYS.AUX_STAST$;

		手工统计字典数据---具备SYSDBA权限
			收集固定字典表的统计数据
				execute DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

			收集数据字典表的统计数据
				execute DBMS_STATS.GATHER_DIRECTORY_STATS;
                        /
			使用过程GATHER_SCHEMA_STATS统计数据字典数据
				execute DBMS_STATS.GATHER_SCHEMA_STATS('sys')
				
	主动优化SQL语句
		SQL语句优化工具
			1.使用EXPLAN FOR 指令
				utlxplan.sql
				执行脚本---生成PLAN_TABLE表
					@?/rdbms/admin/utlxplan.sql

				通过EXPLaiN PLAN FOR 指令分析SQL语句的执行计划
					explain plan for select count(*) from scott.emp;

				查看表 PLAN_TABLE 中SQL语句执行计划信息

					col if for 999
					col operation for a20
					col options for a20
					col object_name for a20
					select id,operation,options,object_name,position
					from PLAN_TABLE
					OPERATION 	:为TABLEACCESS说明该步骤的行为是访问表
					OPTIONS 	:为FULL,说明全表扫描访问表
					OBJECT_NAME :说明行为的对象为表EMP

			使用AUTOTRACE指令------SQL_TRACE=TRUE
				设置参数 SQL_TRACE 启动SQL语句追踪
					alter system set SQL_TRACE = TRUE;
					



                                使用AUTOTRACE追踪SQL语句执行计划
					set autotrace traceonly 
					select count(*) from scott.emp

                                                    基于成本的优化--CBO

					recursive calls                       递归调用的次数
					db block gets                         读数据块的数量
					consistent gets                       总的逻辑I/O 
					physical reads                        物理I/O 
					redo size                             重做数量
					bytes sent via SQL*Net to client      SQL*Net通信
					bytes received via SQL*Net from client
					SQL*Net roundtrips to/from client     
					sorts (memory)                        内存排序统计
					sorts (disk)                          磁盘排序统计
					rows processed                        被检索的行数
				关闭AUTOTRACE
					set autotrace OFF
					
					
			启动 SQL Trace的前提
			   1.statistics_level: TYPICAL / ALL
			   						BASE 

			   2.timed_statistics:	TRUE   -----BASE
			   						False	-----TYPICAL / ALL

			   3.user_dump_dest:	该参数存储SQL语句的追踪文件。

			   (max_dump_file_size)

			启动SQL Trace追踪
				实例级启动SQL Trace追踪
					alter system set SQL_TRACE=TRUE

				会话级启动SQL Trace追踪
					alter session set SQL_TRACE=TRUE
					/
					begin
					sys.dbms_session.set_sql_trace(TRUE);
					end;
					
			使用 TKPPOF 解释 SQL Trace文件
				
				执行sql查询
				使用TKPPOF工具格式化SQL追踪文件
					TKPPOF  xxxxxxxx.trc xxxx.txt sys=no
					
				格式化参数的含义
				count	:不同执行阶段所读取的数据块数量
				cpu     :不同执行阶段消耗的CPU时间,单位是秒
				elapsed :执行用掉的时间
				disk    :物理磁盘数据读操作数目
				query   :一致的缓冲区读取数量
				current :数据库块读取的数量
				call    :该参数说明SQL语句的不同执行阶段 										


消除子查询优化SQL语句
	对查询用户scott的emp表进行嵌套子查询
		select * 
		from scott.emp e1
		where e1.sal>
		(select avg(sal)
			from scott.emp e2
			where e2.deptno=e1.deptno)
	开启AUTOTRACE功能
		set autotrace traceonly
	跟踪SQL语句的执行
		select * 
		from scott.emp e1
		where e1.sal>
		(select avg(sal)
			from scott.emp e2
			where e2.deptno=e1.deptno)

基于成本的优化--CBO

	跟踪改写的SQL语句
	  使用联机视图改写子查询
		select * from scott.emp e1,(select e2.deptno deptno ,avg(e2.sal) avg_sal 
		from scott.emp e2 group by deptno ) dept_avg_sal
		where e1.deptno = dept_avg_sal.deptno
		and e1.sal > dept_avg_sal.avg_sal

基于成本的优化--CBO

	被动优化SQL语句
		使用分区表
		    使用表和索引压缩
		            创建压缩表
					create table compress_emp 
					compress 
					tablespace users 
					as select * from scott.emp

				查询是否成功创建压缩表	compress_emp
					select table_name,tablespace_name,compression
					from user_tables
					where table_name like 'COMPRESS%';

				创建压缩索引
					create index compress_emp_ename_idx
					on compress_emp(ename)
					compress;
					
		保持CBO的稳定性
			1.创建存储大纲的前提
				初始化参数
					QUERY_REWRITE_ENABLED = TRUE
					STAR_TRANSFORMATION_ENABLED = TRUE

				验证系统师傅具备创建存储大纲的前提
					show paameter QUERY_REWRITE_ENABLED;
					show paramter STAR_TRANSFORMATION_ENABLED;
					show parameter optimizer_features_enable;

			2.创建存储大纲
					创建数据库级的存储大纲
						alter system set create_stored_outlines = TRUE

					创建会话级的存储大纲
						alter session set create_stored_outlines = TRUE

						为特定SQL语句创建存储大纲
							create outline emp_outline
							on
							select * 
							from scott.emp
							tablespace oltbs;

						查询EMP_OUTLINE创建信息
							select ol_name,sql_text,creator,timestamp
							from ol$
							where ol_name like 'EMP%'

						查询Oracle自动生产的存储大纲的名字
							set lines 120
							select ol_name,sql_text
							from ol$

			3.删除存储大纲
					删除存储大纲-----sysdba
						drop outline emp_outline
						
			4.启用存储大纲
					修改参数 USE_STORED_OUTLINES 为TRUE
						alter system set USE_STORED_OUTLINES= TRUE


您可能感兴趣的文档:

--结束END--

本文标题: 基于成本的优化--CBO

本文链接: https://www.lsjlt.com/news/37161.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于成本的优化--CBO
    选择CBO的优化方式 默认条件下,CBO将SQL语句的吞吐量作为优化目标 三种不同的优化方式 ALL_ROWS :该优化方式是Oracle的默认模式,优化目标是实现查询的最大吞吐量 ...
    99+
    2022-10-18
  • RBO和CBO的基本概念
    转自潇湘隐者 出处:http://www.cnblogs.com/kerrycode/p/3842215.html Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是S...
    99+
    2022-10-18
  • Hive中如何基于成本进行优化
    小编给大家分享一下Hive中如何基于成本进行优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基于成本的优化Hive在提交最终执行之前会优化每个查询的逻辑和物理执...
    99+
    2023-06-04
  • MySQL基于规则优化
    条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测 外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以...
    99+
    2016-07-05
    MySQL基于规则优化
  • 基于MySQL 的 SQL 优化总结
    在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率。 目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL 逻辑优化、索引优化等。其中索...
    99+
    2017-06-28
    基于MySQL SQL 优化总结
  • mongodb优化基本方案
    1 创建索引在查询或排序字段上创建索引,可以提高查询效率  2 限制返回结果数使用limit限制返回结果集的大小 3 只查询使用到的字段,不查询所有字段 ...
    99+
    2022-10-18
  • 基于Python 优化 MUI标题栏
    目录一、前言二、问题描述三、解决方案1.  创建一个带返回键标题栏2.更改标题栏的背景颜色3.更改标题栏的字体颜色4.更改标题栏的字体四、结语本文转自微信公众号:"算法与编...
    99+
    2022-11-12
  • 基于最优化原理的组合优化问题解法
    作者:禅与计算机程序设计艺术 1.简介 一、需求背景 在日常生活中,许多决策都需要综合考虑多个因素的影响,比如选择出行方式、取餐点、购买商品等等。而每个决定对最终结果有着极其重要的作用。因此,如何合...
    99+
    2023-09-27
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 基于Android本地代码生成器详解
    在使用AndroidNDK开发的时候有个事情是很烦人的,那就是创建本地代码文件夹,生成本地代码文件和创建本地代码的编译文件。特别是实现本地方法的时候,也是比较烦人的,因为本地方...
    99+
    2022-06-06
    代码生成器 生成器 Android
  • 云服务器成本优化
    云服务器成本优化是一项持续不断的任务,以下是一些可能有助于降低云服务器成本的方法: 使用更大的带宽:为了降低服务器成本,确保云服务器能够处理大量的数据,可以尝试使用更多的带宽来处理更多的数据,这可以减少网络流量并提高带宽利用率。 降低硬...
    99+
    2023-10-26
    成本 服务器
  • 机器学习基础13-基于集成算法优化模型(基于印第安糖尿病 Pima Indians数据集)
    有时提升一个模型的准确度很困难。如果你曾纠结于类似的问题,那 我相信你会同意我的看法。你会尝试所有曾学习过的策略和算法,但模型正确率并没有改善。这时你会觉得无助和困顿,这也是 90%的数据科学家开始放弃的时候。不过,这才是考验真本领的时...
    99+
    2023-08-30
    机器学习 算法 人工智能 python scikit-learn
  • SQL优化之基于SQL特征的改写
    前言今天老K继续与大家分享第九期。周末老K宅在家观战了两局精彩的“人狗”大战。老K既算不上科技迷,也算不上围棋迷,不过对此颇有感触:阿尔法狗不过是通过左右互博的方式不断学习围棋,然而依赖其最优的学习算法(学...
    99+
    2022-10-18
  • 基于vue-cli的webpack打包优化案例
    这篇文章主要介绍基于vue-cli的webpack打包优化案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、准备工作:测速与分析bundle既然我们要优化webpack打包,肯定...
    99+
    2022-10-19
  • SD-WAN的优势不只限于节省成本
    毫无疑问,SD-WAN为连接到分支机构和其他远程站点提供了一种经济有效的方法。然而,在所有节省下来的资金中,SD-WAN所提供的许多好处,远远超过了传统广域网。还在为过渡到SD-WAN的问题犹豫不决嘛以下是这项技术的关键优势。灵活性实际上,...
    99+
    2023-06-03
  • join 优化的基本原则有哪些
    这篇文章给大家分享的是有关join 优化的基本原则有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、join 优化的基本原则:  ...
    99+
    2022-10-18
  • 基于百万数据max函数优化
    ...
    99+
    2022-10-18
  • 基于Laravel5框架的PHP程序怎么优化
    这篇文章主要讲解了“基于Laravel5框架的PHP程序怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Laravel5框架的PHP程序怎么优化”吧!1. 配置信息缓存使用以下 A...
    99+
    2023-07-04
  • 基于Vue中SEO优化的方案有哪些
    这篇文章将为大家详细讲解有关基于Vue中SEO优化的方案有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:众所周知,Vue SPA单页面应用对SEO不友好,当然也...
    99+
    2022-10-19
  • 基于JavaScript概括浏览器方向的优化
    目录一、前言二、高谈阔论:“一字一图”三、具体落地:一个 link 标签四、写在后面一、前言 再过半个月,Internet Explorer 就正式退役了,曾...
    99+
    2022-11-13
  • 如何进行基于jenkins+kubernets+docker的持续化集成
    这篇文章将为大家详细讲解有关如何进行基于jenkins+kubernets+docker的持续化集成,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。项目实现效果,开发人员在gitlab上传代码...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作