IDF Compiler Performance Optimsation

Performance

UD6/CMtool driver uses the Uniface defined primary keys to structure the data into an understandable, logical and easy to access format. Unfortunately, when the IDF and compiler retrieves this information it does not always use the primary key.

Therefore the following performance optimisations have been added to the driver. These are all enabled by default, and usually require no intervention. However if you are using UD6 with a newer release of Uniface than what was available when the driver was released, the performance enhancements may cause unexpected behaviour. In this case you may use the information listed here to disable specific performance enhancements.

March Hare will continue to provide regular updates to the UD6/CMtool driver to ensure that it remains up-to-date with the changes in IDF and the compiler, and you are entitled to these upgrades if you have a maintenance contract with March Hare.

Table Bit Key Reason
UCFIELD 0 2 During compilation in Phase 2: Model Definitions, the compiler attempts to find a field defined in an entity that does not exist in the conceptual model. This is a pointless exercise since it never returns a result, but requires a full table scan to complete (index 4 is used when it is finding a field that is likely to exist).
UCGROUP 1 2 Whilst trying to get relationship information, the compiler traverses the sub-type definitions, which require the use of the non-primary key 2. UD6/CMtool driver is only optimised to select from the primary key.
UCRELSH 2   During compilation, ‘up’ entities are retrieved using a non-primary key, index 3. This requires U_RGLAB and/or U_RVLAB. Since U_RGLAB is a part of the primary key of UCRELSH the setting USYS$UD6_PARAMS performance 4 just allows ‘reverse lookups’, i.e.: where the first two portions of the primary key are NULL.
USIMPL 3 2 At the end of compilation the signatures are read/written to USIMPL using the ‘link’ from USSPEC. The IDF uses the index on the foreign key field USPECNAM (detailed in the IDF under relationships). When this performance bit is set the driver assumes that the filename and USPCNAM are identical.

This may have undesired effects if newer versions of Uniface allow implementations (UIMPLNAM) to have names different from the specification (this is not the same as an operation having a different literal name).

select count(*) 
from usimpl 

where uspecnam!=uimplnam

UCGROUP 4   When (S)elect using the form UUENTC20, you retrieve entities in CS, it tries to retrieve UCGROUP without qualification by VLAB or by TLAB!. With this bit set on, Selects on UCGROUP where no VLAB or TLAB or GLAB is used are ignored..
ALL 5   When USYS$UD6_PARAMS=mmf binary is set in the assignment file, and this performance bit is set, then the binary translations do not take place until a matching entity is found during a (S)elect.
not in use 6    
  7   Display warning messages in the message frame each time that a performance optimisation is made. This bit is not set by default.

For driver versions 0.75 (bit 4 requires version 1.10.30) and above, you can set the USYS$UD6_PARAMS performance driver setting in the assignment file. The ‘Bit’ value specifies the bitwise value of the performance parameter, e.g.: if performance is 1, the UD6/CMtool driver ignores select requests on the table UCFIELD where the index key is 2; and the driver adds u_tlab to the ‘primary key’ of UCGROUP when performance is 2.

Answers

How to get support

Parameters

USYS$UD6_PARAMS Actual driver parameters from assignment file.
add2list.exe For use when checking out a program from CVS
del2list.exe For use when checking in a program to CVS
SQL Workbench For use with running operating system commands and updating parameters during an IDF session

$Revision: 1.6.4.3 $ $Date: 2003/09/16 17:52:06 $[zum Seitenanfang]