G
George Potemkin
Guest
> and find that there is an index on job-type but not on branch. Then it would have a sense to compare: WHERE prd_desc.job-type = p_JobType vs WHERE STRING(prd_desc.job-type) = p_JobType STRING() function will be resolved on server. Both queries (with/without STRING) will send through a network the same number of records but will retrieve the different number of records from database using the different indexes. > In short, the second loop, (an index is available for the where condition) seems to pack a large number of records into its round-trips (it's only limited by the -Mm configuration). The first loop, however, seems to be make a lot more round-trips with fewer records in each. The number of records per round-trip is limited in some other mysterious way that does not seem to be based simply on the -Mm. Can you post the numbers? You can use the following code: DEFINE VARIABLE vMsgRec LIKE _ActServer._Server-MsgRec NO-UNDO EXTENT 3. DEFINE VARIABLE vMsgSent LIKE _ActServer._Server-MsgSent NO-UNDO EXTENT 3. DEFINE VARIABLE vByteRec LIKE _ActServer._Server-ByteRec NO-UNDO EXTENT 3. DEFINE VARIABLE vByteSent LIKE _ActServer._Server-ByteSent NO-UNDO EXTENT 3. DEFINE VARIABLE vRecRec LIKE _ActServer._Server-RecRec NO-UNDO EXTENT 3. DEFINE VARIABLE vRecSent LIKE _ActServer._Server-RecSent NO-UNDO EXTENT 3. DEFINE VARIABLE vQryRec LIKE _ActServer._Server-QryRec NO-UNDO EXTENT 3. DEFINE VARIABLE vTimeSlice LIKE _ActServer._Server-TimeSlice NO-UNDO EXTENT 3. PROCEDURE GetServerStat: DEFINE INPUT PARAMETER ipStatId AS INTEGER NO-UNDO. FOR FIRST DICTDB._MyConnection NO-LOCK, FIRST DICTDB._Connect NO-LOCK WHERE DICTDB._Connect._Connect-Id EQ DICTDB._MyConnection._MyConn-UserId + 1, FIRST DICTDB._ActServer NO-LOCK WHERE DICTDB._ActServer._Server-Id EQ DICTDB._Connect._Connect-Server + 1: ASSIGN vMsgRec [ipStatId] = DICTDB._ActServer._Server-MsgRec vMsgSent [ipStatId] = DICTDB._ActServer._Server-MsgSent vByteRec [ipStatId] = DICTDB._ActServer._Server-ByteRec vByteSent [ipStatId] = DICTDB._ActServer._Server-ByteSent vRecRec [ipStatId] = DICTDB._ActServer._Server-RecRec vRecSent [ipStatId] = DICTDB._ActServer._Server-RecSent vQryRec [ipStatId] = DICTDB._ActServer._Server-QryRec vTimeSlice[ipStatId] = DICTDB._ActServer._Server-TimeSlice . /* ASSIGN */ END. END PROCEDURE. /* GetServerStat */ RUN GetServerStat(1). RUN GetServerStat(2). /* Insert here the query to test: */ FOR EACH prd_desc WHERE /*STRING(*/ prd_desc.job-type = p_JobType NO-LOCK: END. RUN GetServerStat(3). DISPLAY vMsgRec [3] + vMsgRec [1] - 2 * vMsgRec [2] @ _Server-MsgRec vMsgSent [3] + vMsgSent [1] - 2 * vMsgSent [2] @ _Server-MsgSent vByteRec [3] + vByteRec [1] - 2 * vByteRec [2] @ _Server-ByteRec vByteSent [3] + vByteSent [1] - 2 * vByteSent [2] @ _Server-ByteSent vRecRec [3] + vRecRec [1] - 2 * vRecRec [2] @ _Server-RecRec FORMAT ">>>>>>>>>>>>>>>>>>>9" vRecSent [3] + vRecSent [1] - 2 * vRecSent [2] @ _Server-RecSent vQryRec [3] + vQryRec [1] - 2 * vQryRec [2] @ _Server-QryRec vTimeSlice[3] + vTimeSlice[1] - 2 * vTimeSlice[2] @ _Server-TimeSlice WITH SIDE-LABELS 1 COLUMN.
Continue reading...
Continue reading...