private void _internalAdd(WaitStatsWorkloadEvent evt) { if (waitsData == null) { waitsData = evt.Waits; } else { waitsData.Merge(evt.Waits); } }
private void ReadWaits(Int64 row_id, WaitStatsWorkloadEvent wev) { string sql = "SELECT * FROM Waits WHERE row_id = $row_id"; try { using (SQLiteConnection m_dbConnection = new SQLiteConnection(connectionString)) { m_dbConnection.Open(); try { DataTable waits = null; using (SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection)) { command.Parameters.AddWithValue("$row_id", row_id); using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(command)) { using (DataSet ds = new DataSet()) { adapter.Fill(ds); waits = ds.Tables[0]; } } } var results = from table1 in waits.AsEnumerable() select new { wait_type = Convert.ToString(table1["wait_type"]), wait_sec = Convert.ToDouble(table1["wait_sec"]), resource_sec = Convert.ToDouble(table1["resource_sec"]), signal_sec = Convert.ToDouble(table1["signal_sec"]), wait_count = Convert.ToDouble(table1["wait_count"]) }; wev.Waits = DataUtils.ToDataTable(results); } catch (Exception e) { logger.Error(e, $"Unable to query Waits for row_id {row_id}"); throw; } } } catch (Exception e) { logger.Error(e, "Unable to query Waits from the source file"); } }
private WorkloadEvent ReadEvent(SQLiteDataReader reader) { WorkloadEvent.EventType type = (WorkloadEvent.EventType)reader.GetInt32(reader.GetOrdinal("event_type")); long row_id = reader.GetInt64(reader.GetOrdinal("row_id")); try { switch (type) { case WorkloadEvent.EventType.PerformanceCounter: CounterWorkloadEvent cr = new CounterWorkloadEvent(); cr.StartTime = reader.GetDateTime(reader.GetOrdinal("start_time")); ReadCounters(row_id, cr); return(cr); case WorkloadEvent.EventType.WAIT_stats: WaitStatsWorkloadEvent wr = new WaitStatsWorkloadEvent(); wr.StartTime = reader.GetDateTime(reader.GetOrdinal("start_time")); wr.Type = type; return(wr); case WorkloadEvent.EventType.Error: ErrorWorkloadEvent er = new ErrorWorkloadEvent(); er.StartTime = reader.GetDateTime(reader.GetOrdinal("start_time")); er.Type = type; er.Text = GetString(reader, "sql_text"); return(er); default: ExecutionWorkloadEvent result = new ExecutionWorkloadEvent(); result.EventSequence = GetInt64(reader, "event_sequence"); result.ApplicationName = GetString(reader, "client_app_name"); result.StartTime = reader.GetDateTime(reader.GetOrdinal("start_time")); result.HostName = GetString(reader, "client_host_name"); result.DatabaseName = GetString(reader, "database_name"); result.LoginName = GetString(reader, "server_principal_name"); result.SPID = reader.GetInt32(reader.GetOrdinal("session_id")); result.Text = GetString(reader, "sql_text"); result.CPU = GetInt64(reader, "cpu"); result.Duration = GetInt64(reader, "duration"); result.Reads = GetInt64(reader, "reads"); result.Writes = GetInt64(reader, "writes"); result.Type = type; return(result); } } catch (Exception e) { throw new InvalidOperationException($"Invalid data at row_id {row_id}", e); } }
private void ReadWaits(int event_sequence, WaitStatsWorkloadEvent wev) { string sql = "SELECT * FROM Waits WHERE event_sequence = $event_sequence"; try { using (SQLiteConnection m_dbConnection = new SQLiteConnection(connectionString)) { m_dbConnection.Open(); try { DataTable waits = null; using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn)) { using (DataSet ds = new DataSet()) { adapter.Fill(ds); waits = ds.Tables[0]; } } var results = from table1 in waits.AsEnumerable() select new { wait_type = Convert.ToString(table1["wait_type"]), wait_sec = Convert.ToDouble(table1["wait_sec"]), resource_sec = Convert.ToDouble(table1["resource_sec"]), signal_sec = Convert.ToDouble(table1["signal_sec"]), wait_count = Convert.ToDouble(table1["wait_count"]) }; wev.Waits = DataUtils.ToDataTable(results); } catch (Exception e) { logger.Error(e, String.Format("Unable to query Waits for sequence {0}", event_sequence)); throw; } } } catch (Exception e) { logger.Error(e, "Unable to query Waits from the source file"); } }
private void InsertWaitEvent(WorkloadEvent evnt) { WaitStatsWorkloadEvent evt = (WaitStatsWorkloadEvent)evnt; events_cmd.Parameters.AddWithValue("$row_id", row_id++); events_cmd.Parameters.AddWithValue("$event_sequence", null); events_cmd.Parameters.AddWithValue("$event_type", evt.Type); events_cmd.Parameters.AddWithValue("$start_time", evt.StartTime); events_cmd.Parameters.AddWithValue("$client_app_name", null); events_cmd.Parameters.AddWithValue("$client_host_name", null); events_cmd.Parameters.AddWithValue("$database_name", null); events_cmd.Parameters.AddWithValue("$server_principal_name", null); events_cmd.Parameters.AddWithValue("$session_id", null); events_cmd.Parameters.AddWithValue("$sql_text", null); events_cmd.Parameters.AddWithValue("$cpu", null); events_cmd.Parameters.AddWithValue("$duration", null); events_cmd.Parameters.AddWithValue("$reads", null); events_cmd.Parameters.AddWithValue("$writes", null); events_cmd.ExecuteNonQuery(); SQLiteTransaction tran = conn.BeginTransaction(); try { foreach (DataRow dr in evt.Waits.Rows) { waits_cmd.Parameters.AddWithValue("$row_id", row_id); waits_cmd.Parameters.AddWithValue("$wait_type", dr["wait_type"]); waits_cmd.Parameters.AddWithValue("$wait_sec", dr["wait_sec"]); waits_cmd.Parameters.AddWithValue("$resource_sec", dr["resource_sec"]); waits_cmd.Parameters.AddWithValue("$signal_sec", dr["signal_sec"]); waits_cmd.Parameters.AddWithValue("$wait_count", dr["wait_count"]); waits_cmd.ExecuteNonQuery(); } tran.Commit(); } catch (Exception) { tran.Rollback(); throw; } }