Make data (and index) block size configurable per database or per table
Currently, the block size is fixed and needs to be re-compiled to change. On HDD, block size difference is normally negligible
but on SSD, it's significant. I recently did a simple random disk read benchmarks on Intel SSD (X25-E) then got the following number.
5.9k iops on 32KB i/o unit
9.2k iops on 16KB i/o unit
12.4k iops on 8KB i/o unit
20k iops on 1KB i/o unit
All of them are great numbers, but difference is significant.
According to Paul's comments, supporting configurable data block (not index block) would make sense because most of index blocks are generally cached in memory so random reads on SSDs do not happen so many times. And supporting only 1KB, 4KB, 8KB, 16KB and 32KB blocks also makes sense to avoid fragmentation.
Paul's comments:
---
A dynamic block size would be easy for the row pointer (.xtr) and data handle (.xtd) files. But it would be difficult for the index files (.xti). The reason is because if the way the index cache memory is managed. Managing one block size is much easier than managing multiple block sizes.
In addition, if we use multiple block sizes you get fragmentation, and the memory usage is not optimal.
---
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- New
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by