# Disk Manager

> The disk manager controls operations between the eXtremeDB cache and the persistent storage media. Following is the definition of the `mco_disk_info_t` structure which describes the state of the current Disk Manager.

> ## Disk info

> The structure is defined in `mco.h` as follows:

>         typedef struct mco_disk_info
>         {
>             mco_offs_t data_file_size;     /* Total size of database storage */
>             mco_offs_t log_file_size;      /* Total size of database log */
>             mco_offs_t used_database_size; /* Size of used part of database storage */
>         } mco_disk_info_t;

> data_file_size | Total size of database storage
> log_file_size | Total size of database log.
> used_database_size | Size of used part of database storage

> ## Cache info

> Following is the definition of the `mco_disk_cache_info_t` structure which describes the state of the current Disk Manager cache.

> The structure is defined in `mco.h` as follows:

>         typedef struct mco_disk_cache_info_t_
>         {
>             mco_counter_t connection_cache_hits;
>             mco_counter_t cache_hits;
>             mco_counter_t cache_misses;
>             mco_counter_t allocated_pages;
>             mco_counter_t used_pages;
>             mco_counter32_t  pinned_pages; /* Number of pinned pages: need to be 32 bit to be able to use atomic  */
>             mco_counter_t modified_pages; /* Number of pages modified by active transactions */
>             mco_counter_t dirty_pages; /* Number of dirty pages */
>             mco_counter_t copied_pages; /* Number of copies of original pages (REDO_LOG+MCO_COMMIT_DELAYED) */
>             mco_counter_t write_delayed_pages; /* Number of write delayed pages */
>             mco_counter_t subsequent_reads;    /* Number of reads of sequentally located paged */
>         } mco_disk_cache_info_t;

> connection_cache_hits | The number of connection cache hits since the database was opened
> cache_hits | The number of disk manager cache hits since the database was opened
> cache_misses | The number of disk manager cache misses
> allocated_pages | The disk manager cache size in pages
> used_pages | The number of used pages in the disk cache
> pinned_pages | The number of pages pinned. Pinned pages can’t be swapped out
> modified_pages | Number of pages in the cache modified by active transactions (as opposed to dirty pages, below). The number of modified pages is always less than or equal to the number of dirty pages.
> dirty_pages | Number of dirty pages. In the `MCO_DELAYED_COMMIT` mode, it is all the pages that have not been committed to the database yet.
> copied_pages | Number of copies of original pages (`REDO_LOG`+`MCO_COMMIT_DELAYED`). The number of extra pages allocated from the page pool in support of the `MCO_COMMIT_DELAYED` mode. In order to roll back a transaction in this mode, the database runtime saves images of the modified pages prior to the transaction start. These copies are kept in the page pool, thus extra pages are used. When the transaction is committed all these copies are removed.
> write_delayed_pages | The number of write delayed pages
> subsequent_reads | Number of reads of sequentially located pages