Пример #1
0
        public bool statsTests(
			string	sDbName,
			DbSystem	dbSystem)
        {
            Db							db = null;
            DbSystemStats			stats = null;
            uint						uiNumDatabases;
            uint						uiStartTime;
            uint						uiStopTime;
            CS_XFLM_DB_STATS		dbStats = null;
            CS_XFLM_LFILE_STATS	lFileStats = null;

            beginTest( "Start statistics");

            try
            {
                dbSystem.startStats();
            }
            catch (XFlaimException ex)
            {
                endTest( false, ex, "starting statistics");
                return( false);
            }
            endTest( false, true);

            // Open a database to make some statistics happen

            beginTest( "Open Database Test (" + sDbName + ")");

            try
            {
                db = dbSystem.dbOpen( sDbName, null, null, null, false);
            }
            catch (XFlaimException ex)
            {
                endTest( false, ex, "opening database");
                return( false);
            }
            if (db != null)
            {
                db.close();
                db = null;
            }
            endTest( false, true);

            // Stop collecting statistics

            beginTest( "Stop statistics");

            try
            {
                dbSystem.stopStats();
            }
            catch (XFlaimException ex)
            {
                endTest( false, ex, "stopping statistics");
                return( false);
            }
            endTest( false, true);

            // Get statistics

            beginTest( "Get statistics");

            try
            {
                stats = dbSystem.getStats();
            }
            catch (XFlaimException ex)
            {
                endTest( false, ex, "getting statistics");
                return( false);
            }
            endTest( false, true);

            // Get general statistics

            beginTest( "Get general statistics");

            try
            {
                stats.getGeneralStats( out uiNumDatabases, out uiStartTime,
                            out uiStopTime);
            }
            catch (XFlaimException ex)
            {
                endTest( false, ex, "getting statistics");
                return( false);
            }
            endTest( false, true);
            printUIntStat( 0, "Databases", uiNumDatabases);
            printUIntStat( 0, "Start Time", uiStartTime);
            printUIntStat( 0, "Stop Time", uiStopTime);

            // Get Database statistics

            for (uint uiLoop = 0; uiLoop < uiNumDatabases; uiLoop++)
            {
                beginTest( "Get database statistics for DB#" + uiLoop);

                try
                {
                    dbStats = stats.getDbStats( uiLoop, dbStats);
                }
                catch (XFlaimException ex)
                {
                    endTest( false, ex, "getting database statistics");
                    return( false);
                }
                endTest( false, true);
                printStrStat( 0, "Database Name", dbStats.sDbName);
                printUIntStat( 0, "Logical File Count", dbStats.uiNumLFiles);
                System.Console.WriteLine( "Read Transactions");
                printCountTimeStat( 1, "Committed Transactions", dbStats.ReadTransStats.CommittedTrans);
                printCountTimeStat( 1, "Aborted Transactions", dbStats.ReadTransStats.AbortedTrans);
                System.Console.WriteLine( "Update Transactions");
                printCountTimeStat( 1, "Committed Transactions", dbStats.UpdateTransStats.CommittedTrans);
                printCountTimeStat( 1, "Aborted Transactions", dbStats.UpdateTransStats.AbortedTrans);
                printCountTimeStat( 1, "Group Completes", dbStats.UpdateTransStats.GroupCompletes);
                printULongStat( 1, "Group Finished", dbStats.UpdateTransStats.ulGroupFinished);
                printBlockIOStats( 0, "LFH Block Stats", dbStats.LFHBlockStats);
                printBlockIOStats( 0, "Avail Block Stats", dbStats.AvailBlockStats);
                printDiskIOStats( 0, "Database Header Writes", dbStats.DbHdrWrites);
                printDiskIOStats( 0, "Log Block Writes", dbStats.LogBlockWrites);
                printDiskIOStats( 0, "Log Block Restores", dbStats.LogBlockRestores);
                printDiskIOStats( 0, "Log Block Reads", dbStats.LogBlockReads);
                printUIntStat( 0, "Log Block Checksum Errors", dbStats.uiLogBlockChkErrs);
                printUIntStat( 0, "Read Errors", dbStats.uiReadErrors);
                printCountTimeStat( 0, "No Locks", dbStats.LockStats.NoLocks);
                printCountTimeStat( 0, "Waiting For Lock", dbStats.LockStats.WaitingForLock);
                printCountTimeStat( 0, "Held Lock", dbStats.LockStats.HeldLock);

                for (uint uiLoop2 = 0; uiLoop2 < dbStats.uiNumLFiles; uiLoop2++)
                {
                    beginTest( "  Get database statistics for DB#" + uiLoop + ", LFile#" + uiLoop2);

                    try
                    {
                        lFileStats = stats.getLFileStats( uiLoop, uiLoop2, lFileStats);
                    }
                    catch (XFlaimException ex)
                    {
                        endTest( false, ex, "getting logical file statistics");
                        return( false);
                    }
                    endTest( false, true);
                    System.Console.WriteLine( "  LOGICAL FILE {0} ({1})",
                        lFileStats.uiLFileNum, lFileStats.eLfType);
                    printBlockIOStats( 2, "Root Block Stats", lFileStats.RootBlockStats);
                    printBlockIOStats( 2, "Middle Block Stats", lFileStats.MiddleBlockStats);
                    printBlockIOStats( 2, "Leaf Block Stats", lFileStats.LeafBlockStats);
                    printULongStat( 2, "Block Splits", lFileStats.ulBlockSplits);
                    printULongStat( 2, "Block Combines", lFileStats.ulBlockCombines);
                }
            }

            return( true);
        }