Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2011, 11h02   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 60
Points : 12
Points : 12
Par défaut Question concernant le partitioning

Bonjour à tous et merci d'avance à ceux qui vont répondre.
En Oracle 11g, si je créé une table avec x partitions sur des dates plus une par défaut que j'insère un volume assez conséquent de données ne contenant pas de valeur sur la clef de partition (Null) les données vont aller dans la partition par défaut. Si plus tard je fais un update massif (where clef_partition is null) ces données pour renseigner la clef de partition quel sera l'impact sur les perfs tant en select que lors de l'update?
Vince7-7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2011, 12h09   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
L'intérêt des partitions est de classer les données de façon à accélérer les INSERT / SELECT.

Idéalement, une clef de partition est renseignée et immuable.

Maintenant, c'est possible, j'imagine qu'il y aura un coût en terme de performance bien entendu.

Une discussion sur OTN :
http://forums.oracle.com/forums/thre...hreadID=604182
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 10h26   #3
Membre confirmé
 
Inscription : mai 2006
Messages : 178
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 178
Points : 210
Points : 210
Tu peux éventuellement stocker tes données pour lesquelles la clé de partitionnement n'est pas renseignée. Quand tu as l'info, tu mets à jour les données et sur les insères dans la table partitionnée par un insert into (select ...).
Drawingrom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 11h09   #4
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
Bonjour, je dirai que utiliser les Null est une bonne solution si la colonne de partition n'est pas indexée.
Voila ma démonstration :
vous pouvez remarquer que le cout de CPU dans le cas des Null est moins bas que le cas ou la partition est renseignée....
Code :
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
 
 
SQL> connect wissem
Enter password: 
Connected.
SQL> 
SQL> CREATE TABLE test_part_perf (
  id           NUMBER,
  created_month         VARCHAR2(10),
  description  VARCHAR2(50),
  created_date DATE
)
PARTITION BY LIST (created_month)
(
 PARTITION part_aa VALUES ('201101'),
 partition part_bb VALUES ('201102'),
 partition part_cc VALUES (NULL)
) 
TABLESPACE EXAMPLE;  2    3    4    5    6    7    8    9   10   11   12   13  
 
TABLE created.
 
SQL> 
 
SQL> BEGIN
FOR i IN 1..10000 loop
INSERT INTO test_part_perf VALUES (i, '201101',NULL,to_date('20110101','YYYYMMDD'));                  
end loop;
commit;
end;  2    3    4    5    6  
  7  /
 
PL/SQL procedure successfully completed.
 
SQL> BEGIN
FOR i IN 1..5000 loop
INSERT INTO test_part_perf VALUES (i, '201102',NULL,to_date('20110201','YYYYMMDD'));                  
end loop;
commit;
end;  2    3    4    5    6  
  7  /
 
PL/SQL procedure successfully completed.
 
SQL> BEGIN
FOR i IN 1..20000 loop
INSERT INTO test_part_perf VALUES (i, NULL,NULL,to_date('20110101','YYYYMMDD'));                  
end loop;
commit;
end;  2    3    4    5    6  
  7  /
 
PL/SQL procedure successfully completed.
 
SQL> 
 
SQL> EXPLAIN plan FOR
SELECT count(*)
FROM test_part_perf 
WHERE created_month= '201101';  2    3    4  
 
Explained.
 
SQL> SELECT * FROM TABLE(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1186165449
 
--------------------------------------------------------------------------------
-------------------------
 
| Id  | Operation	       | Name		| Rows	| Bytes | Cost (%CPU)| T
ime	| Pstart| Pstop |
 
--------------------------------------------------------------------------------
-------------------------
 
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |		|     1 |     7 |    11   (0)| 0
0:00:01 |	|	|
 
|   1 |  SORT AGGREGATE        |		|     1 |     7 |	     |
	|	|	|
 
|   2 |   PARTITION LIST SINGLE|		| 10000 | 70000 |    11   (0)| 0
0:00:01 |     1 |     1 |
 
|   3 |    TABLE ACCESS FULL   | TEST_PART_PERF | 10000 | 70000 |    11   (0)| 0
0:00:01 |     1 |     1 |
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
-------------------------
 
 
Note
-----
   - dynamic sampling used FOR this statement (level=2)
 
14 rows selected.
 
SQL> 
 
SQL> --- utiliser
EXPLAIN plan FOR
SELECT count(*)
FROM test_part_perf 
WHERE created_month IS NULL;SQL>   2    3    4  
 
Explained.
 
SQL> SELECT * FROM TABLE(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1186165449
 
--------------------------------------------------------------------------------
-------------------------
 
| Id  | Operation	       | Name		| Rows	| Bytes | Cost (%CPU)| T
ime	| Pstart| Pstop |
 
--------------------------------------------------------------------------------
-------------------------
 
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |		|     1 |     7 |    17   (0)| 0
0:00:01 |	|	|
 
|   1 |  SORT AGGREGATE        |		|     1 |     7 |	     |
	|	|	|
 
|   2 |   PARTITION LIST SINGLE|		| 20000 |   136K|    17   (0)| 0
0:00:01 |     3 |     3 |
 
|   3 |    TABLE ACCESS FULL   | TEST_PART_PERF | 20000 |   136K|    17   (0)| 0
0:00:01 |     3 |     3 |
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
-------------------------
 
 
Note
-----
   - dynamic sampling used FOR this statement (level=2)
 
14 rows selected.
 
SQL> 
 
SQL> ALTER TABLE test_part_perf ADD partition part_dd VALUES ('000000');
 
TABLE altered.
 
SQL> 
 
SQL> ALTER TABLE test_part_perf enable row movement;
 
TABLE altered.
 
SQL> UPDATE test_part_perf SET created_month='000000' WHERE created_month IS NULL;
 
20000 rows updated.
 
SQL> commit;
 
Commit complete.
 
SQL> 
 
SQL> EXPLAIN plan FOR
SELECT count(*)
FROM test_part_perf 
WHERE created_month = '000000';  2    3    4  
 
Explained.
 
SQL> SELECT * FROM TABLE(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1186165449
 
--------------------------------------------------------------------------------
-------------------------
 
| Id  | Operation	       | Name		| Rows	| Bytes | Cost (%CPU)| T
ime	| Pstart| Pstop |
 
--------------------------------------------------------------------------------
-------------------------
 
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |		|     1 |     7 |    22   (0)| 0
0:00:01 |	|	|
 
|   1 |  SORT AGGREGATE        |		|     1 |     7 |	     |
	|	|	|
 
|   2 |   PARTITION LIST SINGLE|		| 20450 |   139K|    22   (0)| 0
0:00:01 |   KEY |   KEY |
 
|   3 |    TABLE ACCESS FULL   | TEST_PART_PERF | 20450 |   139K|    22   (0)| 0
0:00:01 |     4 |     4 |
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
-------------------------
 
 
Note
-----
   - dynamic sampling used FOR this statement (level=2)
 
14 rows selected.
 
SQL>                         
 
SQL> SELECT count(*)         
FROM test_part_perf 
WHERE created_month = '000000';   
 
  COUNT(*)
----------
     20000
 
SQL>

Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 19h04   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 60
Points : 12
Points : 12
Ok.
Merci de vos réponses.
Vince7-7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h38.


 
 
 
 
Partenaires

Hébergement Web