示例#1
0
 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;
            }
        }