热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle分区和性能简析

Oracle分区和性能简析理论上,我们进行表分区都是为了提升性能,加快查询速度。但是有的时候,不但不能加快查询速度,反而拖累的查询速度。下面举的一个例子就是这样的:www.2cto.com假设某一个表是...SyntaxHighlighter.all();

Oracle分区和性能简析
 
  理论上,我们进行表分区都是为了提升性能,加快查询速度。但是有的时候,不但不能加快查询速度,反而拖累的查询速度。下面举的一个例子就是这样的:
   www.2cto.com  
      假设某一个表是按照主键散列分区,创建表如下所示:
 
Sql代码  
create table t  
 ( OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID,  
 OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS,  
 TEMPORARY, GENERATED, SECONDARY )  
 partition by hash(object_id)  
 partitions 16  
 as  
 select * from all_objects;  
      我们经常要在表上面,根据owner 或者 object_type,object_name 或者owner, object_type,object_name进行查询。于是我们想到在这三列上建立一个局部索引。如下所示:
 
Sql代码  
create index t_idx  
on t(owner,object_type,object_name)  
LOCAL  
      运行一个存储过程收集cpu耗用等信息:
 
Sql代码  
begin  
 dbms_stats.gather_table_stats  
 ( user, 'T', cascade=>true);  
 end;  
 /  
      改变几个会话属性,便于允许TKPROF
 
Sql代码  
alter session set timed_statistics=true;  
alter session set events '10046 trace name context forever,level 12';  
      执行如下SQL语句:
 
Sql代码  
select * from t where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP';  
select * from all_objects where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP';  
      查看TKPROF记录的性能日志位置:
 
Sql代码  
select rtrim(c.value,'\') ||'\'||d.instance_name||  
    '_ora_' ||ltrim(to_char(a.spid))||'.trc'  
    from v$process a,v$session b,v$parameter c,v$instance d  
    where a.addr=b.paddr  
    and b.audsid =sys_context('userenv','sessionid')  
    and c.name='user_dump_dest';  
      假如看到这样的输出:D:\ORACLELWS\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_5928.trc
      另外打开一个命令行,输入如下命令解析日志文件
 
Sql代码  
tkprof D:\ORACLELWS\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP\orcl_ora_5928.trc  
      弹出一个output = 要你输入解析日志之后的文件存放的目录,可以填写c:\tk.prof ,必须prof后缀。
      这个时候我们可以用记事本打开tk.prof文件查看上述两条查询SQL语句的性能,我的机器上查看的结果如下
 
Sql代码  
select *   
from  
 t where owner='SCOTT' and object_type = 'TABLE' and object_name = 'EMP'  
  
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
Parse        1      0.00       0.00          0          0          0           0  
Execute      1      0.00       0.00          0          0          0           0  
Fetch        2      0.00       0.00          0         34          0           1  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
total        4      0.00       0.00          0         34          0           1  
  
select *   
from  
 all_objects where owner='SCOTT' and object_type = 'TABLE' and object_name =   
  'EMP'  
  
call     count       cpu    elapsed       disk      query    current        rows  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
Parse        1      0.01       0.01          0          0          0           0  
Execute      1      0.00       0.00          0          0          0           0  
Fetch        2      0.00       0.00          0          8          0           1  
------- ------  -------- ---------- ---------- ---------- ----------  ----------  
total        4      0.01       0.01          0          8          0           1  
     各个字段的意思可以百度一下,我们发现query字段分区是34,不分区是8。query代表I/O操作次数,分区反而增加了I/O操作次数,费力不讨好。这是因为查找条件字段没有包含分区表的分区键,导致每一个表分区都要扫描,也就是每一个索引分区都要扫描,还不如全表扫描来得快。  www.2cto.com  
     如果不创建局部索引,而是建立一个全局索引。效率跟不分区差不多,创建局部分区的sql换成:
 
Sql代码  
create index t_idx  
 on t(owner,object_type,object_name)  
 global  
 partition by hash(owner)  
 partitions 16  
   
    其实,对于OLTP系统,分区对于获取数据没有什么正面影响(基本不能提高查询速度)。相反,我们还有非常小心避免产生负面影响,比如上面那个例子。但是对于高度并发修改的环境,分区则可能提供显著的效果,因为分区避免了数据的冲突,你修改这个分区,他修改那个分区,大大降低了发生冲突的可能性。因此,不要盲目使用分区,分区不一定能够提高性能。
 

推荐阅读
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • 获取贵州省毕节市高分辨率谷歌卫星影像图
    毕节市,作为贵州省西北部的重要地级市,地处乌蒙山脉核心区域,是连接四川、云南和贵州三省的关键节点。本研究旨在获取该地区的高分辨率谷歌卫星影像图,以全面展示其独特的地理特征和城市布局。通过这些高清影像,研究人员能够更深入地分析毕节市的自然环境、城市规划及发展状况。 ... [详细]
  • 如何在Android项目中正确导入和配置MySQL数据库驱动 ... [详细]
  • 在Python编程中,探讨了并发与并行的概念及其区别。并发指的是系统同时处理多个任务的能力,而并行则指在同一时间点上并行执行多个任务。文章详细解析了阻塞与非阻塞操作、同步与异步编程模型,以及IO多路复用技术的应用。通过模拟socket发送HTTP请求的过程,展示了如何创建连接、发送数据和接收响应,并强调了默认情况下socket的阻塞特性。此外,还介绍了如何利用这些技术优化网络通信性能和提高程序效率。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • APP运营推广可选渠道分析:深入探讨安卓系统下的配置选项与策略 ... [详细]
  • Vue项目上线后遇到的问题及解决方案 ... [详细]
  • VC6.0自1998年发布以来,因其轻量级和便捷性,至今仍被许多开发者所青睐。然而,在调试过程中,用户常常面临无法直接终止调试进程的问题,导致需要频繁重启VC6.0以重新加载项目。本文将详细介绍如何高效利用VC6.0的调试工具,包括常用调试技巧和解决调试过程中常见问题的方法,帮助开发者提高调试效率和代码质量。 ... [详细]
  • 对于前端开发新手而言,理解JavaScript模块加载机制常常是一个挑战。本文将深入解析Node.js中的`require`方法及其与RequireJS之间的区别,并探讨它们在不同场景下的应用。通过对比这两种模块加载方式,读者可以更好地掌握如何在项目中选择合适的模块管理工具。此外,文章还提供了实际示例,帮助读者加深对模块化编程的理解。 ... [详细]
  • 通过对计算机系统架构的研究,尤其是控制器CU的功能解析,我对处理器的工作原理有了更深入的理解。原来,机器指令能够被直接识别和执行,是因为其背后有微程序的支持。深入探讨后发现,最基本的不可分割操作实际上是由微指令组成的,这些微指令构成了机器指令的基础,确保了指令的准确执行。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • 进程(Process)是指计算机中程序对特定数据集的一次运行活动,是系统资源分配与调度的核心单元,构成了操作系统架构的基础。在早期以进程为中心的计算机体系结构中,进程被视为程序的执行实例,其状态和控制信息通过任务描述符(task_struct)进行管理和维护。本文将深入探讨进程的概念及其关键数据结构task_struct,解析其在操作系统中的作用和实现机制。 ... [详细]
  • 稳操胜券,35K薪资,字节跳动商业数据分析岗位
    在数字化浪潮中,掌握数据即掌握未来。正如马云在IT领袖峰会上所言:“未来的竞争将是数据的竞争,只有实现业务的数据化和数据的业务化,企业才能在激烈的市场竞争中脱颖而出。”字节跳动的商业数据分析岗位,正是这一趋势的体现,提供35K的薪资,吸引着众多数据精英。 ... [详细]
  • 本文介绍了一种简化版的在线购物车系统,重点探讨了用户登录和购物流程的设计与实现。该系统通过优化界面交互和后端逻辑,提升了用户体验和操作便捷性。具体实现了用户注册、登录验证、商品浏览、加入购物车以及订单提交等功能,旨在为用户提供高效、流畅的购物体验。 ... [详细]
author-avatar
_戒咗微博地_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有