OpenEdge provides us a variety of utilities to pull out reports related to the database and which we can use to analyse and plan how the database structure/data should be maintained in the database.
Following are some key utilities used for database reporting at various object level:
DB Analysis:
proutil dbname -C dbanalys
This will result in output being directed to the screen. To direct output to a file for review use > output filename.
The results from the utility is segmented into 3 categories:
1. Free Chain Analysis
======================
"<n> block(s) found in the free chain"
This is the number of completely empty blocks that are available for use. They are listed in the free chain and are available for any usage.
2. RM Chain Analysis
====================
"LIST OF RM CHAIN BLOCKS"
These are the blocks that may (not guaranteed) have free space that are available to be used to add new records.The listing gives first the dbkey that is available, second the amount of free space in bytes, third the number of record slots in the block that are free, followed by the number of slots being used.
At the end of the chain list is the total amount of blocks in the RM free chain. The chain should be checked to be sure that the chain is not "clogged" with small size entries at the beginning. This can cause inefficient use of space, as a free (empty) block would be used rather than existing blocks from the RM chain list. Should this be the case, there are two of options:
1. Dump and reload the database to reformat the space and reallocate free space. This may not always be the best choice. Before doing a dump and load determine how well the database is allocated by checking the RM block space utilization percentage.(see the next section).
2. Try adding a number of smaller dummy records to remove the entries from the beginning of the chain. This sometimes works but in no way guarantees that the chain will not clog again later.
3. BLOCK ANALYSIS
=================
"<n> RM block(s) found in the database"
"<n>% of the RM block space is used"
-----------------------------------------
This is the total number of blocks in the Record Manager portion (data) of the database. The block size times the number of blocks will give the actual data size. The percentage should be between 70% and 90%. If it is below 70% then the database is a candidate for a dump and reload. If the size is over 90% then the database space is being allocated very well.
"<n> index block(s) found in the database"
"<n>% of the index block space is used"
------------------------------------------
This is the total number of Index Blocks (Indexes) of the database. The block size times the number of blocks will give the actual index size. On average, the index blocks are 60% to 75% full.
Index Block Summary
-------------------
Index name - The index name
Index - This is _Index._index-num
Blocks - The number of blocks for that index
Bytes - The number of bytes used by that index
%Utiliz - .The percentage of space used within the blocks allocated to that index. Should this percentage be less than 70% and the index is large, it would be an indication that the index should
be rebuilt.
% of all Indexes - This is the size of the index (%) as related to all the indexes. The larger the percentage, the greater impact of an index rebuild on space.
4. Summary
==========
1. Rebuild any large indexes under 70% utilization.
2. If RM block space is less than 70% utilization or exceeds 90%, then the database may be a candidate for a dump and reload to re-allocate space. Again, these numbers are a guideline only. Whether it should be dumped or left alone depends on how the data are used.
3. Check the RM chain list to make sure that the chain is not being clogged with small byte size records at the top of chain. A sign of a clogged chain is when the database appears to be growing when there have been numerous deletes. With each version of Progress improvements are made in the usage of RM chains, weighing performance against database space utilization.
4. Every Database is different. This has to be taken into account when evaluating any numbers that the Dbanalys should return. Be sure to understand the database being analyzed before making any decisions to dump and reload. Evaluate whether it is static or dynamic. Also note that in some cases where a database is spread across multiple disks, it may be best leaving it as is with regards to performance, because of the randomness in the physical distribution of the data.
Table Analysis:
proutil dbname -C tabanalys
Displays information about the degree of fragmentation for each table in a database. Also displays summary information about record and LOB (if present) sizes for each table.
The following output is a sample display of PROUTIL TABANALYS:
RECORD BLOCK SUMMARY FOR AREA "DataArea": 17
-------------------------------------------------------
RECORD BLOCK SUMMARY FOR SHARED TABLES
--------------------------------------
-Record Size (B)- ---Fragments--- Scatter
Table Records Size Min Max Mean Count Factor Factor
PUB.cust 26 1.7K 55 76 68 26 1.0 1.0
PUB.cust-list.Initial 0 0.0B 0 0 0 0 0.0 0.0
PUB.cust-list.list1 3 202.0B 66 68 67 3 1.0 20.3
PUB.cust-list.list2 10 645.0B 56 77 64 10 1.0 20.3
PUB.cust-list.list3 4 291.0B 71 74 72 4 1.0 20.3
PUB.cust-list-range.Initial 0 0.0B 0 0 0 0 0.0 0.0
PUB.cust-range.Initial 0 0.0B 0 0 0 0 0.0 0.0
PUB.cust-rvalue.Initial 0 0.0B 0 0 0 0 0.0 0.0
PUB.state 51 1.7K 29 40 34 51 1.0 1.0
PUB.stock.Initial(Composite)
50000 18.5M 368 406 387 50000 1.0 1.0
.
.
.
LOB SUMMARY FOR AREA dbArea3: 9
LOB SUMMARY FOR SHARED TABLES:
----------------------------------------------
--- LOB Size ---
Table LOBs Size Min Max Mean
PUB.Invoice:1
InvBlob1:5 400 55.1M 1.0B 976.6K 141.0K
InvBlob2:6 400 54.9M 1.0B 976.6K 140.4K
InvClob1:7 400 39.3M 1.0B 976.6K 100.5K
---------------------------------------------
Subtotals: 1200 149.2M 1.0B 976.6K 127.3K
Summary for AREA "dbArea3": 9
----------------------------------------------
Subtotals: 1200 149.2M 1.0B 976.6K 127.3K
Generally, if the Scatter Index field / Factor value value in the tab analys report for the larger tables is above 2.0 then you should dump/load the table. Remember to perform a tabanalys after the dump/load to get baseline figures.
Index Analysis:
proutil dbname -C idxanalys
It Displays information on index blocks.
The following output is a sample display of PROUTIL IDXANALYS:
INDEX BLOCK SUMMARY FOR AREA "Employee": 7
-------------------------------------------------------
INDEX BLOCK SUMMARY FOR SHARED OBJECTS:
--------------------------------------------
Table Index Fields Levels Blocks Size % Util Factor
PUB.Benefits
EmpNo 8 1 1 1 197.0B 4.8 1.0
PUB.Department
DeptCode 18 1 1 1 84.0B 2.1 1.0
PUB.Employee
DeptCode 20 1 1 1 132.0B 3.2 1.0
EmpNo 19 1 1 1 503.0B 12.4 1.0
Name 21 2 1 1 1.0K 25.5 1.0
PUB.Family
EmpNoRelativeName 22 2 1 1 1.4K 36.4 1.0
PUB.TimeSheet
EmpNoDayRecorded 59 2 1 1 293.0B 7.2 1.0
PUB.Vacation
EmpNoStartDate 60 2 1 1 152.0B 3.7 1.0
------------------------------------------------------------------
Subtotals: 8 3.8K 11.9 0.0
INDEX BLOCK SUMMARY FOR AREA "Inventory": 8
-------------------------------------------------------
INDEX BLOCK SUMMARY FOR SHARED OBJECTS:
--------------------------------------------
Table Index Fields Levels Blocks Size % Util Factor
PUB.Bin
BinNum:0 10 1 2 3 6.8K 57.1 1.9
ItemNum:0 11 1 1 1 1.8K 46.2 1.0
PUB.Item
CatDescription 34 1 2 3 4.1K 34.5 2.3
Category2ItemName 35 2 1 1 958.0B 23.5 1.0
CategoryItemName 36 2 1 1 1.0K 26.1 1.0
ItemName 37 1 1 1 934.0B 23.0 1.0
ItemNum 33 1 1 1 503.0B 12.4 1.0
PUB.POLine
PONumLinenum 47 2 2 15 51.3K 86.1 1.3
PUB.PurchaseOrder
PONum 48 1 2 6 18.8K 78.9 1.4
PUB.Supplier
SupplierID 56 1 1 1 97.0B 2.4 1.0
PUB.SupplierItemXref
ItemNumSupplierID 58 2 1 1 624.0B 15.3 1.0
SupplieridItemNum 57 2 1 1 542.0B 13.3 1.0
PUB.Warehouse
warehousename 62 1 1 1 307.0B 7.5 1.0
warehousenum 61 1 1 1 133.0B 3.3 1.0
------------------------------------------------------------------
Subtotals: 37 87.9K 59.8 0.2
The IDXANALYS qualifier provides:
*The number of fields and levels in each index
*The size of each index, in blocks and in bytes
*The percent utilization within the index (that is, the degree of disk space efficiency)
*A factor value that indicates whether to rebuild each index
*A summary of indexes for the current database and the percentage of total index space used by each index
Comments