首页 > 代码库 > sql优化
sql优化
--绑定变量
OLTP系统中,我们总是希望使用绑定变量将sql语句共享在library cache中,Oracle将根据LRU算法将该语句的相关信息保存在library cache中,这样只有在sql语句第一次被加载时会发生hard parse,之后如果sql语句在library cache中,将会发生fast parse或者soft parse,就不用每次都重新生成解析树和执行计划。
然而,在某些情况下,我们可能又不想使用绑定变量。比如:如果 sql语句的where条件之后的列值在表中分布非常不均匀,在条件是某些值的情况下走全表扫描成本比较低,而另外一些情况下走索引成本比较低,在使用绑定变量的情况下,由于bind peeking技术,在fast parse或soft parse的情况下将会使用第一次硬解析时的执行计划而不会生成新的执行计划,这样将使某些查询陷入困境。
--查询执行sql
select sql_text,hash_value from v$sqlarea where sql_text like ‘select * from test where id%‘ order by first_load_time desc;
--SQL_TRACE
SQL_TRACE是Oracle的一个非常强大的工具。打开SQL_TRACE就可以逐步捕获任何一个会话的数据库活动,或者捕获整个数据库的活动,并将数据库活动记录成跟踪文件。每次使用完之后需要关闭跟踪,否则会降低系统的性能。
--Tkprof
Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,
一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。
--Statspack
Oracle Statspack从Oracle8.1.6被引入,马上成为DBA和oracle专家用来诊断数据库性能的强有力工具。通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所有,记录数据库性能状态,也可以使远程技术人员迅速了解的的数据库运行状况。
--程序优化当中的v$表
--查看事件参数: V$EVENT_NAME
--文件读写的状态:V$FILESTAT 和 V$TEMPSTAT
--锁定了什么对象:V$LOCK
--会话的统计信息:V$MYSTAT
--会话的游标信息 V$OPEN_CURSOR
--优化设置参数:V$PARAMETER
--显示每个会话:V$SESSION
--会话的事件 V$SESSION_EVENT
--监视作业:V$SESSION_LONGOPS
--挂起或等待的事件: V$SESSIO_WAIT
--观察会话: V$SESSTAT
--会话执行的i/o: V$SESS_IO 可以从TKPROF报表
--共享池中所有被分析和存储的 SQL 语句: V$SQL,V$SQLAREA
--统计数字到统计名称的映射:V$STATNAME
--为实例保留统计数字:V$SYSSTAT
--实例级的等待事件信息:V$SYSTEM_EVENT
sql优化