solana_accounts_db/accounts_db/
stats.rs

1use {
2    crate::{accounts_index::AccountsIndexRootsStats, append_vec::APPEND_VEC_STATS},
3    solana_sdk::timing::AtomicInterval,
4    std::{
5        num::Saturating,
6        sync::atomic::{AtomicU64, AtomicUsize, Ordering},
7    },
8};
9
10#[derive(Debug, Default)]
11pub struct AccountsStats {
12    pub delta_hash_scan_time_total_us: AtomicU64,
13    pub delta_hash_accumulate_time_total_us: AtomicU64,
14    pub delta_hash_num: AtomicU64,
15    pub skipped_rewrites_num: AtomicUsize,
16
17    pub last_store_report: AtomicInterval,
18    pub store_hash_accounts: AtomicU64,
19    pub calc_stored_meta: AtomicU64,
20    pub store_accounts: AtomicU64,
21    pub store_update_index: AtomicU64,
22    pub store_handle_reclaims: AtomicU64,
23    pub store_append_accounts: AtomicU64,
24    pub stakes_cache_check_and_store_us: AtomicU64,
25    pub store_num_accounts: AtomicU64,
26    pub store_total_data: AtomicU64,
27    pub create_store_count: AtomicU64,
28    pub store_get_slot_store: AtomicU64,
29    pub store_find_existing: AtomicU64,
30    pub dropped_stores: AtomicU64,
31    pub handle_dead_keys_us: AtomicU64,
32    pub purge_exact_us: AtomicU64,
33    pub purge_exact_count: AtomicU64,
34}
35
36#[derive(Debug, Default)]
37pub struct PurgeStats {
38    pub last_report: AtomicInterval,
39    pub safety_checks_elapsed: AtomicU64,
40    pub remove_cache_elapsed: AtomicU64,
41    pub remove_storage_entries_elapsed: AtomicU64,
42    pub drop_storage_entries_elapsed: AtomicU64,
43    pub num_cached_slots_removed: AtomicUsize,
44    pub num_stored_slots_removed: AtomicUsize,
45    pub total_removed_storage_entries: AtomicUsize,
46    pub total_removed_cached_bytes: AtomicU64,
47    pub total_removed_stored_bytes: AtomicU64,
48    pub scan_storages_elapsed: AtomicU64,
49    pub purge_accounts_index_elapsed: AtomicU64,
50    pub handle_reclaims_elapsed: AtomicU64,
51}
52
53impl PurgeStats {
54    pub fn report(&self, metric_name: &'static str, report_interval_ms: Option<u64>) {
55        let should_report = report_interval_ms
56            .map(|report_interval_ms| self.last_report.should_update(report_interval_ms))
57            .unwrap_or(true);
58
59        if should_report {
60            datapoint_info!(
61                metric_name,
62                (
63                    "safety_checks_elapsed",
64                    self.safety_checks_elapsed.swap(0, Ordering::Relaxed),
65                    i64
66                ),
67                (
68                    "remove_cache_elapsed",
69                    self.remove_cache_elapsed.swap(0, Ordering::Relaxed),
70                    i64
71                ),
72                (
73                    "remove_storage_entries_elapsed",
74                    self.remove_storage_entries_elapsed
75                        .swap(0, Ordering::Relaxed),
76                    i64
77                ),
78                (
79                    "drop_storage_entries_elapsed",
80                    self.drop_storage_entries_elapsed.swap(0, Ordering::Relaxed),
81                    i64
82                ),
83                (
84                    "num_cached_slots_removed",
85                    self.num_cached_slots_removed.swap(0, Ordering::Relaxed),
86                    i64
87                ),
88                (
89                    "num_stored_slots_removed",
90                    self.num_stored_slots_removed.swap(0, Ordering::Relaxed),
91                    i64
92                ),
93                (
94                    "total_removed_storage_entries",
95                    self.total_removed_storage_entries
96                        .swap(0, Ordering::Relaxed),
97                    i64
98                ),
99                (
100                    "total_removed_cached_bytes",
101                    self.total_removed_cached_bytes.swap(0, Ordering::Relaxed),
102                    i64
103                ),
104                (
105                    "total_removed_stored_bytes",
106                    self.total_removed_stored_bytes.swap(0, Ordering::Relaxed),
107                    i64
108                ),
109                (
110                    "scan_storages_elapsed",
111                    self.scan_storages_elapsed.swap(0, Ordering::Relaxed),
112                    i64
113                ),
114                (
115                    "purge_accounts_index_elapsed",
116                    self.purge_accounts_index_elapsed.swap(0, Ordering::Relaxed),
117                    i64
118                ),
119                (
120                    "handle_reclaims_elapsed",
121                    self.handle_reclaims_elapsed.swap(0, Ordering::Relaxed),
122                    i64
123                ),
124            );
125        }
126    }
127}
128
129#[derive(Default, Debug)]
130pub struct StoreAccountsTiming {
131    pub store_accounts_elapsed: u64,
132    pub update_index_elapsed: u64,
133    pub handle_reclaims_elapsed: u64,
134}
135
136impl StoreAccountsTiming {
137    pub fn accumulate(&mut self, other: &Self) {
138        self.store_accounts_elapsed += other.store_accounts_elapsed;
139        self.update_index_elapsed += other.update_index_elapsed;
140        self.handle_reclaims_elapsed += other.handle_reclaims_elapsed;
141    }
142}
143
144#[derive(Debug, Default)]
145pub struct FlushStats {
146    pub num_flushed: Saturating<usize>,
147    pub num_purged: Saturating<usize>,
148    pub total_size: Saturating<u64>,
149    pub store_accounts_timing: StoreAccountsTiming,
150    pub store_accounts_total_us: Saturating<u64>,
151}
152
153impl FlushStats {
154    pub fn accumulate(&mut self, other: &Self) {
155        self.num_flushed += other.num_flushed;
156        self.num_purged += other.num_purged;
157        self.total_size += other.total_size;
158        self.store_accounts_timing
159            .accumulate(&other.store_accounts_timing);
160        self.store_accounts_total_us += other.store_accounts_total_us;
161    }
162}
163
164#[derive(Debug, Default)]
165pub struct LatestAccountsIndexRootsStats {
166    pub roots_len: AtomicUsize,
167    pub uncleaned_roots_len: AtomicUsize,
168    pub roots_range: AtomicU64,
169    pub rooted_cleaned_count: AtomicUsize,
170    pub unrooted_cleaned_count: AtomicUsize,
171    pub clean_unref_from_storage_us: AtomicU64,
172    pub clean_dead_slot_us: AtomicU64,
173}
174
175impl LatestAccountsIndexRootsStats {
176    pub fn update(&self, accounts_index_roots_stats: &AccountsIndexRootsStats) {
177        if let Some(value) = accounts_index_roots_stats.roots_len {
178            self.roots_len.store(value, Ordering::Relaxed);
179        }
180        if let Some(value) = accounts_index_roots_stats.uncleaned_roots_len {
181            self.uncleaned_roots_len.store(value, Ordering::Relaxed);
182        }
183        if let Some(value) = accounts_index_roots_stats.roots_range {
184            self.roots_range.store(value, Ordering::Relaxed);
185        }
186        self.rooted_cleaned_count.fetch_add(
187            accounts_index_roots_stats.rooted_cleaned_count,
188            Ordering::Relaxed,
189        );
190        self.unrooted_cleaned_count.fetch_add(
191            accounts_index_roots_stats.unrooted_cleaned_count,
192            Ordering::Relaxed,
193        );
194        self.clean_unref_from_storage_us.fetch_add(
195            accounts_index_roots_stats.clean_unref_from_storage_us,
196            Ordering::Relaxed,
197        );
198        self.clean_dead_slot_us.fetch_add(
199            accounts_index_roots_stats.clean_dead_slot_us,
200            Ordering::Relaxed,
201        );
202    }
203
204    pub fn report(&self) {
205        datapoint_info!(
206            "accounts_index_roots_len",
207            ("roots_len", self.roots_len.load(Ordering::Relaxed), i64),
208            (
209                "uncleaned_roots_len",
210                self.uncleaned_roots_len.load(Ordering::Relaxed),
211                i64
212            ),
213            (
214                "roots_range_width",
215                self.roots_range.load(Ordering::Relaxed),
216                i64
217            ),
218            (
219                "unrooted_cleaned_count",
220                self.unrooted_cleaned_count.swap(0, Ordering::Relaxed),
221                i64
222            ),
223            (
224                "rooted_cleaned_count",
225                self.rooted_cleaned_count.swap(0, Ordering::Relaxed),
226                i64
227            ),
228            (
229                "clean_unref_from_storage_us",
230                self.clean_unref_from_storage_us.swap(0, Ordering::Relaxed),
231                i64
232            ),
233            (
234                "clean_dead_slot_us",
235                self.clean_dead_slot_us.swap(0, Ordering::Relaxed),
236                i64
237            ),
238            (
239                "append_vecs_open",
240                APPEND_VEC_STATS.mmap_files_open.load(Ordering::Relaxed),
241                i64
242            ),
243            (
244                "append_vecs_dirty",
245                APPEND_VEC_STATS.mmap_files_dirty.load(Ordering::Relaxed),
246                i64
247            ),
248            (
249                "append_vecs_open_as_file_io",
250                APPEND_VEC_STATS.open_as_file_io.load(Ordering::Relaxed),
251                i64
252            )
253        );
254
255        // Don't need to reset since this tracks the latest updates, not a cumulative total
256    }
257}
258
259#[derive(Debug, Default)]
260pub struct CleanAccountsStats {
261    pub purge_stats: PurgeStats,
262    pub latest_accounts_index_roots_stats: LatestAccountsIndexRootsStats,
263
264    // stats held here and reported by clean_accounts
265    pub clean_old_root_us: AtomicU64,
266    pub clean_old_root_reclaim_us: AtomicU64,
267    pub remove_dead_accounts_remove_us: AtomicU64,
268    pub remove_dead_accounts_shrink_us: AtomicU64,
269    pub clean_stored_dead_slots_us: AtomicU64,
270    pub get_account_sizes_us: AtomicU64,
271    pub slots_cleaned: AtomicU64,
272}
273
274impl CleanAccountsStats {
275    pub fn report(&self) {
276        self.purge_stats.report("clean_purge_slots_stats", None);
277        self.latest_accounts_index_roots_stats.report();
278    }
279}
280
281#[derive(Debug, Default)]
282pub struct ShrinkAncientStats {
283    pub shrink_stats: ShrinkStats,
284    pub ancient_append_vecs_shrunk: AtomicU64,
285    pub total_us: AtomicU64,
286    pub random_shrink: AtomicU64,
287    pub slots_considered: AtomicU64,
288    pub ancient_scanned: AtomicU64,
289    pub bytes_ancient_created: AtomicU64,
290    pub bytes_from_must_shrink: AtomicU64,
291    pub bytes_from_smallest_storages: AtomicU64,
292    pub bytes_from_newest_storages: AtomicU64,
293    pub many_ref_slots_skipped: AtomicU64,
294    pub slots_cannot_move_count: AtomicU64,
295    pub many_refs_old_alive: AtomicU64,
296    pub slots_eligible_to_shrink: AtomicU64,
297    pub total_dead_bytes: AtomicU64,
298    pub total_alive_bytes: AtomicU64,
299    pub slot: AtomicU64,
300    pub ideal_storage_size: AtomicU64,
301}
302
303#[derive(Debug, Default)]
304pub struct ShrinkStatsSub {
305    pub store_accounts_timing: StoreAccountsTiming,
306    pub rewrite_elapsed_us: Saturating<u64>,
307    pub create_and_insert_store_elapsed_us: Saturating<u64>,
308    pub unpackable_slots_count: Saturating<usize>,
309    pub newest_alive_packed_count: Saturating<usize>,
310}
311
312impl ShrinkStatsSub {
313    pub fn accumulate(&mut self, other: &Self) {
314        self.store_accounts_timing
315            .accumulate(&other.store_accounts_timing);
316        self.rewrite_elapsed_us += other.rewrite_elapsed_us;
317        self.create_and_insert_store_elapsed_us += other.create_and_insert_store_elapsed_us;
318        self.unpackable_slots_count += other.unpackable_slots_count;
319        self.newest_alive_packed_count += other.newest_alive_packed_count;
320    }
321}
322#[derive(Debug, Default)]
323pub struct ShrinkStats {
324    pub last_report: AtomicInterval,
325    pub num_slots_shrunk: AtomicUsize,
326    pub storage_read_elapsed: AtomicU64,
327    pub num_duplicated_accounts: AtomicU64,
328    pub index_read_elapsed: AtomicU64,
329    pub create_and_insert_store_elapsed: AtomicU64,
330    pub store_accounts_elapsed: AtomicU64,
331    pub update_index_elapsed: AtomicU64,
332    pub handle_reclaims_elapsed: AtomicU64,
333    pub remove_old_stores_shrink_us: AtomicU64,
334    pub rewrite_elapsed: AtomicU64,
335    pub unpackable_slots_count: AtomicU64,
336    pub newest_alive_packed_count: AtomicU64,
337    pub drop_storage_entries_elapsed: AtomicU64,
338    pub accounts_removed: AtomicUsize,
339    pub bytes_removed: AtomicU64,
340    pub bytes_written: AtomicU64,
341    pub skipped_shrink: AtomicU64,
342    pub dead_accounts: AtomicU64,
343    pub alive_accounts: AtomicU64,
344    pub index_scan_returned_none: AtomicU64,
345    pub index_scan_returned_some: AtomicU64,
346    pub accounts_loaded: AtomicU64,
347    pub initial_candidates_count: AtomicU64,
348    pub purged_zero_lamports: AtomicU64,
349    pub accounts_not_found_in_index: AtomicU64,
350    pub num_ancient_slots_shrunk: AtomicU64,
351    pub ancient_slots_added_to_shrink: AtomicU64,
352    pub ancient_bytes_added_to_shrink: AtomicU64,
353    pub num_dead_slots_added_to_clean: AtomicU64,
354    pub num_slots_with_zero_lamport_accounts_added_to_shrink: AtomicU64,
355    pub marking_zero_dead_accounts_in_non_shrinkable_store: AtomicU64,
356    pub num_zero_lamport_single_ref_accounts_found: AtomicU64,
357}
358
359impl ShrinkStats {
360    pub fn report(&self) {
361        if self.last_report.should_update(1000) {
362            datapoint_info!(
363                "shrink_stats",
364                (
365                    "ancient_slots_added_to_shrink",
366                    self.ancient_slots_added_to_shrink
367                        .swap(0, Ordering::Relaxed),
368                    i64
369                ),
370                (
371                    "ancient_bytes_added_to_shrink",
372                    self.ancient_bytes_added_to_shrink
373                        .swap(0, Ordering::Relaxed),
374                    i64
375                ),
376                (
377                    "num_slots_shrunk",
378                    self.num_slots_shrunk.swap(0, Ordering::Relaxed),
379                    i64
380                ),
381                (
382                    "index_scan_returned_none",
383                    self.index_scan_returned_none.swap(0, Ordering::Relaxed),
384                    i64
385                ),
386                (
387                    "index_scan_returned_some",
388                    self.index_scan_returned_some.swap(0, Ordering::Relaxed),
389                    i64
390                ),
391                (
392                    "storage_read_elapsed",
393                    self.storage_read_elapsed.swap(0, Ordering::Relaxed),
394                    i64
395                ),
396                (
397                    "num_duplicated_accounts",
398                    self.num_duplicated_accounts.swap(0, Ordering::Relaxed),
399                    i64
400                ),
401                (
402                    "index_read_elapsed",
403                    self.index_read_elapsed.swap(0, Ordering::Relaxed),
404                    i64
405                ),
406                (
407                    "create_and_insert_store_elapsed",
408                    self.create_and_insert_store_elapsed
409                        .swap(0, Ordering::Relaxed),
410                    i64
411                ),
412                (
413                    "store_accounts_elapsed",
414                    self.store_accounts_elapsed.swap(0, Ordering::Relaxed),
415                    i64
416                ),
417                (
418                    "update_index_elapsed",
419                    self.update_index_elapsed.swap(0, Ordering::Relaxed),
420                    i64
421                ),
422                (
423                    "handle_reclaims_elapsed",
424                    self.handle_reclaims_elapsed.swap(0, Ordering::Relaxed),
425                    i64
426                ),
427                (
428                    "remove_old_stores_shrink_us",
429                    self.remove_old_stores_shrink_us.swap(0, Ordering::Relaxed),
430                    i64
431                ),
432                (
433                    "rewrite_elapsed",
434                    self.rewrite_elapsed.swap(0, Ordering::Relaxed),
435                    i64
436                ),
437                (
438                    "drop_storage_entries_elapsed",
439                    self.drop_storage_entries_elapsed.swap(0, Ordering::Relaxed),
440                    i64
441                ),
442                (
443                    "accounts_removed",
444                    self.accounts_removed.swap(0, Ordering::Relaxed),
445                    i64
446                ),
447                (
448                    "bytes_removed",
449                    self.bytes_removed.swap(0, Ordering::Relaxed),
450                    i64
451                ),
452                (
453                    "bytes_written",
454                    self.bytes_written.swap(0, Ordering::Relaxed),
455                    i64
456                ),
457                (
458                    "skipped_shrink",
459                    self.skipped_shrink.swap(0, Ordering::Relaxed),
460                    i64
461                ),
462                (
463                    "alive_accounts",
464                    self.alive_accounts.swap(0, Ordering::Relaxed),
465                    i64
466                ),
467                (
468                    "dead_accounts",
469                    self.dead_accounts.swap(0, Ordering::Relaxed),
470                    i64
471                ),
472                (
473                    "accounts_loaded",
474                    self.accounts_loaded.swap(0, Ordering::Relaxed),
475                    i64
476                ),
477                (
478                    "purged_zero_lamports_count",
479                    self.purged_zero_lamports.swap(0, Ordering::Relaxed),
480                    i64
481                ),
482                (
483                    "num_ancient_slots_shrunk",
484                    self.num_ancient_slots_shrunk.swap(0, Ordering::Relaxed),
485                    i64
486                ),
487                (
488                    "accounts_not_found_in_index",
489                    self.accounts_not_found_in_index.swap(0, Ordering::Relaxed),
490                    i64
491                ),
492                (
493                    "initial_candidates_count",
494                    self.initial_candidates_count.swap(0, Ordering::Relaxed),
495                    i64
496                ),
497                (
498                    "num_dead_slots_added_to_clean",
499                    self.num_dead_slots_added_to_clean
500                        .swap(0, Ordering::Relaxed),
501                    i64
502                ),
503                (
504                    "num_slots_with_zero_lamport_accounts_added_to_shrink",
505                    self.num_slots_with_zero_lamport_accounts_added_to_shrink
506                        .swap(0, Ordering::Relaxed),
507                    i64
508                ),
509                (
510                    "marking_zero_dead_accounts_in_non_shrinkable_store",
511                    self.marking_zero_dead_accounts_in_non_shrinkable_store
512                        .swap(0, Ordering::Relaxed),
513                    i64
514                ),
515                (
516                    "num_zero_lamport_single_ref_accounts_found",
517                    self.num_zero_lamport_single_ref_accounts_found
518                        .swap(0, Ordering::Relaxed),
519                    i64
520                ),
521            );
522        }
523    }
524}
525
526impl ShrinkAncientStats {
527    pub fn report(&self) {
528        datapoint_info!(
529            "shrink_ancient_stats",
530            (
531                "num_slots_shrunk",
532                self.shrink_stats
533                    .num_slots_shrunk
534                    .swap(0, Ordering::Relaxed),
535                i64
536            ),
537            (
538                "index_scan_returned_none",
539                self.shrink_stats
540                    .index_scan_returned_none
541                    .swap(0, Ordering::Relaxed),
542                i64
543            ),
544            (
545                "index_scan_returned_some",
546                self.shrink_stats
547                    .index_scan_returned_some
548                    .swap(0, Ordering::Relaxed),
549                i64
550            ),
551            (
552                "storage_read_elapsed",
553                self.shrink_stats
554                    .storage_read_elapsed
555                    .swap(0, Ordering::Relaxed),
556                i64
557            ),
558            (
559                "num_duplicated_accounts",
560                self.shrink_stats
561                    .num_duplicated_accounts
562                    .swap(0, Ordering::Relaxed),
563                i64
564            ),
565            (
566                "index_read_elapsed",
567                self.shrink_stats
568                    .index_read_elapsed
569                    .swap(0, Ordering::Relaxed),
570                i64
571            ),
572            (
573                "create_and_insert_store_elapsed",
574                self.shrink_stats
575                    .create_and_insert_store_elapsed
576                    .swap(0, Ordering::Relaxed),
577                i64
578            ),
579            (
580                "store_accounts_elapsed",
581                self.shrink_stats
582                    .store_accounts_elapsed
583                    .swap(0, Ordering::Relaxed),
584                i64
585            ),
586            (
587                "update_index_elapsed",
588                self.shrink_stats
589                    .update_index_elapsed
590                    .swap(0, Ordering::Relaxed),
591                i64
592            ),
593            (
594                "handle_reclaims_elapsed",
595                self.shrink_stats
596                    .handle_reclaims_elapsed
597                    .swap(0, Ordering::Relaxed),
598                i64
599            ),
600            (
601                "remove_old_stores_shrink_us",
602                self.shrink_stats
603                    .remove_old_stores_shrink_us
604                    .swap(0, Ordering::Relaxed),
605                i64
606            ),
607            (
608                "rewrite_elapsed",
609                self.shrink_stats.rewrite_elapsed.swap(0, Ordering::Relaxed),
610                i64
611            ),
612            (
613                "unpackable_slots_count",
614                self.shrink_stats
615                    .unpackable_slots_count
616                    .swap(0, Ordering::Relaxed),
617                i64
618            ),
619            (
620                "newest_alive_packed_count",
621                self.shrink_stats
622                    .newest_alive_packed_count
623                    .swap(0, Ordering::Relaxed),
624                i64
625            ),
626            (
627                "drop_storage_entries_elapsed",
628                self.shrink_stats
629                    .drop_storage_entries_elapsed
630                    .swap(0, Ordering::Relaxed),
631                i64
632            ),
633            (
634                "accounts_removed",
635                self.shrink_stats
636                    .accounts_removed
637                    .swap(0, Ordering::Relaxed),
638                i64
639            ),
640            (
641                "bytes_removed",
642                self.shrink_stats.bytes_removed.swap(0, Ordering::Relaxed),
643                i64
644            ),
645            (
646                "bytes_written",
647                self.shrink_stats.bytes_written.swap(0, Ordering::Relaxed),
648                i64
649            ),
650            (
651                "alive_accounts",
652                self.shrink_stats.alive_accounts.swap(0, Ordering::Relaxed),
653                i64
654            ),
655            (
656                "dead_accounts",
657                self.shrink_stats.dead_accounts.swap(0, Ordering::Relaxed),
658                i64
659            ),
660            (
661                "accounts_loaded",
662                self.shrink_stats.accounts_loaded.swap(0, Ordering::Relaxed),
663                i64
664            ),
665            (
666                "ancient_append_vecs_shrunk",
667                self.ancient_append_vecs_shrunk.swap(0, Ordering::Relaxed),
668                i64
669            ),
670            ("random", self.random_shrink.swap(0, Ordering::Relaxed), i64),
671            (
672                "slots_eligible_to_shrink",
673                self.slots_eligible_to_shrink.swap(0, Ordering::Relaxed),
674                i64
675            ),
676            (
677                "total_dead_bytes",
678                self.total_dead_bytes.swap(0, Ordering::Relaxed),
679                i64
680            ),
681            (
682                "total_alive_bytes",
683                self.total_alive_bytes.swap(0, Ordering::Relaxed),
684                i64
685            ),
686            (
687                "slots_considered",
688                self.slots_considered.swap(0, Ordering::Relaxed),
689                i64
690            ),
691            (
692                "ancient_scanned",
693                self.ancient_scanned.swap(0, Ordering::Relaxed),
694                i64
695            ),
696            ("total_us", self.total_us.swap(0, Ordering::Relaxed), i64),
697            (
698                "bytes_ancient_created",
699                self.bytes_ancient_created.swap(0, Ordering::Relaxed),
700                i64
701            ),
702            (
703                "bytes_from_must_shrink",
704                self.bytes_from_must_shrink.swap(0, Ordering::Relaxed),
705                i64
706            ),
707            (
708                "bytes_from_smallest_storages",
709                self.bytes_from_smallest_storages.swap(0, Ordering::Relaxed),
710                i64
711            ),
712            (
713                "bytes_from_newest_storages",
714                self.bytes_from_newest_storages.swap(0, Ordering::Relaxed),
715                i64
716            ),
717            (
718                "many_ref_slots_skipped",
719                self.many_ref_slots_skipped.swap(0, Ordering::Relaxed),
720                i64
721            ),
722            (
723                "slots_cannot_move_count",
724                self.slots_cannot_move_count.swap(0, Ordering::Relaxed),
725                i64
726            ),
727            (
728                "many_refs_old_alive",
729                self.many_refs_old_alive.swap(0, Ordering::Relaxed),
730                i64
731            ),
732            (
733                "purged_zero_lamports_count",
734                self.shrink_stats
735                    .purged_zero_lamports
736                    .swap(0, Ordering::Relaxed),
737                i64
738            ),
739            (
740                "accounts_not_found_in_index",
741                self.shrink_stats
742                    .accounts_not_found_in_index
743                    .swap(0, Ordering::Relaxed),
744                i64
745            ),
746            ("slot", self.slot.load(Ordering::Relaxed), i64),
747            (
748                "ideal_storage_size",
749                self.ideal_storage_size.swap(0, Ordering::Relaxed),
750                i64
751            ),
752        );
753    }
754}