[ linux-007 ] Oracle查询慢优化(1)

294 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情

本文总结基于oracle数据库系统,如果遇到页面查询慢的相关优化措施

方案01

设计时type拆成多张统计表,减少每张表的数据量

方案02

使用其他内存数据库来存储,例如redis

方法03

分区表 或者 合适的索引(表空间被切割成了多份,跨区查找慢) 将表中的数据在物理上存放到多个表空间上。这样在查询数据时,会查询相应分区的数据,避免了全表扫描

我有一张表每个分区在3000W行的数据,总共大约有50个分区左右, 每次的查询语句基本是固定的,除了时间会改变之外,其余的基本没有什么改变,单个分区的数据查询时间大约为4分钟,分区是按照时间来做分区的,但是一旦跨两个分区的查询几乎要15-20分钟才能查询出来数据

方法04

oracle服务器本身登录等都卡顿,更换新服务器(改善不大,但可以使用toad了)

方法05

swap交换空间大小和参数调整

方法06

temp临时表空间文件使用内存盘

  • tmpfs这个只需要mount挂载就可以分配一个目录使用内存了,只是一个目录
  • ramdisk这个是真的分配一个空间,这个分区是可以格式化的(这个格式化是关键)
  • tmpfs卸载再挂载数据会消失,ramdisk卸载再挂载数据还在
  • 二者共同点是,系统重启后,里面的东西会消失

方法07

连接数设置 alter system set processes=1000 scope=spfile;

alter system set sessions=1000 scope=spfile;

修改processes和sessions值必须重启oracle服务器才能生效

ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:

sessions=(1.1*process+5)

总结

以上几个手段是比较常规的优化oracle手段,我们可以使用toad工具来配合我们的分析,找到最消耗资源的任务,分析为什么会对oracle查询造成如此大的压力,然后根据业务场景,对oracle语句进行优化,这样一般来说可以提高查询效率,解决web页面查询卡顿的问题,所以我们需要对问题进行深入思考,从各个不同的维度去分析可能原因,然后逐一验证