Producing Multiple Outputs in One Pass of a Data Source (Pooled Tables)

In this section:

The Pooled Tables option permits you to produce many reports or extract files in a single pass of your data source, dramatically reducing database I/O, CPU, and elapsed time. Requests against any data source, file, or JOIN structure that FOCUS reads can be pooled without incurring a penalty, even if the application does not exploit the feature.

Pooling is added with several SET commands, and its analytical functions can automatically identify reports that can share database I/O and run them concurrently.

Pooling is applicable whenever consecutive report requests run against the same database, which is ideal for large batch operations, as well as canned FOCUS reporting and data-extract applications. It also applies in most reporting situations where record-selection costs exceed the costs for report formatting.


Top of page

x
Overview

How to:

To implement Pooled Tables in an application, you simply add several SET commands; no other changes are required. As FOCUS runs a group of report requests, it starts pooling as soon as it encounters a SET POOL=ON command, and pooling continues until it reads a SET POOL=OFF. During processing, FOCUS searches for consecutive TABLE requests that access the same data source with the same access method, and it stores those in sub-pools. A read-ahead feature even crosses FOCEXEC boundaries, dividing commands into retrieval and non-retrieval sub-pools. These sub-pools are collections of TABLE requests and related commands against common data sources—only report requests within sub-pools can be combined. Sub-pool boundaries are established whenever FOCUS encounters commands that either alter the data or change the processing environment (see Sub-Pool Boundaries and Pooling Restrictions).

Sub-pools are further subdivided into clusters, which are sets of consecutive TABLE requests against the same logical database that employ the same access method. Requests that cannot be pooled due to syntactical or environmental conditions are executed as single-TABLE clusters, which execute concurrently and share their data retrieval and screening processes (as well as related overhead), but do not share sorts or output formatting functions.

You can make processing more efficient if you can estimate the expected number of records to be read and lines of output. You can also perform a degree of memory management by limiting the amount of memory made available for pooling. For more information, see Estimating Memory Requirements



x
Syntax: How to Activate the Pooled Tables Feature
SET POOL = {OFF|ON} 

where:

OFF

Ends Pooled Tables and executes any queued requests. OFF is the default value.

ON

Activates Pooled Tables.



Example: Using Pooled Tables

The following example illustrates the ease of implementing Pooled Tables. Here a small amount of memory is provided for Pooled Tables (4,000K); then pooling is turned on and report size estimates are provided for each report. The report requests are queued until pooling is turned off. At that time, data is retrieved only once for all report requests in the pool. They are executed concurrently, and the reports printed one after the other.

SET POOLMEMORY = 4000
SET POOL=ON
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME HIRE_DATE BY DEPARTMENT
IF HIRE_DATE GE 820101
ON TABLE SET ESTLINES 10000 AND ESTRECORDS 10000
END

The output is:

 DEPARTMENT  LAST_NAME        FIRST_NAME  HIRE_DATE
 ----------  ---------        ----------  ---------
 MIS         JONES            DIANE        82/05/01
             BLACKWOOD        ROSEMARIE    82/04/01
             GREENSPAN        MARY         82/04/01
 PRODUCTION  SMITH            RICHARD      82/01/04
             BANNING          JOHN         82/08/01
             IRVING           JOAN         82/01/04
             ROMANS           ANTHONY      82/07/01
             MCKNIGHT         ROGER        82/02/02
TABLE FILE EMPLOYEE
PRINT CURR_SAL BY CURR_JOBCODE
IF CURR_JOBCODE EQ 'A$*'
ON TABLE SET ESTLINES 5 AND ESTRECORDS 4000
END

The output is:

 CURR_JOBCODE         CURR_SAL
 ------------         --------
 A01                 $9,500.00
 A07                $11,000.00
                     $9,000.00
 A15                $26,862.00
 A17                $29,700.00
                    $27,062.00
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME BY DEPARTMENT
IF PAY_DATE FROM 820701 TO 820831
ON TABLE SET ESTRECORDS 120000
END
SET POOL=OFF

The output is:

 DEPARTMENT  LAST_NAME        FIRST_NAME
 ----------  ---------        ----------
 MIS         SMITH            MARY
             JONES            DIANE
             MCCOY            JOHN
             BLACKWOOD        ROSEMARIE
             GREENSPAN        MARY
             CROSS            BARBARA
 PRODUCTION  STEVENS          ALFRED
             SMITH            RICHARD
             BANNING          JOHN
             IRVING           JOAN
             ROMANS           ANTHONY
             MCKNIGHT         ROGER

Top of page

x
Sub-Pool Boundaries and Pooling Restrictions

Reference:

Sub-pools are collections of TABLE or GRAPH requests and related commands. Only reports within a sub-pool can be pooled together to share I/O. Sub-pool boundaries are imposed by non-retrieval commands that can change the data or retrieval method for the data source. Therefore, you cannot reliably pool together reports on either side of a sub-pool boundary. When sub-pool boundary commands are encountered, pooling temporarily halts and all queued requests are executed.

Sub-pool boundaries are created when:



x
Reference: Retrieval Commands Included in Sub-pools

The following table lists retrieval commands included in sub-pools.

Note: This list may be subject to change in future releases.

?
?F
?FF
CHECK
DEFINE
GRAPH
HELP
HOLD
OFFLINE
ONLINE
PCHOLD
REPLOT
RETYPE
SAVB
SAVE
TABLE
TABLEF


x
Reference: Commands That Cause Sub-Pool Boundaries

The following table lists commands that cause sub-pool boundaries.

ANALYSE
CALC
CMS
COMBINE
COMPILE
CREATE
DECRYPT
DYNAM
ENCRYPT
EX
EXEC
FILETALK
FILTER
FIN
FINISH
FIXPACK
FS
FSCAN
GRAPHTALK
JOIN
LET
LOAD
MAINTAIN
MATCH
MODIFY
MODIFYTALK
MPAINT
MVS
PASS
PLOTTALK
REBUILD
RECALC
REMOTE
RESTRICT
RUN
SCAN
SET
SQL
TABLETALK
TED
TSO
UNLOAD
USE
WINDOW

 



x
Reference: SET Commands That Cause Sub-Pool Boundaries

The following lists SET commands that cause sub-pool boundaries. SET commands included in ? SET ALL that are not on this list do not cause sub-pool boundaries.

ADABAS
AGGRRATIO
ALL.
AUTOINDEX
AUTOPATH
AUTOSTRATEGY
AUTOTABLEF
BINS
BLKCALC
BYPANEL 2
BYSCROLL
CACHE
CALC
CALCMEMORY
CALCROWS
CALCWAIT
CARTESIAN
CDN
COLUMNSCROLL2
COMMIT
COMPUTE
CURRENCY
DATETIME
DEFCENT
ESTLINES 1
ESTRECORDS 1
EXTSORT
FIELDNAME
FILENAME
FIXRETRIEVE
FOCSTACK
FOC144 1
HIPERFOCUS
HTMLMODE
ICUFORM
IMPLIEDLOAD
IMS
LABELPROMPT
LANGUAGE
LE370
LOADLIMIT
LOOKGRAPH
MAXLRECL
MAXPOOLMEM
MINIO
MODE XXXXXX
MPRINT
PASS
POOL
POOLBATCH
POOLFEATURE
POOLMEMORY
POOLRESERVE
PREFIX
PREVIEW
PRINTPLUS 2
QUALCHAR
RECORDLIMIT 1
SAVEMATRIX     
SHIFT
SM
SQLENGINE
SQLTCARTES
SQLTOPTTF
STYLEMODE
SUSI
SUTABSIZE
TCPIPINT
TEMP DISK
TERMINAL
TEXTFIELD
TRACKIO
TRMSD
TRMSW
TRMTYP
USER
WINPFKEY
XRETRIEVAL
YRTHRESH
3DGRAPH

Note:

  • 1 indicates a sub-pool boundary with SET only.
  • 2 indicates a sub-pool boundary with ON TABLE SET only.


x
Reference: Restrictions for Single TABLE Clusters

In certain instances, reports cannot be pooled due to syntactical or environmental conditions. In this case, they are executed as single TABLE clusters. Reports in this category include:

The list below provides subroutines and functions that can be pooled.

ARGLEN
ATODBL
AYM
AYMD
BAR
BITSON
BITVAL
BYTVAL
CHGDAT
CHKFMT
CHKPCK
CTRAN
CTRFLD
DADMY
DADYM
DAMDY
DAMYD
DAYDM
DAYMD
DMOD
DOWK
DOWKL
DTDMY
DTDYM
DTMDY
DTMYD
DTYDM
DTYMD
EXP
FEXERR
FINDMEM
FMOD
FTOA
GETPDS
GETTOK
GETUSER
GREGDT
HEXBYT
HHMMSS
IMOD
ITONUM
ITOPACK
ITOZ
JULDAT
LCWORD
LJUST
LOCASE
OVRLAY
PARAG
PCKOUT
POSIT
RJUST
SOUNDEX
SUBSTR
TODAY
UFMT
UPCASE
YM


x
Estimating Memory Requirements

The number of executable reports per cluster depends on how much memory is allocated to Pooled Tables (POOLMEMORY). To optimize pooling capacity, give POOLMEMORY an adequate size: z/OS region size, or z/VM virtual memory. Reduce POOLRESERVE after loading interface and other modules.

To improve the pooling potential of requests, remove unnecessary sub-pool boundary commands such as extraneous -RUN statements, and consolidate necessary sub-pool boundary-forcing commands such as DYNAM and SET. You can further improve opportunities for pooling within clusters by grouping requests with the same source, entry point and retrieval method.

For optimal processing, supply accurate estimates for ESTRECORDS, ESTLINES, and POOLMEMORY for each request. Remember that these estimates apply to each report, not to the aggregate size of the set of reports in the cluster. To calculate these sizes, issue ? STAT and review the statistics.



Example: Displaying Report Statistics

The statistical report produced by ? STAT is useful in tuning applications that employ Pooled Tables.

Note: This annotated sample shows only information concerning Pooled Tables.

                    STATISTICS OF LAST COMMAND
RECORDS   =
50000
.
LINES     -
50000
.
.
.
.
.
.
.
1.
READS     =
250000
.
.
.
.
 
.
 
 
.
 
.
 
 
.
 
.
 
2.
SUBPOOL  
=     1
.
 
3.
CLUSTER
=     2
8.
ITERATION       
=     1
4.
# CLUSTER ITEMS
=    25
9.
# ITER ITEMS   
 =    16
5.
SEQ# IN CLUSTER
=     5
10.
SEQ# IN ITER  
  =     5
6.
ESTIMATED RECS
= 50000
11.
ESTIMATED LINES 
= 50000
7.
REPORT WIDTH
=   148

 

For this report:

1.READS

Total number of read I/O’s.

2.SUB POOL

This is the first subpool.

3.CLUSTER

This is the second cluster in the subpool.

4.# CLUSTER ITEMS

Total number of reports in the cluster. There are 25 reports in the cluster.

5.SEQ # IN CLUSTER

Sequence number of the current report in the cluster. This is the fifth report in the cluster.

6.ESTIMATED RECS

ESTRECORDS was set to 50,000. Compare this with RECORDS at the top of the output. If a discrepancy, exists correct ESTRECORDS.

7.REPORT WIDTH

The report width is 148 bytes.

8.ITERATION

Sequence number of the iteration (multiple iterations are used if pool memory is insufficient to run all reports at once). This report was produced in the first iteration.

9.# ITER ITEMS

Number of reports within the iteration. Sixteen reports are included in the first iteration.

10.SEQ # IN ITER

Sequence number of this report within the iteration. This is the fifth report in iteration number one.

11.ESTIMATED LINES

ESTLINES was set to 50,000. Compare this with LINES at the top of the output. If a discrepancy exists, correct your ESTLINES value for this report.

 



x
Memory Requirements

How to:

Pooled Tables memory requirements per report vary depending on numbers of records selected, output lines produced, and report widths, all of which Pooled Tables calculates based on the values of ESTLINES and ESTRECORDS. Gather ESTLINES and ESTRECORDS input from:

The memory requirement for a small summary report roughly equals:

NUMBER OF LINES OF OUTPUT * REPORT WIDTH. 

For large summary reports and detail reports, use:

NUMBER OF RECORDS SELECTED * REPORT WIDTH

In the absence of estimates, Pooled Tables uses the following defaults:



x
Syntax: How to Supply an Estimate for the Number of Input Records for a Report
ON TABLE SET ESTRECORDS {m|0}

where:

m

Is the estimate of the number of records being retrieved for a report. The default value is 0.

Assign a global value for each report in a pool with the following command:

SET ESTRECORDS={m|0}


x
Syntax: How to Supply an Estimate of the Number of Output Lines Expected for a Report
ON TABLE SET ESTLINES nSET ESTLINES=n

where:

n

Is a user estimate of the number of output lines for a report. The default value is 0. If no value is given, Pooled Tables assumes there is no aggregation, and that the number of lines is the same as the number of records.

You can assign a global value for each report in a pool with the following command:

SET ESTLINES=n

When ESTLINES is 0, Pooled Tables uses the current value of ESTRECORDS for ESTLINES. While adequate for large extract reports, this provide minimal benefit if inaccurate.



x
Syntax: How to Limit the Amount of Memory Available for Pooling Within a Cluster (Per User)
SET POOLMEMORY = n

where:

n

Is the upper limit in kilobytes of memory that FOCUS may use during any cluster for a user. In z/OS, this is memory above the 16-megabyte line. In z/VM, it represents total virtual memory.

The default value is 16,384 K (16 M). The minimum value is 1,024 K.

The minimum value for POOLMEMORY is 1,024 K. You can set a maximum threshold for POOLMEMORY when you install Pooled Tables.

You can also set POOLMEMORY from the command line, during FOCUS initialization (in the PROFILE FOCEXEC), or within an application.

When POOLMEMORY is insufficient to execute every request in a cluster simultaneously, Pooled Tables executes them in iterations, producing as many reports as it can in memory in the first iteration and staging data for the remaining reports in a FOCPOOLT work file it creates for this use. The remaining reports are produced from FOCPOOLT in subsequent iterations, so the original data source is still only accessed once at the outset. When a cluster can be produced directly from memory, no FOCPOOLT file is created.



x
Syntax: How to Reserve Memory for Other Modules
SET POOLRESERVE =n

where:

n

Is an amount of memory (kilobytes) reserved for other modules that Pooled Tables cannot use.

In z/VM, the default is 1,024K. In z/OS, it is 100K.

POOLRESERVE reserves memory for use by other modules during the Pooled Tables request-parsing and decision-making processes. For example, initial access to SQL/DS requires loading of Information Builders interface code and IBM modules (this memory will not be made available to Pooled Tables).

You can change either at installation time, by setting POOLRESERVE from the command line during FOCUS initialization (in the PROFILE FOCEXEC), or within your application.

Suggested values for POOLRESERVE are:

Running an interface (not in saved segment): 1024 K
Running an interface (in saved segment):      256 K
Using SyncSort as the external sort:          512 K
Using any other sort:                         128 K

Memory for such activities is not used in the Pooled Tables case until the common read is executed. After loading these modules, you can reduce POOLRESERVE, perhaps to zero. If the Information Builders interface and IBM load modules are stored in a saved segment, you can even reduce POOLRESERVE before executing Pooled Tables.

The Pooled Tables Trace facility (see Observing the Results of Pooling (TRACEON)) displays actual memory allocations for each report and the statistics used to calculate it.



Example: Using a Temporary FOCPOOLT Work File

If a cluster contained 30 report requests, each requiring 1megabyte of memory, and 10 megabytes was all the memory allocated for POOLMEMORY, Pooled Tables would retrieve data for all 30 reports but produce only the first 10 reports directly from memory (the first iteration), writing the records for the remaining 20 reports to the FOCPOOLT work file. In the next iteration, Pooled Tables would read data for the next 10 reports from FOCPOOLT and process those. In a third iteration it would process the data for the final 10 reports.

FOCPOOLT retrievals are more efficient than going back to the data source, because the data is pre-screened and formatted, and because Pooled Tables collected accurate record counts (ESTRECORDS) when it wrote records for the second and subsequent iterations to FOCPOOLT. With accurate memory requirements calculated, Pooled Tables performance is optimized.


Top of page

x
Sharing Selection Criteria and Filters Across Requests in a Pool

Selection statements that appear in every report request in a cluster are automatically applied just once during Pooled Tables retrievals. To qualify, such tests must refer to the same field and apply an equality test (EQ or IS); however the actual values selected need not be the same. For example, if the first report tests WHERE FISCAL_YEAR EQ 1997 and the second tests for WHERE FISCAL_YEAR EQ 1998, Pooled Tables applies the test WHERE FISCAL_YEAR EQ 1997 OR 1998 during data retrieval. Common selection tests greatly reduce the size of answer sets returned.

Pooled Tables can also evaluate common selection criteria not based on equality tests through the FOCUS Filters feature. Filters permit specification of simple or complex selection tests against a common file for all reports. If, for example, all reports in a cluster use WHERE DELETE_FLAG NE 'Y', you can create a filter with that test. Alternately, you could change the test to read WHERE DELETE_FLAG EQ 'N' so that the common selection command is used in the Pooled Tables common read.


Top of page

x
Criteria When Pooling Non-Relational Database Requests

Reports against non-relational databases, such as VSAM, IMS, IDMS, FOCUS, and sequential files, must meet several simple criteria to be pooled into one cluster. To qualify, all reports must access the same data source, use the same Master File and share the same access method. All reports in a cluster must also share the same entry point (the reporting view must be from the same segment and, in the case of indexed access, from the same field). Reports against sequential files always meet these criteria and always pool. Reports against joined structures are pooled if they share the same access method to the host file.


Top of page

x
Criteria When Pooling Relational Database Requests

Reports against relational databases, such as UDB (DB2) and SQL/DS, can be pooled into the same cluster when they share several common attributes. Like non-relational files, all reports must access the same Master File from the same entry point. Reports requiring SQL aggregation (the generated SQL statements contain the GROUP BY phrase) are not pooled, which assures that the set presented to each report in the pool is accurate. Further, requests against a multi-table relational view must all reference the same tables to be pooled into the same cluster.

If a view contains table A and table B, all reports that reference only fields in table A can be pooled, all reports that reference only fields in table B can be pooled, and all reports referencing fields in both table A and B can be pooled. However, none of the reports in those sets could be pooled with reports from the other sets. This limitation insures that the RDBMS retrieval engine uses the same optimization logic for each report in the set.

Less stringent pooling requirements apply with optimization off (SQL SET OPTIMIZATION OFF). Since FOCUS manages the retrieval and aggregation operations in this case, pooling conditions are the same with optimization off as with non-relational databases. Restrictions regarding common accessed tables and SQL aggregation do not apply.

Pooling benefits obtained with optimization off, versus those gained by allowing the RDBMS to optimize retrievals, vary from case to case. For example, a request requiring an area sweep that returns a large answer set (even with optimization), would be a good candidate to pool with other requests if optimization were turned off.

When the interface trace facility is used for a relational database, the SQL generated for each request is echoed. The SQL is generated during the Pooled Tables parsing phase but is not submitted to the RDBMS. Instead, Pooled Tables constructs an internal request to retrieve all data for the cluster. The SQL SELECT statements generated for the cluster are echoed in the trace, and these are the statements passed to the RDBMS.

SQL SELECT statements generated by Pooled Tables are optimized by the RDBMS. Therefore, the best optimization occurs when all requests in a cluster contain the same equality screening conditions or Filters. In such cases, the screening tests are included in the SQL and passed to the RDBMS for optimization. Without application of common selections or Filters, it is possible that efficiencies gained through RDBMS optimization could be lost in pooling individual requests. Consider these two requests: the first returns a small answer set based on a selection against a key field named KEY1. The second returns a small answer set based on a selection against a key field named KEY2. The independent screening conditions are not included in the SQL generated by Pooled Tables, resulting in an area sweep and a large answer set for the cluster. If the two tests were included as an OR condition in a Filter, the screening operation would be passed to the RDBMS and a much smaller answer set returned to Pooled Tables.


Top of page

x
Criteria When Pooling Batch Requests

How to:

Pooled Tables automatically pools batch requests wherever possible if the POOLBATCH SET command is issued in a user's PROFILE or in FOCPARM. A batch is any non-interactive session. In z/OS, this is whenever ddname SYSIN is allocated to a data set. In z/VM, non-interactive jobs occur when ddname SYSIN is defined (FILEDEF) to a file, FOCUS is invoked with the syntax FOCUS IN fileid, or the z/VM session is running disconnected.



x
Syntax: How to Control Automatic Application of Pooling for Batch Processing
SET POOLBATCH = {OFF|ON}

where:

OFF

Disables automatic use of Pooled Tables for batch processing. This is the default.

POOLBATCH can be included in the FOCPARM ERRORS, FOCUS PROFILE, a FOCEXEC, or issued in the SYSIN input stream.

SET POOLBATCH=ON has the effect of automatically setting POOL=ON for batch execution. SET POOLBATCH=OFF does not reverse this setting. To disable pooling when POOLBATCH=ON, issue the command SET POOL=OFF.

ON

Enables automatic use of Pooled Tables for batch processing.


Top of page

x
Selecting a Sort Utility

How to:

Pooled Tables chooses an in-memory FOCUS sort or an external sort based on report-size estimates. Normally, the FOCUS sort is used for reports under a megabyte, and external sorts in other cases. The limiting factor on concurrently executing sorts is the amount of memory available to Pooled Tables. While Pooled Tables can execute up to 26 external sorts, this is controlled by the MAXEXTSRTS setting and by how much memory is provided below the 16-megabyte line in z/OS. In z/VM, only one external sort can be executed with SyncSort. When it is practical, the FOCUS sort is substituted for the external sort when external sorts are limited but memory is available.



x
Syntax: How to Specify a Sort Utility for Use With Pooled Tables
SET SORTLIB = sorttype 

where:

sorttype

Can be one of the following:

SYNCSORT identifies the external sort utility as SYNCSORT.

DFSORT identifies the external sort utility as DFSORT.

VMSORT identifies the external sort utility as VMSORT.

MVSMSGSS identifies the external sort utility as SYNCSORT and its messages are displayed (z/OS only).

MVSMSGDF identifies the external sort utility as DFSORT and its messages are displayed (z/OS only).



x
Syntax: How to Limit the Number of Concurrent External Sorts That Can Run
SET MAXEXTSRTS=n 

where:

n

Is the maximum number (from 1 to 26) of concurrent external sorts permitted. The default is 26.

In z/VM, only one version of SyncSort can run concurrently. If you use SyncSort in z/VM, the value of MAXEXTSRTS is assumed to be 1.


Top of page

x
Observing the Results of Pooling (TRACEON)

How to:

Reference:

The Pooled Tables trace facility breaks down pools into sub-pools and clusters, warns when memory allocation is insufficient, and displays report statistics. The trace facility shows how pools were executed to help developers tune their applications.



x
Syntax: How to Turn on the Pooled Tables Trace
SET TRACEUSER=ON
SET TRACEOFF=ALL
SET TRACEON=POOLTABL //{CLIENT|FSTRACE}

where:

CLIENT

Directs trace output to the terminal.

FSTRACE

Is a ddname where trace output can be directed. You must allocate a FILEDEF ddname FSTRACE to a sequential data source. Recommended DCB attributes are RECFM=F and LRECL=160.

Note: SET TRACEUSER=ON is required to enable the trace facility. SET TRACEOFF=ALL ensures that no traces are activated. When you then activate the Pooled Tables trace, it will be the only trace activated.



x
Syntax: How to Turn Off the Trace Facility
SET TRACEOFF=POOLTABL

where:

POOLTABL

Ends the Pooled Tables Trace facility.



x
Reference: Trace Output

These messages indicate sub-pool boundary encounters:

Sub pool boundary--prior output required as input
Sub pool boundary--FOCUS/SET command
Sub pool boundary--DEFINE ADD
Sub pool boundary--new MASTER name
Sub pool boundary--new DEFINE clears pre-pool DEFINE
This command will run now, outside of pooling:
A DEFINE ADD will run now, outside of pooling.

These messages indicate cluster boundary encounters:

Cluster boundary--new master name
Cluster boundary--single-table cluster
Cluster boundary--new alternate view
Cluster boundary--new pool flag
Cluster boundary--new pool condition
Cluster boundary--mid-stream DEFINE
Cluster boundary--new entry segment
Cluster boundary--too many verb objects

These messages indicate reports that cannot be pooled (single-table clusters):

Single-table cluster--REDEFINEd real field
Single-table cluster--User subroutine not known safe 
Single-table cluster--self-referential DBA/filter
Single-table cluster--INCLUDES/EXCLUDES selection
Single-table cluster--too many test literals
Single-table cluster--complex test on index
Single-table cluster--$ORTPARM allocated
Single-table cluster--REDEFINEd constant real field
Single-table cluster--RANKED BY
Single-table cluster--COUNT DISTINCT
Single-table cluster--RECAP
Single-table cluster--COUNT is a verb object
Single-table cluster--indexed view via AUTOINDEX
Single-table cluster--EMR
Single-table cluster--ON TABLE SET
Single-table cluster--TEXT field
Single-table cluster--PREVIEW mode
Single-table cluster--ALL = ON/PASS
Single-table cluster--per message above
Single-table cluster--indexed view for FOCUS database 
Single-table cluster--non-poolable interface request
Single-table cluster--too many verb objects

These trace messages appear during the creation and execution of clusters and iterations:

Building cluster x...
Cluster contains n table(s)
Cluster n dedicated to command x               
Clusters built; sub pool contains x cluster(s). 
****** Stack before 1st cluster: ******        
****** Stack before nth cluster: ******        
****** Begin union table ******                
**** Stack before nth iteration: ****

During the parsing phase of Pooled Tables, the following statistics are displayed for each report. These indicate whether a report request can be pooled and under what conditions. All reports with the same pooling criteria can be pooled together.

Entry Segment   : x 
Relational Flag : y 
Pool Flag       : z 
Condition Length: n 
Condition       : c

After execution of a pooled report, the output from ? STAT is included in the trace. The entries for TRACKIO and MINIO are included in the output, but their values are not populated. In addition, the following statistics are included:

TRAVERSAL MTHD =           x       ENTRY SEGMENT  =           I   
FOCUS SORT MEM =          y1       EXTSORT MEMORY =          y2   
ALGORITHM USED =           z

The following trace messages indicate limitations imposed on Pooled Tables by users in executing reports under less than the most favorable conditions, based on parameters provided for POOLMEMORY, POOLRESERVE, ESTRECORDS, and ESTLINES or available memory. These messages do not inhibit the execution of Pooled Tables, but make it less efficient. To correct these situations, replace the values for ESTRECORDS and ESTLINES with accurate values or increase the memory allocated for Pooled Tables.

# concurrent external sorts reduced from x to y by below-16M shortage   
Minimum sort memory forces iterations                                   
Warning--POOLMEMORY desired = x but only y is available                 
Warning: actual line count (x) exceeds lines estimate (y) in heavy 
aggregation case
Warning: records estimate (x) off by more than 10%-actual record count=y 
Warning: lines estimate (x) off by more than 10%-actual line count = y

Top of page

x
Installing the Pooled Tables Option

How to:

This section provides installation instructions for all systems: IMS, z/OS, and z/VM.



x
Procedure: How to Install on All Systems

Enable Pooled Tables for your release of FOCUS by including the following command in FOCPARM:

SET POOLFEATURE = ON

To disable Pooled Tables, include the following command in the FOCPARM file:

SET POOLFEATURE = OFF 

If FOCPARM does not contain a SET POOLFEATURE command, FOCUS assumes Pooled Tables is disabled.

The maximum memory above 16 megabytes that can be requested with the SET POOLMEMORY command can be restricted by including the SET MAXPOOLMEM = n command in FOCPARM.

To make POOL = ON the default for all batch jobs, include the command SET POOLBATCH = ON. This must follow the SET POOLFEATURE = ON command in FOCPARM.

Each of the commands is also included in member FOCPARM of ERRORS.DATA (z/OS) or in the file FOCPARM ERRORS (CMS).



x
Procedure: How to Install on z/OS

Include the POOLFEATURE, POOLBATCH, and MAXPOOLMEM commands in member FOCPARM in ERRORS.DATA as outlined above. Refer to your FOCUS documentation to change the default allocation for the file FOCPOOLT.

If you use DFSort and try to run more than 10 sorts concurrently, DFSort displays this message:

ICE149A     DFSORT IS NOT LICENSED FOR USE ON THIS SYSTEM. RETURN CODE 12, REASON CODE 4. 

This causes FOCUS to ABEND. Issue the command SET MAXEXTSRTS=10 to avoid this symptom temporarily. IBM has fixed this problem with APAR OW29152. Order IBM PTF UW41671 if you run SMS Release 1.3. Order IBM PTF UW41672 if you run SMS 1.4.



x
Procedure: How to Install on z/VM

Include the POOLFEATURE, POOLBATCH, and MAXPOOLMEM commands in the file FOCPARM ERRORS as outlined above. Change the value of POOLRESERVE in FOCPARM ERRORS if appropriate for your installation.



x
Syntax: How to Configure Pooled Tables

To configure Pooled Tables, include the following commands in the FOCPARM file

SET POOLFEATURE = {OFF|ON}

where:

OFF

Disables Pooled Tables for this FOCUS site. OFF is the default value.

ON

Enables Pooled Tables for this FOCUS site.

SET POOLBATCH = {OFF|ON}

where:

OFF

Does not enable automatic use of Pooled Tables for batch processing. This is the default.

POOLBATCH can be included in the FOCPARM ERRORS, FOCUS PROFILE, a FOCEXEC, or issued in the SYSIN input stream.

SET POOLBATCH=ON has the effect of automatically setting POOL=ON for batch execution. SET POOLBATCH=OFF will not reverse this setting. To disable pooling when POOLBATCH=ON, issue the command SET POOL=OFF.

ON

Enables automatic use of Pooled Tables for batch processing.

SET MAXPOOLMEM = n 

where:

n

Sets an upper limit in kilobytes for memory above 16 megabytes that users can allocate in the SET POOLMEMORY command. The default is 32,768 K (32 M) and the minimum is 1,024K.


Information Builders