============================================================================== Topic: ISAM Title: Empty Index Block Calculation Lies Posted by: Jeff Kreider Mail box: JABA/AM Date posted: 05/22/93 Time posted: 8:39 PM Times read: 21 ------------------------------- Message Text --------------------------------- Jeff Kreider, Consultant is chagrinned. Not only did he write a bug, he lied to you. In "Inside ISAM", appendix D, I describe how to write a basic program to anticipate the number of empty index blocks required of ISMBLD based on the parameters prompted. In the analysis, I show that it is necessary to calculate the number of blocks required for each of the three levels of an ISAM index. Each of these formulas requires isolating a number "X" in the form: qty = X*(seed - some'stuff) + some'stuff - some'other In the process of solving for X, I point out that it is the integer amount of X that is needed and any fractional part may be ignored. "WRONG, calculus breath!" I say to myself. The fractional part IS significant. Ignoring it could make the calculated blocks short by as much as 3 blocks. Consequently, I have placed in the UPLOAD: account ISMBLD.BAS which is a program built with the correct algorithm (I suspect it will be moved, eventually, to the Basic Utilities account). Those of you who have "Inside ISAM", the following are the details on how to change your copy for accuracy: Page 151: WAS: N=INT((REC'CNT-BLK+1)/HLF'BLK) SHOULD BE: N=(REC'CNT-BLK+1)/HLF'BLK IF N # INT(N) THEN N=INT(N+1) WAS: Z=INT((THIRD'LEVEL - BLK)/HLF'BLK) SHOULD BE: Z=(THIRD'LEVEL - BLK)/HLF'BLK IF Z # INT(Z) THEN Z=INT(Z+1) Page 152 at the top: WAS: I = INT((SEC'LEVEL - BLK)/HLF'BLK) SHOULD BE: I = (SEC'LEVEL - BLK)/HLF'BLK IF I # INT(I) THEN I=INT(I+1) Page 154, Note #2 should read: Our assumption is that the last block contains BLK-1 entries, which are subtracted from the record count (REC'CNT) to calculate N. Any fractional part of N, will cause another block to be required. This fractional part suggests that less than HLF'BLK entries will reside in it. Actually, this block will also have HLF'BLK entries the entries in the last block will be reduced from the BLK-1 entries of our assumption. Similar changes should be noted in AMSD Journal Article, "ISAM: Calculating the Number of Empty Index Blocks", file 3.3.7 in the Software Volume from November, 1985. I was curious why it took so long (8 years!) for the problem to materialize. A case in point is with a 12-byte key because a 12 byte key with 15000 records will exactly fill the ISAM index during ISMBLD. Most people build a file from 10 to 50% bigger than their current needs and rebuild when the file runs out of room or they notice it is within 80 to 95% of capacity. In either case, how big it should have been is either academic or goes unnoticed. I apologize for any inconvenience this may have caused. Jeff Kreider, Consultant .