From 9839f8156a2ea4fc65b8207310750119845ec64a Mon Sep 17 00:00:00 2001 From: Dmitry Yemanov Date: Sat, 29 Nov 2025 11:30:06 +0300 Subject: [PATCH 1/2] More accurate (methinks) calculation of the average page fill factor --- src/utilities/gstat/dba.epp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/utilities/gstat/dba.epp b/src/utilities/gstat/dba.epp index c9e08be3a34..a2c4d105ef2 100644 --- a/src/utilities/gstat/dba.epp +++ b/src/utilities/gstat/dba.epp @@ -1072,9 +1072,10 @@ int gstat(Firebird::UtilSvc* uSvc) uSvc->printf(false, " Pointer pages: %ld, data page slots: %ld\n", relation->rel_pointer_pages, relation->rel_slots); - const double average = (relation->rel_data_pages) ? + const auto nonEmptyPages = relation->rel_data_pages - relation->rel_empty_pages; + const double average = nonEmptyPages ? (double) relation->rel_total_space * 100 / - ((double) relation->rel_data_pages * (tddba->page_size - DPG_SIZE)) : 0.0; + ((double) nonEmptyPages * (tddba->page_size - DPG_SIZE)) : 0.0; uSvc->printf(false, " Data pages: %ld, average fill: %.0f%%\n", relation->rel_data_pages, average); @@ -1379,7 +1380,6 @@ static void analyze_data( dba_rel* relation, bool sw_record) ++relation->rel_slots; if (*ptr) { - ++relation->rel_data_pages; if (!analyze_data_page(relation, (const data_page*) db_read(*ptr), sw_record)) { dba_print(false, 18, SafeArg() << *ptr); @@ -1419,6 +1419,8 @@ static bool analyze_data_page( dba_rel* relation, const data_page* page, bool sw if (page->dpg_header.pag_type != pag_data) return false; + ++relation->rel_data_pages; + if (sw_record) { memcpy(tddba->buffer2, (const SCHAR*) page, tddba->page_size); @@ -1432,7 +1434,7 @@ static bool analyze_data_page( dba_rel* relation, const data_page* page, bool sw { if (tail->dpg_offset && tail->dpg_length) { - space += tail->dpg_length; + space += FB_ALIGN(tail->dpg_length, FB_ALIGNMENT); if (sw_record) { From 2682f4e8df5973b55e45071ceec68154eef04725 Mon Sep 17 00:00:00 2001 From: Dmitry Yemanov Date: Mon, 1 Dec 2025 09:01:17 +0300 Subject: [PATCH 2/2] Correction --- src/utilities/gstat/dba.epp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utilities/gstat/dba.epp b/src/utilities/gstat/dba.epp index a2c4d105ef2..c37f9891be2 100644 --- a/src/utilities/gstat/dba.epp +++ b/src/utilities/gstat/dba.epp @@ -1434,7 +1434,7 @@ static bool analyze_data_page( dba_rel* relation, const data_page* page, bool sw { if (tail->dpg_offset && tail->dpg_length) { - space += FB_ALIGN(tail->dpg_length, FB_ALIGNMENT); + space += FB_ALIGN(tail->dpg_length, ODS_ALIGNMENT); if (sw_record) {