コード例 #1
0
ファイル: StorageSizes.cs プロジェクト: ybdev/ravendb
        public static IEnumerable <Tuple <string, int> > GetSizes(Session session, JET_DBID db)
        {
            int dbPages;

            Api.JetGetDatabaseInfo(session, db, out dbPages, JET_DbInfo.Filesize);

            var dbTotalSize = dbPages * SystemParameters.DatabasePageSize;

            yield return(Tuple.Create("Total db size: " + DatabaseSize.Humane(dbTotalSize), dbTotalSize));

            foreach (var tableName in Api.GetTableNames(session, db))
            {
                using (var tbl = new Table(session, db, tableName, OpenTableGrbit.None))
                {
                    Api.JetComputeStats(session, tbl);

                    JET_OBJECTINFO result;
                    Api.JetGetTableInfo(session, tbl, out result, JET_TblInfo.Default);
                    var sb       = new StringBuilder(tableName).AppendLine();
                    var usedSize = result.cPage * SystemParameters.DatabasePageSize;
                    int ownedPages;
                    Api.JetGetTableInfo(session, tbl, out ownedPages, JET_TblInfo.SpaceOwned);

                    sb.Append("\tOwned Size: ")
                    .Append(DatabaseSize.Humane(ownedPages * SystemParameters.DatabasePageSize))
                    .AppendLine();


                    sb.Append("\tUsed Size: ")
                    .Append(DatabaseSize.Humane(usedSize))
                    .AppendLine();


                    sb.Append("\tRecords: ").AppendFormat("{0:#,#;;0}", result.cRecord).AppendLine();
                    sb.Append("\tIndexes:").AppendLine();

                    foreach (var index in Api.GetTableIndexes(session, tbl))
                    {
                        sb.Append("\t\t")
                        .Append(index.Name)
                        .Append(": ")
                        .Append(DatabaseSize.Humane(index.Pages * (SystemParameters.DatabasePageSize)))
                        .AppendLine();
                    }
                    yield return(Tuple.Create(sb.ToString(), ownedPages * SystemParameters.DatabasePageSize));
                }
            }
        }