关闭

浅谈Oracle优化排序的操作

发表于:2009-5-06 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

  概念

  服务器首先在sort_area_size指定大小的内存区域里排序,如果所需的空间超过sort_area_size,排序会在临时表空间里进行。在专用服务器模式下,排序空间在PGA中,在共享服务器模式下,排序空间在UGA中。如果没有建立large pool,UGA处于shared pool中,如果建立了large pool,UGA就处于large pool中,而PGA不在sga中,它是与每个进程对应单独存在的。

  PGA:program global area,为单个进程(服务器进程或后台进程)保存数据和控制信息的内存区域。PGA与进程一一对应,且只能被起对应的进程读写,PGA在用户登录数据库创建会话的时候建立。

  1、有关排序空间自动管理的两个参数:

  Pga_aggregate_target: 10M-4000G,等于分配给oracle instance的所有内存减去SGA后的大小。

  Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定义时才能设置为auto。

  这两个参数会取代所有的*_area_size参数。

  措施:

  尽可能避免排序;尽可能在内存中排序;分配合适的临时空间以减少空间分配调用。

  2、需要进行排序的操作:

  A、创建索引;

  B、涉及到索引维护的并行插入

  C、order by或者group by(尽可能对索引字段排序)

  D、Distinct

  E、union/intersect/minus

  F、sort-merge join

  G、analyze命令(仅可能使用estamate而不是compute)

  3、诊断和措施

  Select * from v$sysstat where name like ‘%sort%’;

  Sort(disk):要求Io去临时表空间的排序数目

  Sort(memory):完全在memory中完成的排序数目Sort(rows):被排序的行数合计Sort(disk)/ Sort(memory)<5%,如果超过5%,增加sort_area_size的值。

  SELECT disk.Value disk,mem.Value mem,(disk.Value/mem.Value)*100 ratio

  FROM v$sysstat disk,v$sysstat mem WHERE mem.NAME='sorts (memory)' AND disk.NAME='sorts (disk)';

  4、监控临时表空间的使用情况及其配置 

Selecttablespace_name,current_users,total_extents,used_extents,extent_hits,max_used_blocks,max_sort_blocks

  FROM v$sort_segment ;

  临时表空间的配置:

  A、initial/next设置为sort_area_size的整数倍,允许额外的一个block作为segment的header

  B、pctincrease=0

  C、基于不同的排序需要建立多个临时表空间

  D、将临时表空间文件分散到多个磁盘上

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号