sort_area_size参数的一些表现

简介:
我们来看看该sort_area_size参数对创建索引时排序的具体影响:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
SQL>  select  from  v$version;
 
BANNER
----------------------------------------------------------------
Oracle  Database  10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS  for  Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
 
/* 测试使用版本10.2.0.4 */
 
SQL> archive log list;
Database  log mode               No  Archive Mode
Automatic archival             Disabled
Archive destination            /s01/arch
Oldest online log  sequence      27
Current  log  sequence            34
 
/* 为了不受影响我们采用非归档模式 */
 
SQL> conn maclean/maclean
Connected.
 
SQL>  alter  session  set  workarea_size_policy=MANUAL;
Session altered.
 
/* 只有使用手动PGA管理时sort_area_size等参数才生效 */
 
SQL>  alter  session  set  db_file_multiblock_read_count=128;
Session altered.
 
/* 加大多块读参数帮助我们节约时间 */
 
SQL>  alter  session  set  "_sort_multiblock_read_count" =128;
Session altered.
 
/* 10g中sort_multiblock_read_count成为隐式参数,我们尝试手动固定它 */
 
SQL>  set  timing  on ;
 
SQL>  alter  session  set  events  '10032 trace name context forever ,level 10' ;
Session altered.
Elapsed: 00:00:00.00
 
/* 在session级别设置10032事件,该事件帮助输出排序相关的统计信息*/
 
SQL>  drop  index  ind_youyus;
alter  session  set  sort_area_size=1048576;
alter  session  set  sort_area_size=1048576;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* 注意10g目前存在一个bug,sort_area_size需要手动设置2次方能生效,否则无效! */
 
create  index  ind_youyus  on  youyus(t1,t2) nologging;
Index  dropped.
 
Elapsed: 00:00:00.07
SQL>
Session altered.
 
Elapsed: 00:00:00.00
SQL>
Session altered.
 
Elapsed: 00:00:00.00
SQL>
Index  created.
 
Elapsed: 00:00:35.70
 
/* 以下为对应创建索引排序的10032 trace * /
 
---- Sort Parameters ------------------------------
sort_area_size                    1048576
sort_area_retained_size           1048576
sort_multiblock_read_count        29
max  intermediate merge width      2
*** 2010-09-09 21:15:52.703
---- Sort Statistics ------------------------------
Initial runs                              1
Input records                             10000001
Output  records                            10000001
Disk blocks 1st pass                      58690
Total disk blocks used                    58692
Total number  of  comparisons performed     10104798
   Comparisons performed  by  in -memory sort 10098798
   Comparisons while searching  for  key  in -memory 6000
Temp  segments allocated                   1
Extents allocated                         459
Uses version 2 sort
Does  not  use asynchronous IO
     ---- Run Directory Statistics ----
Run directory block reads (buffer cache)  2
Block pins ( for  run directory)            1
Block repins ( for  run directory)          1
     ---- Direct Write Statistics -----
Write slot  size                            49152
Write slots used during  in -memory sort    2
Number  of  direct writes                   10011
Num blocks written ( with  direct write)    58690
Block pins ( for  sort records)             58690
Cached block repins ( for  sort records)    667
     ---- Direct Read Statistics ------
Size  of  read  slots  for  output              524288
Number  of  read  slots  for  output            2
Number  of  direct sync reads               58627
Number  of  blocks  read  synchronously       58690
---- End of Sort Statistics -----------------------
 
/* 可以看到这里实际的sort_multiblock_read_count是29,而非我们设置的128,而 max  intermediate merge width最大中间运行合并宽度为2;我们知道实际的SMRC有公式 MIN (ROUND(SORT_AREA_SIZE/(2*2*BLOCK_SIZE))-1, _sort_multiblock_read_count)= MIN (32-1,128)=31,而此处的实际值为29; merge width = ROUND(SORT_AREA_SIZE/(2*SMRC*BLOCK_SIZE))-1= round( 1048576/(2*29*8k))-1= round(2.2)-1=2-1=1;看起来实际的公式有所修正。*/
 
SQL>  drop  index  ind_youyus;
alter  session  set  sort_area_size=524288000;
alter  session  set  sort_area_size=524288000;
create  index  ind_youyus  on  youyus(t1,t2) nologging;
 
Index  dropped.
 
Elapsed: 00:00:00.04
SQL>
Session altered.
 
Elapsed: 00:00:00.00
SQL>
Session altered.
 
Elapsed: 00:00:00.00
SQL>
 
Index  created.
Elapsed: 00:00:36.82
 
---- Sort Parameters ------------------------------
sort_area_size                    524288000
sort_area_retained_size           524288000
sort_multiblock_read_count        128
max  intermediate merge width      225
*** 2010-09-09 21:32:06.517
---- Sort Statistics ------------------------------
Initial runs                              2
Number  of  merges                          1
Input records                             10000001
Output  records                            10000001
Disk blocks 1st pass                      58690
Total disk blocks used                    58692
Total number  of  comparisons performed     17571986
   Comparisons performed  by  in -memory sort 10098438
   Comparisons performed during merge      7473532
   Comparisons while searching  for  key  in -memory 16
Temp  segments allocated                   1
Extents allocated                         459
Uses version 2 sort
Does  not  use asynchronous IO
     ---- Run Directory Statistics ----
Run directory block reads (buffer cache)  3
Block pins ( for  run directory)            1
Block repins ( for  run directory)          2
     ---- Direct Write Statistics -----
Write slot  size                            1048576
Write slots used during  in -memory sort    50
Number  of  direct writes                   460
Num blocks written ( with  direct write)    58690
Block pins ( for  sort records)             58690
Cached block repins ( for  sort records)    1
     ---- Direct Read Statistics ------
Size  of  read  slots  for  output              1048576
Number  of  read  slots  for  output            500
Number  of  direct sync reads               58563
Number  of  blocks  read  synchronously       58690
---- End of Sort Statistics -----------------------
 
/* 10g中引入了新的排序算法, 排序初始化运行完成后,会保存初始数据集的键值到内存中,在进行数据集进行合并时,会根据键值来选择数据集。从trace文件中可以看到这样的统计信息:Comparisons while searching  for  key  in -memory 16;*/
 
/* 可以看到write slot的大小也随sort_area_size变化,sort_area_size增大的同时Number  of  direct writes由10011次下降到460次,此外 read  slots的总大小(524288*2=1048576=sort_area_size,1048576*500=sort_area_size) */
 
/* 在合并merge阶段,因为读取缓存足够大,因此合并次数下降到1 */

to be continued ..............


本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277650


相关文章
|
3月前
【Simulink】报错:Size mismatch (size [2 x 1] ~= size [1 x 1]). The size to the left is the size of the l
【Simulink】报错:Size mismatch (size [2 x 1] ~= size [1 x 1]). The size to the left is the size of the l
|
29天前
|
前端开发
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
10 0
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
151 0
|
存储 人工智能 前端开发
动态尺寸模型优化实践之Shape Constraint IR Part II
在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作,Part II 中我们将介绍shape constraint IR的设计,实现以及一些初步的实验结果
|
人工智能 编译器 云计算
动态尺寸模型优化实践之Shape Constraint IR Part I
在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考。本次分享的是我们最近开展的有关shape constraint IR的工作,Part I 中我们将介绍问题的背景,面临的主要挑战和以及我们做shape constraint IR的动机。
|
Windows
3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world
三维模型,虽然淘宝上一抓一大把,但是三维开发人员最好还是具备一定基础的建模能力。本文用hello world模型描述基本的3dMax建模流程。
3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world
min_free_kbytes 设置案例问题解析
LINUX tmpfs 空间使用未达到100% , 内存也未占满。 执行任何命令提示 bash: fork: Cannot allocate memory 过几秒时间系统会自动重启。
min_free_kbytes 设置案例问题解析