RP/MSQ/VMS 4.0A - MRS has 4 sec delay - CR031533 (Doc ID 766326.1)

Last updated on NOVEMBER 03, 2016

Applies to:

Oracle MessageQ / MessageQ /
Information in this document applies to any platform

Goal

DESCRIPTION:

 Description of the problem, include error messages.

PAMS_PUT_MSG(PDEL_WF_DQF/PDEL_UMA_SAF) takes 4 or 5 seconds elapsed 
intermittently.Most cases are 20 or 30 ms elapsed. We would like to clarify 
the reason why the elapse time of PAMS_PUT_MSG becomes longer intermittently.
This issue can be reproduced easily.Could you please test it and tell us the 
reason why ? We want to tell you about our simmulation environment as sample 
configuration. Now, it is possible our customer has the same problem.

(Sender Side/Node:OSOV06)		        (Receiver Side/Node:OSO673)
OpenVMS AXP V7.1                		OpenVMS AXP V6.2-1H3
MQ V4.0A RP38					MQ V3.2B RP16

Sender Prc 1 B:102/G:4 Que:1(Target G:1/Que:1)	Receiver Prc 1 B:102/G:1 Que:1	
Sender Prc 2 B:102/G:4 Que:2(Target G:1/Que:1)
Sender Prc 3 B:102/G:4 Que:3(Target G:1/Que:1)

Listed below is sender program.

    put_delivery = PDEL_MODE_WF_DQF;      
    put_uma      = PDEL_UMA_SAF;          
    while(1){
    sts=lib$init_timer();
    status = pams_put_msg (put_buffer, &put_priority, &target.all,
                           &put_class, &put_type, &put_delivery,
                           &put_size, &put_timeout, &psb, &put_uma,
                           &put_resp_que, 0, 0, 0);
    sts=lib$show_timer();
    if (status != PAMS__SUCCESS)
    {
        (void) printf ("\nError returned %d", status);
        exit (status);
    }
    }

Listed below is receiver program.

    while(1){
    status = pams_get_msgw (get_buffer, &get_priority, &source.all,
                           &get_class, &get_type, &buflen, &get_size,
                           &get_timeout,sel_addr, &psb,
                           0, 0, 0, 0, 0);

    if (status != PAMS__SUCCESS)
    {
        (void) printf ("\nError returned by PAMS_GET_MSGW %d", status);
        exit (status);
    }
    status = pams_confirm_msg(psb.seq,&pcjstatus,&force_j);
    if (status != PAMS__SUCCESS)
    {
        (void) printf ("\nError returned by PAMS_CONFIRM_MSG %d", status);
        exit (status);
    }
    }

1. We used LIB$INIT_TIMER and LIB$SHOW_TIMER to measure a elapse time of 
   PAMS_PUT_MSG.
2. At first, please test with only 1:1 transfer (Sender Prc 1 and Receiver 
   Prc 1), and Elapse time of PAMS_PUT_MSG will be 20 or 30 ms.
3. Next, please test with 2:1(Sender Prc 1 and Sender Prc 2 send to Que:1 
   of Receiver Prc 1), and Elapse time of it will be 4 or 5 seconds.
   Then, MRS will have no pending message.
4. Next, please test with 3:1(Sender Prc 1 and Sender Prc 2 and Sender 
   Prc 3 send to Que:1 of Receiver Prc 1), and Elapse time of it will be
   20 or 30 ms.Then, MRS will have some pending messages.

It seems to me that when pending count of MRS is 0 and multiple Sender 
process send to single receiver process, the elapse time of PAMS_PUT_MSG 
become longer.If MRS has some pending messages even if multiple processes 
send to single receiver process, the elapse time is fast.
We would like to clarify the reason why elapse time of PAMS_PUT_MSG become 
longer.
 
If you need our sample program and DMQ$INIT.TXT, we want to send them to 
you.Could you please show us how to send them? If we append them in this Web 
site, a part of them will be lack.

</pre>

Solution

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms