关于oracle 数据库效率的优化

摘要:
最近项目快要快要结束了,我们最终还是要面对我们一直存在的问题,就是数据库查询编码的问题,但是通过各个方面观察我们发现数据库仅仅200w条数据查询议一天的数据也就仅仅不到两万条数据没结果查了将近两分钟,这按章正常状态来讲那是不可能出现的情况,但是经过很久的观察我们还是找到了原因,那就是我们在做sql语句编写的时候那是不合理的接下来我就给大家罗列一下相关情况。下面对数据库资源占用的比例相关的sql查询语句。

最近项目快要快要结束了,我们最终还是要面对我们一直存在的问题,就是数据库查询编码的问题,但是通过各个方面观察我们发现数据库仅仅200w条数据查询议一天的数据也就仅仅不到两万条数据没结果查了将近两分钟,这按章正常状态来讲那是不可能出现的情况,但是经过很久的观察我们还是找到了原因,那就是我们在做sql语句编写的时候那是不合理的 接下来我就给大家罗列一下相关情况。

1.用like查询数据

原来在查询数据时候喜欢用like 来进行模糊查询虽然方便但是机器影响效率 l例如 select * from bf1_histrinan where hs_date_time like (tochar(sysdate,'yyyy-mm-dd')||‘%’

后来改成了select * from bf1_histrinan where hs_date_time =substr(hs_date_time,1,10),去除了模糊查询的方法

2.喜欢书写dual 语句

许多人在书写查询时间时候喜欢用select sysdate into time from dual这种方法来查询当前时间,但是往往忽略了用赋值的方法来解决问题

比如 time:=这种方式

3.在存储过程中对输出语句不处理

我们在写存储过程时间为了方便查看数据是否和我们预期的一样,我们比较喜欢写一个例:DBMS_OUTPUT.put_line (***);这样的输出数据,但是在我们测试结束后往往总是忘记吧这个输出语句进行删除。

以上我i们遇到的问题对oracle 中IO的消耗是很大的。

也许我所写到的东西有些问题还请大家能够多多指导,只希望我写的这些东西对大家能有所帮助。下面对数据库资源占用的比例相关的sql查询语句。

1.从V$SQLAREA中查询最占用资源的查询

select b.username username,a.disk_reads reads,
a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
from v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000
order by a.disk_reads desc;
2.用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。
V$SQL是内存共享SQL区域中已经解析的SQL语句。
列出使用频率最高的5个查询:
select sql_text,executions
from (select sql_text,executions,
rank() over
(order by executions desc) exec_rank
from v$sql)
where exec_rank <=5;
3.消耗磁盘读取最多的sql top5
select disk_reads,sql_text
from (select sql_text,disk_reads,
dense_rank() over
(order by disk_reads desc) disk_reads_rank
from v$sql)
where disk_reads_rank <=5;
4.找出需要大量缓冲读取(逻辑读)操作的查询:
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank<=5;

免责声明:文章转载自《关于oracle 数据库效率的优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇.NET(c#) 移动APP开发平台SAS | 数据读入思路及代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle定义varchar2()类型存储汉字的长度问题

varchar2最大是4000字节,那么就看你的oracle字符集:(select userenv('language') from dual;)如果字符集是16位编码的,ZHS16GBK,那么每个字符16位,2字节,所以可以容纳2000字符。如果是32位编码的字符集,那么只能存储 1000个字符。 例如:varchar(50) 表示该字段类型为varc...

layui select动态添加option

<form class="layui-form" action=""> <div class="layui-form-item proSelect"> <label class="layui-form-label">产品类别</label> <div...

Oracle 数据库常用SQL语句(2)查询语句

一、SQL基础查询 1、select语句 格式:select 字段 from 表名; 2、where 用于限制查询的结果。3、查询条件 > < >= <= = !=4、与 或(AND,OR)5、在 不在(IN,NOT IN)练习:查询工号为1,9,11,16且工资低于1000的员工。6、在 [a,b] (between val1 a...

oracle创建用户、授予权限及删除用户

创建用户 oracle对表空间 USERS 无权限 alter user 用户名 quota unlimited on users; //创建临时表空间 create temporary tablespace test_temp tempfile 'E:/oracle/product/10.2.0/oradata/testserver/test_tem...

日期选择器(Query+bootstrap和js两种方式)

日期选择是在下拉列表中选择年、月、日,年显示前后的五年,12个月,日就是有30、31、29、28天的区别,随着月份的变而变 一、js方式的日期选择 (1)首先就是三个下拉列表了,点击年、月、日显示列表中的内容,这样就是要给这三个列表加“点击事件”onclick <select onclick="biantian()"></select...

SQL[连载2]语法及相关实例

SQL[连载2]语法及相关实例 SQL语法 数据库表 一个数据库通常包含一个或多个表。每个表由一个名字标识(例如:"Websites"),表包含带有数据的记录(行)。 在本教程中,我们在 MySQL 的 RUNOOB 数据库中中创建了 Websites 表,由于存储网站记录。 我们可以通过以下命令查看 "Websites" 表的数据: mysql>...