原创 转载请注明出处
(学习笔记) Granule 是ORACLE SGA里面分配内存的最小单位,在NOMOUNT的阶段Granule 就会分配给SGA,Granule 分为3个状态:FREE OR invalid,initialized,allocated 如果我们的SGA小于128MB,Granule为4MB如果我们的SGA大于128MGranule为16MB。同时每个Granule包含BUFFER和BUFFER HEADER,BUFFER HEADER用来悬挂到 cache buffer chain list ,具体的大家可以看看 cache buffer chain 的结构,也就是经常出现的等待事件cache buffer chain 。同时我们可以查看到已经分配的Granule,使用如下语句:
select GRANNUM, GRANTYPE, GRANSTATE, BASEADDR, GRANSIZE, GRANNEXT from x$ksmge;
我配置参数如下
sga_max_size big integer 2400M
sga_target big integer 2272M
SQL> select GRANNUM, GRANTYPE, GRANSTATE, BASEADDR, GRANSIZE, GRANNEXT from x$ksmge;
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
1 0 INVALID 21000000 16777216 0
2 0 INVALID 22000000 16777216 1
3 0 INVALID 23000000 16777216 2
4 0 INVALID 24000000 16777216 3
5 0 INVALID 25000000 16777216 4
6 0 INVALID 26000000 16777216 5
7 0 INVALID 27000000 16777216 6
8 0 INVALID 28000000 16777216 7
9 6 ALLOC 29000000 16777216 0
10 6 ALLOC 2A000000 16777216 9
11 6 ALLOC 2B000000 16777216 12
12 6 ALLOC 2C000000 16777216 13
13 6 ALLOC 2D000000 16777216 14
14 6 ALLOC 2E000000 16777216 15
15 6 ALLOC 2F000000 16777216 16
16 6 ALLOC 30000000 16777216 17
17 6 ALLOC 31000000 16777216 18
18 6 ALLOC 32000000 16777216 19
19 6 ALLOC 33000000 16777216 20
20 6 ALLOC 34000000 16777216 10
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
21 6 ALLOC 35000000 16777216 22
22 6 ALLOC 36000000 16777216 23
23 6 ALLOC 37000000 16777216 24
24 6 ALLOC 38000000 16777216 25
25 6 ALLOC 39000000 16777216 26
26 6 ALLOC 3A000000 16777216 27
27 6 ALLOC 3B000000 16777216 28
28 6 ALLOC 3C000000 16777216 29
29 6 ALLOC 3D000000 16777216 30
30 6 ALLOC 3E000000 16777216 11
31 6 ALLOC 3F000000 16777216 32
32 6 ALLOC 40000000 16777216 33
33 6 ALLOC 41000000 16777216 34
34 6 ALLOC 42000000 16777216 35
35 6 ALLOC 43000000 16777216 36
36 6 ALLOC 44000000 16777216 37
37 6 ALLOC 45000000 16777216 38
38 6 ALLOC 46000000 16777216 39
39 6 ALLOC 47000000 16777216 40
40 6 ALLOC 48000000 16777216 21
41 6 ALLOC 49000000 16777216 42
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
42 6 ALLOC 4A000000 16777216 43
43 6 ALLOC 4B000000 16777216 44
44 6 ALLOC 4C000000 16777216 45
45 6 ALLOC 4D000000 16777216 46
46 6 ALLOC 4E000000 16777216 47
47 6 ALLOC 4F000000 16777216 48
48 6 ALLOC 50000000 16777216 49
49 6 ALLOC 51000000 16777216 50
50 6 ALLOC 52000000 16777216 31
51 6 ALLOC 53000000 16777216 52
52 6 ALLOC 54000000 16777216 53
53 6 ALLOC 55000000 16777216 54
54 6 ALLOC 56000000 16777216 55
55 6 ALLOC 57000000 16777216 56
56 6 ALLOC 58000000 16777216 57
57 6 ALLOC 59000000 16777216 58
58 6 ALLOC 5A000000 16777216 59
59 6 ALLOC 5B000000 16777216 60
60 6 ALLOC 5C000000 16777216 41
61 6 ALLOC 5D000000 16777216 62
62 6 ALLOC 5E000000 16777216 63
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
63 6 ALLOC 5F000000 16777216 64
64 6 ALLOC 60000000 16777216 65
65 6 ALLOC 61000000 16777216 66
66 6 ALLOC 62000000 16777216 67
67 6 ALLOC 63000000 16777216 68
68 6 ALLOC 64000000 16777216 69
69 6 ALLOC 65000000 16777216 70
70 6 ALLOC 66000000 16777216 51
71 6 ALLOC 67000000 16777216 72
72 6 ALLOC 68000000 16777216 73
73 6 ALLOC 69000000 16777216 74
74 6 ALLOC 6A000000 16777216 75
75 6 ALLOC 6B000000 16777216 76
76 6 ALLOC 6C000000 16777216 77
77 6 ALLOC 6D000000 16777216 78
78 6 ALLOC 6E000000 16777216 79
79 6 ALLOC 6F000000 16777216 80
80 6 ALLOC 70000000 16777216 61
81 6 ALLOC 71000000 16777216 82
82 6 ALLOC 72000000 16777216 83
83 6 ALLOC 73000000 16777216 84
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
84 6 ALLOC 74000000 16777216 85
85 6 ALLOC 75000000 16777216 86
86 6 ALLOC 76000000 16777216 87
87 6 ALLOC 77000000 16777216 88
88 6 ALLOC 78000000 16777216 89
89 6 ALLOC 79000000 16777216 90
90 6 ALLOC 7A000000 16777216 71
91 6 ALLOC 7B000000 16777216 92
92 6 ALLOC 7C000000 16777216 93
93 6 ALLOC 7D000000 16777216 94
94 6 ALLOC 7E000000 16777216 95
95 6 ALLOC 7F000000 16777216 96
96 6 ALLOC 80000000 16777216 97
97 6 ALLOC 81000000 16777216 98
98 6 ALLOC 82000000 16777216 99
99 6 ALLOC 83000000 16777216 100
100 6 ALLOC 84000000 16777216 81
101 6 ALLOC 85000000 16777216 102
102 6 ALLOC 86000000 16777216 103
103 6 ALLOC 87000000 16777216 104
104 6 ALLOC 88000000 16777216 105
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
105 6 ALLOC 89000000 16777216 106
106 6 ALLOC 8A000000 16777216 107
107 6 ALLOC 8B000000 16777216 108
108 6 ALLOC 8C000000 16777216 109
109 6 ALLOC 8D000000 16777216 110
110 6 ALLOC 8E000000 16777216 91
111 6 ALLOC 8F000000 16777216 112
112 6 ALLOC 90000000 16777216 113
113 6 ALLOC 91000000 16777216 114
114 6 ALLOC 92000000 16777216 115
115 6 ALLOC 93000000 16777216 116
116 6 ALLOC 94000000 16777216 101
117 4 ALLOC 95000000 16777216 0
118 4 ALLOC 96000000 16777216 117
119 3 ALLOC 97000000 16777216 0
120 2 ALLOC 98000000 16777216 0
121 1 ALLOC 99000000 16777216 0
122 1 ALLOC 9A000000 16777216 121
123 1 ALLOC 9B000000 16777216 122
124 1 ALLOC 9C000000 16777216 123
125 1 ALLOC 9D000000 16777216 124
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
126 1 ALLOC 9E000000 16777216 125
127 1 ALLOC 9F000000 16777216 126
128 1 ALLOC A0000000 16777216 127
129 1 ALLOC A1000000 16777216 128
130 1 ALLOC A2000000 16777216 129
131 1 ALLOC A3000000 16777216 130
132 1 ALLOC A4000000 16777216 131
133 1 ALLOC A5000000 16777216 132
134 1 ALLOC A6000000 16777216 133
135 1 ALLOC A7000000 16777216 134
136 1 ALLOC A8000000 16777216 135
137 1 ALLOC A9000000 16777216 136
138 1 ALLOC AA000000 16777216 137
139 1 ALLOC AB000000 16777216 138
140 1 ALLOC AC000000 16777216 139
141 1 ALLOC AD000000 16777216 140
142 1 ALLOC AE000000 16777216 141
143 1 ALLOC AF000000 16777216 142
144 1 ALLOC B0000000 16777216 143
145 1 ALLOC B1000000 16777216 144
146 1 ALLOC B2000000 16777216 145
GRANNUM GRANTYPE GRANSTATE BASEADDR GRANSIZE GRANNEXT
---------- ---------- ---------------- -------- ---------- ----------
147 1 ALLOC B3000000 16777216 146
148 1 ALLOC B4000000 16777216 147
149 1 ALLOC B5000000 16777216 148
149 rows selected
如果我们计算一下总的Granule大小为: 16*149= 2384MB 我这里有点怀疑LOG_BUFFER是否使用了Granule
LOG_BUFFER 15312896
刚好2384MB+15MB差不多就等于SGA_MAX_SIZE 而如果我们统计
GRANSTATE =‘ALLOC ’ 那就是 16*141=2256MB 基本也和 sga_target差不多。所以通过
select GRANNUM, GRANTYPE, GRANSTATE, BASEADDR, GRANSIZE, GRANNEXT from x$ksmge;
我们可以知道Granule的具体分配情况