[Home] [Help]
PACKAGE BODY: APPS.ASG_PERF
Source
1 PACKAGE BODY asg_perf AS
2 /*$Header: asgperfb.pls 120.1 2005/08/12 02:50:59 saradhak noship $*/
3
4 -- DESCRIPTION
5 -- Contains functions to report synch performance
6 --
7 --
8 -- HISTORY
9 -- 02-jun-2004 ssabesan Merge 115.3.1158.4 into main line (11.5.9.6)
10 -- Change literal to bind variables.
11 -- 20-Dec-2002 rsripada Fix Invalid Number error
12 -- 19-Nov-2002 rsripada Use FND Logging.
13 -- 07-Nov-2002 rsripada Created
14
15 -- 8 space double tab
16 g_dtab VARCHAR2(128) := ' ';
17 g_user_name VARCHAR2(30);
18 g_first_synch VARCHAR2(1);
19 g_pub_item VARCHAR2(30);
20 g_log_enabled VARCHAR2(1) := 'N';
21 g_last_tran_id NUMBER;
22 g_curr_tran_id NUMBER;
23
24 PROCEDURE log(p_mesg IN VARCHAR2)
25 IS
26 BEGIN
27 /*
28 IF (g_log_enabled = 'N') THEN
29 dbms_output.enable(100000);
30 g_log_enabled := 'Y';
31 END IF;
32 dbms_output.put_line(p_mesg);
33 */
34 asg_helper.log(p_mesg, 'asg_perf', FND_LOG.LEVEL_EVENT);
35 END log;
36
37 PROCEDURE log_newline
38 IS
39 BEGIN
40 /*
41 IF (g_log_enabled = 'N') THEN
42 dbms_output.enable(100000);
43 g_log_enabled := 'Y';
44 END IF;
45 -- Trick dbms_output to write a blank line
46 dbms_output.put(CHR(10));
47 */
48 asg_helper.log(' ', 'asg_perf', FND_LOG.LEVEL_EVENT);
49 END log_newline;
50
51 PROCEDURE print_header
52 IS
53 l_db_instance VARCHAR2(30);
54 BEGIN
55
56 select instance_name into l_db_instance
57 from v$instance;
58
59 log('Synch Query Performance Report');
60 log_newline();
61 log('User: ' || g_user_name);
62 log('Database: ' || l_db_instance);
63
64 IF (g_first_synch = asg_base.G_YES) THEN
65 log('Type of Synch: COMPLETE REFRESH');
66 ELSE
67 log('Type of Synch: INCREMENTAL REFRESH');
68 END IF;
69
70 IF g_pub_item IS NOT NULL THEN
71 log('Publication Item: ' || g_pub_item);
72 END IF;
73
74 log_newline();
75 log_newline();
76
77 END print_header;
78
79 PROCEDURE print_summary
80 IS
81 BEGIN
82 log_newline();
83 log_newline();
84 log('Summary: ');
85 log('Total Num of rows: ' || g_total_rows);
86 log('Time in download_init (sec): ' || g_dtab ||
87 g_dtab || g_dtab || to_char(g_download_init_time));
88 log('Total query time (sec) : ' || g_dtab || g_dtab || g_dtab ||
89 g_dtab || to_char(g_total_elapsed_query_time));
90 log('Total Time (sec) : ' || g_dtab || g_dtab || g_dtab ||
91 g_dtab || g_dtab || to_char(g_total_elapsed_time));
92 END print_summary;
93
94 PROCEDURE setup_pub_item_download(p_user_name IN VARCHAR2,
95 p_pub_item IN VARCHAR2,
96 p_first_synch IN VARCHAR2)
97 IS
98 l_begin_date DATE;
99 l_end_date DATE;
100 l_comp_ref VARCHAR2(1);
101 l_query_string VARCHAR2(512);
102 BEGIN
103
104 IF(p_first_synch = asg_base.G_YES) THEN
105 l_comp_ref := 'Y';
106 ELSE
107 l_comp_ref := 'N';
108 END IF;
109
110 l_query_string := 'insert into ' || asg_base.G_OLITE_SCHEMA ||
111 '.c$pub_list_q(name, comp_ref) ' ||
112 ' values (:1, :2)';
113 EXECUTE IMMEDIATE l_query_string
114 USING p_pub_item, l_comp_ref;
115
116 IF p_first_synch = asg_base.G_YES THEN
117 g_last_tran_id := -1;
118 g_curr_tran_id := 1;
119 ELSE
120 SELECT max(transaction_id) into g_last_tran_id
121 FROM asg_system_dirty_queue
122 WHERE client_id = p_user_name;
123 IF g_last_tran_id IS NULL THEN
124 g_last_tran_id := 1;
125 END IF;
126 g_curr_tran_id := g_last_tran_id +1;
127 END IF;
128
129 log('Download Init:');
130
131 select sysdate into l_begin_date from dual;
132 log('Begin time: ' ||
133 to_char(l_begin_date, 'DD-MON-YYYY HH24:MI:SS'));
134 apps.asg_cons_qpkg.download_init(p_user_name, g_last_tran_id,
135 g_curr_tran_id, 'N');
136 select sysdate into l_end_date from dual;
137 log('End time: ' ||
138 to_char(l_end_date, 'DD-MON-YYYY HH24:MI:SS'));
139
140 g_elapsed_time_in_days := l_end_date-l_begin_date;
141 -- Convert the elapsed time in seconds
142 g_elapsed_time := g_elapsed_time_in_days*60*60*24;
143 g_download_init_time := g_elapsed_time;
144 log('Time in download_init (sec): ' || g_dtab || g_dtab ||
145 g_dtab || g_dtab || to_char(g_download_init_time));
146 log_newline();
147
148 END setup_pub_item_download;
149
150 PROCEDURE compute_pub_item_time(p_pub_item IN VARCHAR2)
151 IS
152 l_begin_date DATE;
153 l_end_date DATE;
154 l_query_string VARCHAR2 (512);
155 begin
156 select sysdate into l_begin_date from dual;
157 log('Begin time: ' ||
158 to_char(l_begin_date, 'DD-MON-YYYY HH24:MI:SS'));
159 l_query_string := 'SELECT count(*) ' ||
160 ' FROM mobileadmin.ctm$' ||p_pub_item ||
161 ' WHERE clid$$cs = :1 AND ' ||
162 ' tranid$$ > :2';
163
164 EXECUTE IMMEDIATE l_query_string INTO g_num_rows
165 USING g_user_name, g_last_tran_id;
166 select sysdate into l_end_date from dual;
167 log('End time: ' ||
168 to_char(l_end_date, 'DD-MON-YYYY HH24:MI:SS'));
169 log('Num of rows: ' || g_num_rows);
170 g_elapsed_time_in_days := l_end_date-l_begin_date;
171 -- Convert the elapsed time in seconds
172 g_elapsed_time := g_elapsed_time_in_days*60*60*24;
173 log('Query Time (sec): ' || g_dtab || g_dtab || g_dtab ||
174 g_dtab || g_dtab || to_char(g_elapsed_time));
175 END compute_pub_item_time;
176
177 PROCEDURE setup_download(p_user_name IN VARCHAR2,
178 p_first_synch IN VARCHAR2)
179 IS
180 l_begin_date DATE;
181 l_end_date DATE;
182 l_comp_ref VARCHAR2(1);
183 l_query_string VARCHAR2(512);
184 BEGIN
185
186 IF(p_first_synch = asg_base.G_YES) THEN
187 l_comp_ref := 'Y';
188 ELSE
189 l_comp_ref := 'N';
190 END IF;
191
192 l_query_string := 'insert into ' || asg_base.G_OLITE_SCHEMA ||
193 '.c$pub_list_q(name, comp_ref) ' ||
194 ' select publication_item, ''' || l_comp_ref || '''' ||
195 ' from ' || asg_base.G_OLITE_SCHEMA ||
196 '.c$all_client_items ' ||
197 ' where clientid = :1 ' ||
198 ' and publication_item in ' ||
199 ' (select name from asg_pub_item)';
200 EXECUTE IMMEDIATE l_query_string
201 USING p_user_name;
202
203 IF p_first_synch = asg_base.G_YES THEN
204 g_last_tran_id := -1;
205 g_curr_tran_id := 1;
206 ELSE
207 SELECT max(transaction_id) into g_last_tran_id
208 FROM asg_system_dirty_queue
209 WHERE client_id = p_user_name;
210 IF g_last_tran_id IS NULL THEN
211 g_last_tran_id := 1;
212 END IF;
213 g_curr_tran_id := g_last_tran_id +1;
214 END IF;
215
216 log('Download Init:');
217 --log('Last tranid: ' || g_last_tran_id ||
218 -- ' Current tranid: ' || g_curr_tran_id);
219
220 select sysdate into l_begin_date from dual;
221 log('Begin time: ' ||
222 to_char(l_begin_date, 'DD-MON-YYYY HH24:MI:SS'));
223 apps.asg_cons_qpkg.download_init(p_user_name, g_last_tran_id,
224 g_curr_tran_id, 'N');
225 select sysdate into l_end_date from dual;
226 log('End time: ' ||
227 to_char(l_end_date, 'DD-MON-YYYY HH24:MI:SS'));
228
229 g_elapsed_time_in_days := l_end_date-l_begin_date;
230 -- Convert the elapsed time in seconds
231 g_elapsed_time := g_elapsed_time_in_days*60*60*24;
232 g_download_init_time := g_elapsed_time;
233 log('Time in download_init (sec): ' || g_dtab || g_dtab ||
234 g_dtab || g_dtab || to_char(g_download_init_time));
235 log_newline();
236
237 END setup_download;
238
239 PROCEDURE compute_download_time
240 IS
241 l_cursor_id NUMBER;
242 l_cursor_ret NUMBER;
243 l_select_pi_sqlstring VARCHAR2(4000);
244 l_curr_pub_item VARCHAR2(30);
245 begin
246
247 l_select_pi_sqlstring :=
248 'SELECT name ' ||
249 'FROM ' || asg_base.G_OLITE_SCHEMA ||'.' ||'c$pub_list_q';
250
251 l_cursor_id := DBMS_SQL.OPEN_CURSOR;
252 DBMS_SQL.PARSE (l_cursor_id, l_select_pi_sqlstring, DBMS_SQL.v7);
253 DBMS_SQL.DEFINE_COLUMN (l_cursor_id, 1, l_curr_pub_item, 30);
254
255 l_cursor_ret := DBMS_SQL.EXECUTE (l_cursor_id);
256 WHILE ( DBMS_SQL.FETCH_ROWS(l_cursor_id) > 0 ) LOOP
257 DBMS_SQL.COLUMN_VALUE (l_cursor_id, 1, l_curr_pub_item);
258 log(l_curr_pub_item);
259 compute_pub_item_time(l_curr_pub_item);
260 g_total_rows := g_total_rows + g_num_rows;
261 g_total_elapsed_query_time := g_total_elapsed_query_time + g_elapsed_time;
262 END LOOP;
263
264 DBMS_SQL.CLOSE_CURSOR(l_cursor_id);
265
266 g_total_elapsed_time := g_download_init_time + g_total_elapsed_query_time;
267
268 END compute_download_time;
269
270 PROCEDURE cleanup_setup
271 IS
272 l_query_string VARCHAR2(512);
273 BEGIN
274 l_query_string := 'DELETE FROM ' || asg_base.G_OLITE_SCHEMA ||
275 '.c$pub_list_q';
276 EXECUTE IMMEDIATE l_query_string;
277 asg_base.reset_all_globals();
278 asg_download.reset_all_globals();
279 rollback;
280 END cleanup_setup;
281
282
283 -- Procedure to report the download init and query time statistics
284 -- for the specified user's first synch
285 PROCEDURE get_first_synch_report(p_user_name IN VARCHAR2)
286 IS
287 BEGIN
288 g_user_name := upper(p_user_name);
289 g_first_synch := asg_base.G_YES;
290 g_pub_item := null;
291
292 print_header();
293 setup_download(g_user_name, g_first_synch);
294 compute_download_time();
295 print_summary();
296 cleanup_setup;
297
298 END get_first_synch_report;
299
300 -- Procedure to report the download init and query time statistics
301 -- for the specified user's incremental synch
302 PROCEDURE get_incremental_synch_report(p_user_name IN VARCHAR2)
303 IS
304 BEGIN
305 g_user_name := upper(p_user_name);
306 g_first_synch := asg_base.G_NO;
307 g_pub_item := null;
308
309 print_header();
310 setup_download(g_user_name, g_first_synch);
311 compute_download_time();
312 print_summary();
313 cleanup_setup;
314
315 END get_incremental_synch_report;
316
317 -- Procedure to report the download init and query time statistics
318 -- for the specified user and publication-item's first synch
319 PROCEDURE get_first_synch_report(p_user_name IN VARCHAR2,
320 p_pub_item IN VARCHAR2)
321 IS
322 BEGIN
323 g_user_name := upper(p_user_name);
324 g_first_synch := asg_base.G_YES;
325 g_pub_item := upper(p_pub_item);
326
327 print_header();
328 setup_pub_item_download(g_user_name, g_pub_item, g_first_synch);
329 compute_pub_item_time(g_pub_item);
330 print_summary();
331 cleanup_setup;
332
333 END get_first_synch_report;
334
335 -- Procedure to report the download init and query time statistics
336 -- for the specified user and publication item's incremental synch
337 PROCEDURE get_incremental_synch_report(p_user_name IN VARCHAR2,
338 p_pub_item IN VARCHAR2)
339 IS
340 BEGIN
341 g_user_name := upper(p_user_name);
342 g_first_synch := asg_base.G_NO;
343 g_pub_item := upper(p_pub_item);
344
345 print_header();
346 setup_pub_item_download(g_user_name, g_pub_item, g_first_synch);
347 compute_pub_item_time(g_pub_item);
348 print_summary();
349 cleanup_setup;
350
351 END get_incremental_synch_report;
352
353 end;