📄 db_stat.c
字号:
break; case REGION_TYPE_TXN: lable = "Txn"; break; case INVALID_REGION_TYPE: default: lable = "Invalid"; break; } printf("%s Region: %d.\n", lable, rp->id); dl_bytes("Size", (u_long)0, (u_long)0, (u_long)rp->size); printf("%ld\tSegment ID.\n", rp->segid); dl("Locks granted without waiting.\n", (u_long)rp->mutex.mutex_set_nowait); dl("Locks granted after waiting.\n", (u_long)rp->mutex.mutex_set_wait); } return (0);}/* * btree_stats -- * Display btree/recno statistics. */intbtree_stats(dbenv, dbp, msp, fast) DB_ENV *dbenv; DB *dbp; DB_BTREE_STAT *msp; int fast;{ static const FN fn[] = { { BTM_DUP, "duplicates" }, { BTM_FIXEDLEN, "fixed-length" }, { BTM_RECNO, "recno" }, { BTM_RECNUM, "record-numbers" }, { BTM_RENUMBER, "renumber" }, { BTM_SUBDB, "multiple-databases" }, { 0, NULL } }; DB_BTREE_STAT *sp; int ret; COMPQUIET(dbenv, NULL); if (msp != NULL) sp = msp; else if ((ret = dbp->stat(dbp, &sp, fast)) != 0) { dbp->err(dbp, ret, "DB->stat"); return (1); } printf("%lx\tBtree magic number.\n", (u_long)sp->bt_magic); printf("%lu\tBtree version number.\n", (u_long)sp->bt_version); prflags(sp->bt_metaflags, fn); if (dbp->type == DB_BTREE) {#ifdef NOT_IMPLEMENTED dl("Maximum keys per-page.\n", (u_long)sp->bt_maxkey);#endif dl("Minimum keys per-page.\n", (u_long)sp->bt_minkey); } if (dbp->type == DB_RECNO) { dl("Fixed-length record size.\n", (u_long)sp->bt_re_len); if (isprint(sp->bt_re_pad) && !isspace(sp->bt_re_pad)) printf("%c\tFixed-length record pad.\n", (int)sp->bt_re_pad); else printf("0x%x\tFixed-length record pad.\n", (int)sp->bt_re_pad); } dl("Underlying database page size.\n", (u_long)sp->bt_pagesize); dl("Number of levels in the tree.\n", (u_long)sp->bt_levels); dl(dbp->type == DB_BTREE ? "Number of unique keys in the tree.\n" : "Number of records in the tree.\n", (u_long)sp->bt_nkeys); dl("Number of data items in the tree.\n", (u_long)sp->bt_ndata); dl("Number of tree internal pages.\n", (u_long)sp->bt_int_pg); dl("Number of bytes free in tree internal pages", (u_long)sp->bt_int_pgfree); printf(" (%.0f%% ff).\n", PCT(sp->bt_int_pgfree, sp->bt_int_pg, sp->bt_pagesize)); dl("Number of tree leaf pages.\n", (u_long)sp->bt_leaf_pg); dl("Number of bytes free in tree leaf pages", (u_long)sp->bt_leaf_pgfree); printf(" (%.0f%% ff).\n", PCT(sp->bt_leaf_pgfree, sp->bt_leaf_pg, sp->bt_pagesize)); dl("Number of tree duplicate pages.\n", (u_long)sp->bt_dup_pg); dl("Number of bytes free in tree duplicate pages", (u_long)sp->bt_dup_pgfree); printf(" (%.0f%% ff).\n", PCT(sp->bt_dup_pgfree, sp->bt_dup_pg, sp->bt_pagesize)); dl("Number of tree overflow pages.\n", (u_long)sp->bt_over_pg); dl("Number of bytes free in tree overflow pages", (u_long)sp->bt_over_pgfree); printf(" (%.0f%% ff).\n", PCT(sp->bt_over_pgfree, sp->bt_over_pg, sp->bt_pagesize)); dl("Number of pages on the free list.\n", (u_long)sp->bt_free); free(sp); return (0);}/* * hash_stats -- * Display hash statistics. */inthash_stats(dbenv, dbp, fast) DB_ENV *dbenv; DB *dbp; int fast;{ static const FN fn[] = { { DB_HASH_DUP, "duplicates" }, { DB_HASH_SUBDB,"multiple-databases" }, { 0, NULL } }; DB_HASH_STAT *sp; int ret; COMPQUIET(dbenv, NULL); if ((ret = dbp->stat(dbp, &sp, fast)) != 0) { dbp->err(dbp, ret, "DB->stat"); return (1); } printf("%lx\tHash magic number.\n", (u_long)sp->hash_magic); printf("%lu\tHash version number.\n", (u_long)sp->hash_version); prflags(sp->hash_metaflags, fn); dl("Underlying database page size.\n", (u_long)sp->hash_pagesize); dl("Specified fill factor.\n", (u_long)sp->hash_ffactor); dl("Number of keys in the database.\n", (u_long)sp->hash_nkeys); dl("Number of data items in the database.\n", (u_long)sp->hash_ndata); dl("Number of hash buckets.\n", (u_long)sp->hash_buckets); dl("Number of bytes free on bucket pages", (u_long)sp->hash_bfree); printf(" (%.0f%% ff).\n", PCT(sp->hash_bfree, sp->hash_buckets, sp->hash_pagesize)); dl("Number of overflow pages.\n", (u_long)sp->hash_bigpages); dl("Number of bytes free in overflow pages", (u_long)sp->hash_big_bfree); printf(" (%.0f%% ff).\n", PCT(sp->hash_big_bfree, sp->hash_bigpages, sp->hash_pagesize)); dl("Number of bucket overflow pages.\n", (u_long)sp->hash_overflows); dl("Number of bytes free in bucket overflow pages", (u_long)sp->hash_ovfl_free); printf(" (%.0f%% ff).\n", PCT(sp->hash_ovfl_free, sp->hash_overflows, sp->hash_pagesize)); dl("Number of duplicate pages.\n", (u_long)sp->hash_dup); dl("Number of bytes free in duplicate pages", (u_long)sp->hash_dup_free); printf(" (%.0f%% ff).\n", PCT(sp->hash_dup_free, sp->hash_dup, sp->hash_pagesize)); dl("Number of pages on the free list.\n", (u_long)sp->hash_free); free(sp); return (0);}/* * queue_stats -- * Display queue statistics. */intqueue_stats(dbenv, dbp, fast) DB_ENV *dbenv; DB *dbp; int fast;{ DB_QUEUE_STAT *sp; int ret; COMPQUIET(dbenv, NULL); if ((ret = dbp->stat(dbp, &sp, fast)) != 0) { dbp->err(dbp, ret, "DB->stat"); return (1); } printf("%lx\tQueue magic number.\n", (u_long)sp->qs_magic); printf("%lu\tQueue version number.\n", (u_long)sp->qs_version); dl("Fixed-length record size.\n", (u_long)sp->qs_re_len); if (isprint(sp->qs_re_pad) && !isspace(sp->qs_re_pad)) printf("%c\tFixed-length record pad.\n", (int)sp->qs_re_pad); else printf("0x%x\tFixed-length record pad.\n", (int)sp->qs_re_pad); dl("Underlying database page size.\n", (u_long)sp->qs_pagesize); if (sp->qs_extentsize != 0) dl("Underlying database extent size.\n", (u_long)sp->qs_extentsize); dl("Number of records in the database.\n", (u_long)sp->qs_nkeys); dl("Number of database pages.\n", (u_long)sp->qs_pages); dl("Number of bytes free in database pages", (u_long)sp->qs_pgfree); printf(" (%.0f%% ff).\n", PCT(sp->qs_pgfree, sp->qs_pages, sp->qs_pagesize)); printf("%lu\tFirst undeleted record.\n", (u_long)sp->qs_first_recno); printf( "%lu\tNext available record number.\n", (u_long)sp->qs_cur_recno); free(sp); return (0);}/* * lock_stats -- * Display lock statistics. */intlock_stats(dbenv, internal, flags) DB_ENV *dbenv; char *internal; u_int32_t flags;{ DB_LOCK_STAT *sp; int ret; if (internal != NULL) { if ((ret = dbenv->lock_dump_region(dbenv, internal, stdout)) != 0) { dbenv->err(dbenv, ret, NULL); return (1); } return (0); } if ((ret = dbenv->lock_stat(dbenv, &sp, flags)) != 0) { dbenv->err(dbenv, ret, NULL); return (1); } dl("Last allocated locker ID.\n", (u_long)sp->st_id); dl("Current maximum unused locker ID.\n", (u_long)sp->st_cur_maxid); dl("Number of lock modes.\n", (u_long)sp->st_nmodes); dl("Maximum number of locks possible.\n", (u_long)sp->st_maxlocks); dl("Maximum number of lockers possible.\n", (u_long)sp->st_maxlockers); dl("Maximum number of lock objects possible.\n", (u_long)sp->st_maxobjects); dl("Number of current locks.\n", (u_long)sp->st_nlocks); dl("Maximum number of locks at any one time.\n", (u_long)sp->st_maxnlocks); dl("Number of current lockers.\n", (u_long)sp->st_nlockers); dl("Maximum number of lockers at any one time.\n", (u_long)sp->st_maxnlockers); dl("Number of current lock objects.\n", (u_long)sp->st_nobjects); dl("Maximum number of lock objects at any one time.\n", (u_long)sp->st_maxnobjects); dl("Total number of locks requested.\n", (u_long)sp->st_nrequests); dl("Total number of locks released.\n", (u_long)sp->st_nreleases); dl( "Total number of lock requests failing because DB_LOCK_NOWAIT was set.\n", (u_long)sp->st_nnowaits); dl( "Total number of locks not immediately available due to conflicts.\n", (u_long)sp->st_nconflicts); dl("Number of deadlocks.\n", (u_long)sp->st_ndeadlocks); dl("Lock timeout value.\n", (u_long)sp->st_locktimeout); dl("Number of locks that have timed out.\n", (u_long)sp->st_nlocktimeouts); dl("Transaction timeout value.\n", (u_long)sp->st_txntimeout); dl("Number of transactions that have timed out.\n", (u_long)sp->st_ntxntimeouts); dl_bytes("The size of the lock region.", (u_long)0, (u_long)0, (u_long)sp->st_regsize); dl("The number of region locks granted after waiting.\n", (u_long)sp->st_region_wait); dl("The number of region locks granted without waiting.\n", (u_long)sp->st_region_nowait); free(sp); return (0);}/* * log_stats -- * Display log statistics. */intlog_stats(dbenv, flags) DB_ENV *dbenv; u_int32_t flags;{ DB_LOG_STAT *sp; int ret; if ((ret = dbenv->log_stat(dbenv, &sp, flags)) != 0) { dbenv->err(dbenv, ret, NULL); return (1); } printf("%lx\tLog magic number.\n", (u_long)sp->st_magic); printf("%lu\tLog version number.\n", (u_long)sp->st_version); dl_bytes("Log record cache size", (u_long)0, (u_long)0, (u_long)sp->st_lg_bsize); printf("%#o\tLog file mode.\n", sp->st_mode); if (sp->st_lg_size % MEGABYTE == 0) printf("%luMb\tCurrent log file size.\n", (u_long)sp->st_lg_size / MEGABYTE); else if (sp->st_lg_size % 1024 == 0) printf("%luKb\tCurrent log file size.\n", (u_long)sp->st_lg_size / 1024); else printf("%lu\tCurrent log file size.\n", (u_long)sp->st_lg_size); dl_bytes("Log bytes written", (u_long)0, (u_long)sp->st_w_mbytes, (u_long)sp->st_w_bytes); dl_bytes("Log bytes written since last checkpoint", (u_long)0, (u_long)sp->st_wc_mbytes, (u_long)sp->st_wc_bytes); dl("Total log file writes.\n", (u_long)sp->st_wcount); dl("Total log file write due to overflow.\n", (u_long)sp->st_wcount_fill); dl("Total log file flushes.\n", (u_long)sp->st_scount); printf("%lu\tCurrent log file number.\n", (u_long)sp->st_cur_file); printf("%lu\tCurrent log file offset.\n", (u_long)sp->st_cur_offset); printf("%lu\tOn-disk log file number.\n", (u_long)sp->st_disk_file); printf("%lu\tOn-disk log file offset.\n", (u_long)sp->st_disk_offset); dl("Max commits in a log flush.\n", (u_long)sp->st_maxcommitperflush); dl("Min commits in a log flush.\n", (u_long)sp->st_mincommitperflush); dl_bytes("Log region size", (u_long)0, (u_long)0, (u_long)sp->st_regsize); dl("The number of region locks granted after waiting.\n", (u_long)sp->st_region_wait); dl("The number of region locks granted without waiting.\n", (u_long)sp->st_region_nowait); free(sp); return (0);}/* * mpool_stats -- * Display mpool statistics. */intmpool_stats(dbenv, internal, flags) DB_ENV *dbenv; char *internal; u_int32_t flags;{ DB_MPOOL_FSTAT **fsp; DB_MPOOL_STAT *gsp; int ret; if (internal != NULL) { if ((ret = dbenv->memp_dump_region(dbenv, internal, stdout)) != 0) { dbenv->err(dbenv, ret, NULL); return (1); } return (0); } if ((ret = dbenv->memp_stat(dbenv, &gsp, &fsp, flags)) != 0) { dbenv->err(dbenv, ret, NULL); return (1); } dl_bytes("Total cache size", (u_long)gsp->st_gbytes, (u_long)0, (u_long)gsp->st_bytes); dl("Number of caches.\n", (u_long)gsp->st_ncache); dl_bytes("Pool individual cache size", (u_long)0, (u_long)0, (u_long)gsp->st_regsize); dl("Requested pages mapped into the process' address space.\n", (u_long)gsp->st_map); dl("Requested pages found in the cache", (u_long)gsp->st_cache_hit); if (gsp->st_cache_hit + gsp->st_cache_miss != 0) printf(" (%.0f%%)", ((double)gsp->st_cache_hit / (gsp->st_cache_hit + gsp->st_cache_miss)) * 100); printf(".\n"); dl("Requested pages not found in the cache.\n", (u_long)gsp->st_cache_miss); dl("Pages created in the cache.\n", (u_long)gsp->st_page_create); dl("Pages read into the cache.\n", (u_long)gsp->st_page_in); dl("Pages written from the cache to the backing file.\n", (u_long)gsp->st_page_out); dl("Clean pages forced from the cache.\n", (u_long)gsp->st_ro_evict); dl("Dirty pages forced from the cache.\n", (u_long)gsp->st_rw_evict); dl("Dirty pages written by trickle-sync thread.\n", (u_long)gsp->st_page_trickle); dl("Current total page count.\n", (u_long)gsp->st_pages); dl("Current clean page count.\n", (u_long)gsp->st_page_clean); dl("Current dirty page count.\n", (u_long)gsp->st_page_dirty); dl("Number of hash buckets used for page location.\n", (u_long)gsp->st_hash_buckets); dl("Total number of times hash chains searched for a page.\n", (u_long)gsp->st_hash_searches); dl("The longest hash chain searched for a page.\n", (u_long)gsp->st_hash_longest); dl("Total number of hash buckets examined for page location.\n", (u_long)gsp->st_hash_examined); dl("The number of hash bucket locks granted without waiting.\n", (u_long)gsp->st_hash_nowait); dl("The number of hash bucket locks granted after waiting.\n", (u_long)gsp->st_hash_wait); dl("The maximum number of times any hash bucket lock was waited for.\n", (u_long)gsp->st_hash_max_wait); dl("The number of region locks granted without waiting.\n", (u_long)gsp->st_region_nowait); dl("The number of region locks granted after waiting.\n", (u_long)gsp->st_region_wait);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -