Feedback
Did this article resolve your question/issue?

   

Article

How to change database block size?

« Go Back

Information

 
TitleHow to change database block size?
URL NameP6430
Article Number000129086
EnvironmentProduct: Progress
Version: 8.2X, 8.3X, 9.x
Product: OpenEdge
Version: 10.x, 11.x
OS: All supported platforms
Question/Problem Description
How to change database block size? 
How to increase the block size for a database?
Steps to Reproduce
Clarifying Information
Error Message
Defect/Enhancement Number
Cause
Resolution
There is no conversion utility available to convert from one database block size to another. The existing database must be DUMPED and LOADED into a database with the a new structure.

Progress V8.2 introduces a feature that enhances database performance: Database Variable-block Size.
At creation of a database, specify a database block size that is a multiple of 1024 Bytes. Specifically, 1024, 2048, 4096 and 8192 Bytes.

Previous to v8.2, Progress only created Databases with a blocksize of 1024 Bytes (1 KB), regardless of the File System block size.

The fact that File Systems have different block sizes, added value the value of creating a progress database with a database block size the same as the File System block size.

By default, progress creates a database with a 1k blocksize.

The following lists the default File Systems and their system blocksize.

OS Blocksize V7 DB Blocksize
----------------------------------------
UNIX (most) 1024 bytes (1k) 1024 bytes (1k)
NT 4096 (4k) 4096 bytes (4k)
VMS 512 (.5k) 1024 bytes (1k)
DOS 1024 (1k) 1024 bytes (1k)
SEQUENT 2048 (2k) 2048 bytes (2k)

CREATING A MULTI-VOLUME DATABASES:
 
prostrct create <dbname> <dbname.st> -blocksize <num>

where -blocksize <num>
1024
2048
4096
8192

-blocksize must be the last argument on the command line.

CREATING A SINGLE VOLUME DATABASES:
 
prodb <dbname> $DLC/empty1
..... empty2
..... empty4
..... empty8

procopy $DLC/empty1 <dbname>
... empty2 <dbname>
... empty4 <dbname>
... empty8 <dbname>

DATABASE BUFFERS (-B) AND VARIABLE BLOCKSIZE DATABASES

The -B parameter is used to define the number of database blocks to be loaded in the database buffer pool at startup of the database broker. If a database was created with the default block size of 1KB, (prior to Version 8.2) the database buffer pool (-B) will be in 1 KB increments. If a database has been created with a block size of 2KB, 4 KB or 8 KB, then the database buffer pool (-B) will be in the increments of 2 KB, 4 KB or 8 KB, respectively. This can be displayed from the promon utility in R&D,option 1, option 14 Shared Memory Segments.  

The following, lists Shared memory segment sizes from different Database block sizes on an HP-UX 10.10. Note the segment size is slightly larger than the blocksize multiplied by the (-B 1000).

The point here is to be aware that the amount of memory increases (-B) parallel to the size of the database blocksize.

Example: proserve <dbname> -B 1000

Shared Memory Alloc. x (-B) = Segment Size

DB Blocksize(bytes) Shared Memory Alloc(bytes) Segment Size(bytes)
----------------------------------------------------
1024 1380 1413120
2048 2432 2490368
4096 4540 4648960
8192 8756 8966144

DISADVANTAGES:
  1. There is no conversion utility available to convert from one database block size to another. The existing database must be DUMPED and LOADED into a database with the a new structure.
  2. Procopy or prorest command cannot be used to create a database of a different block size. The following error will occur:
Source and Target databases should have same block size: 1024, 4096

A database will use more disk space moving to a larger block size. For example, converting a database with 100 records from a 1 KB block size with 32 records per block to an 8 KB block size with 64 records per block produces the following results:

1KB block size : 100rec/32rec per block = 3.125(or 4blks) x 1 KB = 4 KB
8 KB block size : 100rec/64rec per block = 1.563(or 2blks) x 8 KB = 16 KB

ADVANTAGES:
  1. It has been increasingly noticed that a larger block size than 1 KB are becoming available on many OS platforms. There are performance improvements in moving to block sizes that are equal to or a multiple of the underlying file system's block size.
  2. There are underlying physical differences between 1, 2, 4 and 8 KB database block sizes. The record manager will manage 64 records per block with an 8 KB blocksize database and 32 records per block with a 1, 2 and 4 KB blocksize database. Thus. reducing the amount of i/o required to access records both through an index and sequentially.. reducing the amount of i/o required to access records both through an index and sequentially..
Workaround
Notes
Last Modified Date11/23/2015 11:03 PM
Attachment 
Files
Disclaimer The origins of the information on this site may be internal or external to Progress Software Corporation (“Progress”). Progress Software Corporation makes all reasonable efforts to verify this information. However, the information provided is for your information only. Progress Software Corporation makes no explicit or implied claims to the validity of this information.

Any sample code provided on this site is not supported under any Progress support program or service. The sample code is provided on an "AS IS" basis. Progress makes no warranties, express or implied, and disclaims all implied warranties including, without limitation, the implied warranties of merchantability or of fitness for a particular purpose. The entire risk arising out of the use or performance of the sample code is borne by the user. In no event shall Progress, its employees, or anyone else involved in the creation, production, or delivery of the code be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the sample code, even if Progress has been advised of the possibility of such damages.