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); }