// // GET: /admin/DataBase/ public ActionResult Index() { var databaseStatsRepository = DependencyResolver.Current.GetService <IDatabaseStatsRepository>(); DbUsage dbUsage = databaseStatsRepository.GetStats(); return(View(dbUsage)); }
public static void InsertDb() { while (true) { if (saveCounter >= SaveLimit && SetDbUsing(DbUsage.SaveThisFuckingShit)) { while (saveQueue.TryDequeue(out var image)) { storage.InsertMachineTagsWithoutSaving(image); OnDbInserted?.Invoke(image); } storage.DoSave(); OnDbSaved?.Invoke(); saveCounter = 0; currentDbUsage = DbUsage.None; } else { OnDbSleep?.Invoke(); var r = new Random(); Thread.Sleep(r.Next(50, 150)); } } }
private static bool SetDbUsing(DbUsage newStatus) { if (currentDbUsage != DbUsage.None && currentDbUsage != newStatus) { return(false); } currentDbUsage = newStatus; return(true); }
/// <summary> /// Получение данных статистики базы данных /// </summary> public DbUsage GetStats() { /*Better here http://kamranicus.com/Blog/Posts/51/protip-show-db-usage-in-your-ef-application */ var sqlConn = Db.Database.Connection as SqlConnection; var cmd = new SqlCommand("sp_spaceused") { CommandType = CommandType.StoredProcedure, Connection = sqlConn }; var adp = new SqlDataAdapter(cmd); var dataset = new DataSet(); if (sqlConn != null) { sqlConn.Open(); } try { adp.Fill(dataset); } catch (SqlException ex) { return(null); } finally { if (sqlConn != null) { sqlConn.Close(); } } var dbUsage = new DbUsage { database_name = dataset.Tables[0].Rows[0][0].ToString(), database_size = dataset.Tables[0].Rows[0][1].ToString(), unallocated_space = dataset.Tables[0].Rows[0][2].ToString(), reserved = dataset.Tables[1].Rows[0][0].ToString(), data = dataset.Tables[1].Rows[0][1].ToString(), index_size = dataset.Tables[1].Rows[0][2].ToString(), unused = dataset.Tables[1].Rows[0][3].ToString() }; return(dbUsage); }
private static void FillQueueThread() { var lastId = 0; while (true) { if (queue.Count <= FillQueueLimit && SetDbUsing(DbUsage.GetEntries)) { var images = storage.GetImagesWithoutMachineTags(lastId, DbSelectImagesAmount); foreach (var image in images) { queue.Enqueue(image); lastId = image.Id; } currentDbUsage = DbUsage.None; } Thread.Sleep(Random.Next(50, 150)); } }