System.Data.SqlClient.SqlConnection.CreateCommand()

Here are the examples of the csharp api System.Data.SqlClient.SqlConnection.CreateCommand() taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

532 Examples 7

19 View Source File : ZipCode.cs
License : GNU General Public License v3.0
Project Creator : nightness

public static bool Delete(int postalCode)
        {
            Int32 rowsAffected = 0;
            SqlConnection cn = GetConnection();
            ZipCode zipCode = Get(cn, postalCode);
            if (zipCode != null)
            {
                using (SqlCommand sqlCmd = cn.CreateCommand())
                {
                    sqlCmd.CommandText = "DELETE FROM ZipCode WHERE ZipCodePostalCode=" + postalCode;
                    rowsAffected = sqlCmd.ExecuteNonQuery();
                }
            }
            FinishedWithConnection(cn);
            return (rowsAffected != 0);
        }

19 View Source File : ZipCode.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, ZipCode zipCode)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand sqlCmd = cn.CreateCommand())
            {
                sqlCmd.CommandText = "UPDATE ZipCode SET ZipCodeZipCodeCityId=@ZipCodeZipCodeCityId WHERE ZipCodePostalCode=@ZipCodePostalCode";

                BuildSqlParameter(sqlCmd, "@ZipCodePostalCode", SqlDbType.Int, zipCode.PostalCode);
                BuildSqlParameter(sqlCmd, "@ZipCodeZipCodeCityId", SqlDbType.Int, zipCode.CityId);

                rowsAffected = sqlCmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : VendorOrderItem.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, VendorOrderItem vendorOrderItem)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand sqlCmd = cn.CreateCommand())
            {
                sqlCmd.CommandText = "UPDATE VendorOrderItem SET VendorOrderItemVendorOrderId=@VendorOrderItemVendorOrderId,VendorOrderItemVendorItemId=@VendorOrderItemVendorItemId,VendorOrderItemQuanreplacedy=@VendorOrderItemQuanreplacedy WHERE VendorOrderItemId=@VendorOrderItemId";

                BuildSqlParameter(sqlCmd, "@VendorOrderItemId", SqlDbType.Int, vendorOrderItem.Id);
                BuildSqlParameter(sqlCmd, "@VendorOrderItemVendorOrderId", SqlDbType.Int, vendorOrderItem.VendorOrderId);
                BuildSqlParameter(sqlCmd, "@VendorOrderItemVendorItemId", SqlDbType.Int, vendorOrderItem.VendorItemId);
                BuildSqlParameter(sqlCmd, "@VendorOrderItemQuanreplacedy", SqlDbType.Int, vendorOrderItem.Quanreplacedy);

                rowsAffected = sqlCmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : ZipCode.cs
License : GNU General Public License v3.0
Project Creator : nightness

public static ZipCode Add(int postalCode, int cityId)
        {
            ZipCode result = null;

            SqlConnection cn = GetConnection();
            using (SqlCommand sqlCmd = cn.CreateCommand())
            {
                sqlCmd.CommandText = "INSERT INTO ZipCode (ZipCodePostalCode, ZipCodeZipCodeCityId) VALUES (@ZipCodePostalCode, @ZipCodeZipCodeCityId)";
                BuildSqlParameter(sqlCmd, "@ZipCodePostalCode", SqlDbType.Int, postalCode);
                BuildSqlParameter(sqlCmd, "@ZipCodeZipCodeCityId", SqlDbType.Int, cityId);
                if (sqlCmd.ExecuteNonQuery() > 0)
                {
                    result = new ZipCode(postalCode, cityId);
                }
            }
            FinishedWithConnection(cn);

            return result;
        }

19 View Source File : ZipCodeCity.cs
License : GNU General Public License v3.0
Project Creator : nightness

public static bool Delete(int id)
        {
            Int32 rowsAffected = 0;
            SqlConnection cn = GetConnection();
            ZipCodeCity zipCodeCity = Get(cn, id);
            if (zipCodeCity != null)
            {
                using (SqlCommand sqlCmd = cn.CreateCommand())
                {
                    sqlCmd.CommandText = "DELETE FROM ZipCodeCity WHERE ZipCodeCityId=" + id;
                    rowsAffected = sqlCmd.ExecuteNonQuery();
                }
            }
            FinishedWithConnection(cn);
            return (rowsAffected != 0);
        }

19 View Source File : CommandShellControl.xaml.cs
License : GNU General Public License v3.0
Project Creator : nightness

private void DoSqlNonQueryCommand(string sqlCommand)
        {
            if (sqlCommand == null)
            {
                return;
            }
            Int32 rowsAffected;
            SqlConnection cn = DataModelBase.GetConnection();
            using (SqlCommand sqlCmd = cn.CreateCommand())
            {
                sqlCmd.CommandText = sqlCommand;
                rowsAffected = sqlCmd.ExecuteNonQuery();
            }
            DataModelBase.FinishedWithConnection(cn);
            OutputSqlNonQuery(rowsAffected != 0);
        }

19 View Source File : CrashIncident.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Delete(int id)
        {
            Int32 rowsAffected = 0;
            using (SqlConnection cn = new SqlConnection(DatabaseHelper.ConnectionString))
            {
                cn.Open();
                using (SqlCommand sqlCmd = cn.CreateCommand())
                {
                    sqlCmd.CommandText = "DELETE FROM CrashIncident WHERE CrashIncidentId=" + id;
                    rowsAffected = sqlCmd.ExecuteNonQuery();
                }
                cn.Close();
            }
            return (rowsAffected != 0);
        }

19 View Source File : CrashIncident.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, CrashIncident entry)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandText = "UPDATE CrashIncident SET CrashIncidentCustomerId=@CrashIncidentCustomerId,CrashIncidentWhen=@CrashIncidentWhen,CrashIncidentInitialCrashReportId=@CrashIncidentInitialCrashReportId WHERE CrashIncidentId=@CrashIncidentId";

                DatabaseHelper.BuildSqlParameter(cmd, "@CrashIncidentId", SqlDbType.Int, entry.Id);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashIncidentCustomerId", SqlDbType.Int, entry.CustomerId);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashIncidentWhen", SqlDbType.DateTime, entry.When);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashIncidentInitialCrashReportId", SqlDbType.Int, entry.TopLevelCrashReportId);

                rowsAffected = cmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : CrashReport.cs
License : GNU General Public License v3.0
Project Creator : nightness

public static bool DeleteAll(int crashIncidentId)
        {
            Int32 rowsAffected = 0;
            using (SqlConnection cn = new SqlConnection(DatabaseHelper.ConnectionString))
            {
                cn.Open();
                using (SqlCommand sqlCmd = cn.CreateCommand())
                {
                    sqlCmd.CommandText = "DELETE FROM CrashReport WHERE CrashReportCrashIncidentId=" + crashIncidentId;
                    rowsAffected = sqlCmd.ExecuteNonQuery();
                }
                cn.Close();
            }
            return (rowsAffected != 0);
        }

19 View Source File : CrashReport.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, CrashReport entry)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandText = "UPDATE CrashReport SET CrashReportCrashIncidentId=@CrashReportCrashIncidentId,CrashReportExceptionName=@CrashReportExceptionName,CrashReportExceptionMessage=@CrashReportExceptionMessage,CrashReportExceptionStackTrace=@CrashReportExceptionStackTrace,CrashReportInnerExceptionCrashReportId=@CrashReportInnerExceptionCrashReportId WHERE CrashReportId=@CrashReportId";

                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportId", SqlDbType.Int, entry.Id);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportCrashIncidentId", SqlDbType.Int, entry.CrashIncidentId);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportExceptionName", SqlDbType.Text, entry.ExceptionName);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportExceptionMessage", SqlDbType.Text, entry.ExceptionMessage);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportExceptionStackTrace", SqlDbType.Text, entry.StackTrace);
                DatabaseHelper.BuildSqlParameter(cmd, "@CrashReportInnerExceptionCrashReportId", SqlDbType.Int, entry.InnerExceptionCrashReportId);

                rowsAffected = cmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : Customer.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, Customer entry)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandText = "UPDATE Customer SET CustomerBusinessName=@CustomerBusinessName,CustomerName=@CustomerName,CustomerAddress=@CustomerAddress,CustomerCity=@CustomerCity,CustomerState=@CustomerState,CustomerZip=@CustomerZip,CustomerPhone1=@CustomerPhone1,CustomerPhone2=@CustomerPhone2 WHERE CustomerId=@CustomerId";

                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerId", SqlDbType.Int, entry.Id);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerBusinessName", SqlDbType.Text, entry.BusinessName);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerName", SqlDbType.Text, entry.ContactsName);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerAddress", SqlDbType.Text, entry.Address);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerCity", SqlDbType.Text, entry.City);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerState", SqlDbType.Text, entry.State);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerZip", SqlDbType.Text, entry.ZipCode);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerPhone1", SqlDbType.Text, entry.Phone1);
                DatabaseHelper.BuildSqlParameter(cmd, "@CustomerPhone2", SqlDbType.Text, entry.Phone2);

                rowsAffected = cmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : DatabaseHelper.cs
License : GNU General Public License v3.0
Project Creator : nightness

public static bool SqlExecute(string sqlCommandText)
        {
            Int32 rowsAffected = 0;
            using (SqlConnection cn = new SqlConnection(ConnectionString))
            {
                cn.Open();
                using (SqlCommand sqlCmd = cn.CreateCommand())
                {
                    sqlCmd.CommandText = sqlCommandText;
                    sqlCmd.CommandType = CommandType.Text;
                    rowsAffected = sqlCmd.ExecuteNonQuery();
                }
                cn.Close();
            }
            return (rowsAffected != 0);
        }

19 View Source File : License.cs
License : GNU General Public License v3.0
Project Creator : nightness

private static bool Update(SqlConnection cn, License entry)
        {
            Int32 rowsAffected = 0;
            using (SqlCommand cmd = cn.CreateCommand())
            {
                cmd.CommandText = "UPDATE License SET LicenseCustomerId=@LicenseCustomerId,LicenseSerialNumber=@LicenseSerialNumber,LicenseIdenreplacedyHash=@LicenseIdenreplacedyHash,LicenseIsValid=@LicenseIsValid WHERE LicenseId=@LicenseId";

                DatabaseHelper.BuildSqlParameter(cmd, "@LicenseId", SqlDbType.Int, entry.Id);
                DatabaseHelper.BuildSqlParameter(cmd, "@LicenseCustomerId", SqlDbType.Int, entry.CustomerId);
                DatabaseHelper.BuildSqlParameter(cmd, "@LicenseSerialNumber", SqlDbType.Text, entry.SerialNumber);
                DatabaseHelper.BuildSqlParameter(cmd, "@LicenseIdenreplacedyHash", SqlDbType.Binary, entry.IdenreplacedyHash);
                DatabaseHelper.BuildSqlParameter(cmd, "@LicenseIsValid", SqlDbType.Bit, entry.IsValid);

                rowsAffected = cmd.ExecuteNonQuery();
            }
            return (rowsAffected != 0);
        }

19 View Source File : Program.cs
License : MIT License
Project Creator : ProfessionalCSharp

public static void ConnectionInformation()
        {
            using (var connection = new SqlConnection(GetConnectionString()))
            {
                connection.InfoMessage += (sender, e) =>
                {
                    Console.WriteLine($"warning or info: {e.Message}");
                };
                connection.StateChange += (sender, e) =>
                {
                    Console.WriteLine($"current state: {e.CurrentState}, before: {e.OriginalState}");
                };

                try
                {
                    connection.StatisticsEnabled = true;
                    connection.FireInfoMessageEventOnUserErrors = true;
                    connection.Open();

                    Console.WriteLine("connection opened");

                    // Do something useful
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = "SELECT replacedl, Publisher FROM [ProCSharp].[Books]";
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        Console.WriteLine($"{reader.GetString(0)} {reader.GetString(1)}");
                    }
                    IDictionary statistics = connection.RetrieveStatistics();
                    ShowStatistics(statistics);
                    connection.ResetStatistics();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }

19 View Source File : BooksData.cs
License : MIT License
Project Creator : ProfessionalCSharp

public async Task AddBookAsync(Book book, Transaction tx)
        {
            using (SqlConnection connection = new SqlConnection(GetConnectionString()))
            {
                string sql = "INSERT INTO [ProCSharp].[Books] ([replacedle], [Publisher], [Isbn], [ReleaseDate]) " +
                    "VALUES (@replacedle, @Publisher, @Isbn, @ReleaseDate)";

                await connection.OpenAsync();
                if (tx != null)
                {
                    connection.EnlistTransaction(tx);
                }
                var command = connection.CreateCommand();
                command.CommandText = sql;
                command.Parameters.AddWithValue("replacedle", book.replacedle);
                command.Parameters.AddWithValue("Publisher", book.Publisher);
                command.Parameters.AddWithValue("Isbn", book.Isbn);
                command.Parameters.AddWithValue("ReleaseDate", book.ReleaseDate);

                await command.ExecuteNonQueryAsync();
            }
        }

19 View Source File : BooksData.cs
License : MIT License
Project Creator : ProfessionalCSharp

public void AddBook(Book book)
        {
            using (SqlConnection connection = new SqlConnection(GetConnectionString()))
            {
                string sql = "INSERT INTO [ProCSharp].[Books] ([replacedle], [Publisher], [Isbn], [ReleaseDate]) " +
                    "VALUES (@replacedle, @Publisher, @Isbn, @ReleaseDate)";

                connection.Open();

                var command = connection.CreateCommand();
                command.CommandText = sql;
                command.Parameters.AddWithValue("replacedle", book.replacedle);
                command.Parameters.AddWithValue("Publisher", book.Publisher);
                command.Parameters.AddWithValue("Isbn", book.Isbn);
                command.Parameters.AddWithValue("ReleaseDate", book.ReleaseDate);

                command.ExecuteNonQuery();
            }
        }

19 View Source File : Program.cs
License : MIT License
Project Creator : ProfessionalCSharp

private static void StoredProcedure(string publisher)
        {
            using (var connection = new SqlConnection(GetConnectionString()))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = "[ProCSharp].[GetBooksByPublisher]";
                command.CommandType = CommandType.StoredProcedure;

                SqlParameter p1 = command.CreateParameter();
                p1.SqlDbType = SqlDbType.NVarChar;
                p1.ParameterName = "@Publisher";
                p1.Value = publisher;
                command.Parameters.Add(p1);
                connection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        int id = (int)reader["Id"];
                        string replacedle = (string)reader["replacedle"];
                        string pub = (string)reader["Publisher"];
                        DateTime releaseDate = (DateTime)reader["ReleaseDate"];
                        Console.WriteLine($"{replacedle} - {pub}; {releaseDate:d}");
                    }
                }
            }
        }

19 View Source File : Program.cs
License : MIT License
Project Creator : ProfessionalCSharp

private static void ExecuteScalar()
        {
            using (var connection = new SqlConnection(GetConnectionString()))
            {
                string sql = "SELECT COUNT(*) FROM [ProCSharp].[Books]";
                SqlCommand command = connection.CreateCommand();
                command.CommandText = sql;
                connection.Open();
                object count = command.ExecuteScalar();
                Console.WriteLine($"counted {count} book records");
            }
        }

19 View Source File : Program.cs
License : Apache License 2.0
Project Creator : SavantBuffer

private static void EnsureDBSetup()
        {
            using (var cnn = new SqlConnection(BenchmarksBase.ConnectionString))
            {
                cnn.Open();
                using (var cmd = cnn.CreateCommand())
                {
                    cmd.CommandText = @"
                        If (Object_Id('Post') Is Null)
                        Begin
	                        Create Table Post
	                        (
		                        Id int idenreplacedy primary key, 
		                        [Text] varchar(max) not null, 
		                        CreationDate datetime not null, 
		                        LastChangeDate datetime not null,
		                        Counter1 int,
		                        Counter2 int,
		                        Counter3 int,
		                        Counter4 int,
		                        Counter5 int,
		                        Counter6 int,
		                        Counter7 int,
		                        Counter8 int,
		                        Counter9 int
	                        );
	   
	                        Set NoCount On;
	                        Declare @i int = 0;
	                        While @i <= 5001
	                        Begin
		                        Insert Post ([Text],CreationDate, LastChangeDate) values (replicate('x', 2000), GETDATE(), GETDATE());
		                        Set @i = @i + 1;
	                        End
                        End
                    ";
                    cmd.Connection = cnn;
                    cmd.ExecuteNonQuery();
                }
            }
        }

19 View Source File : Test_ListExpress.cs
License : Apache License 2.0
Project Creator : shuxiaolong

private static List<EnWord> GetListTestObject()
        {
            string wordFilePath = string.Format(@"{0}\ListWord.data", AppDomain.CurrentDomain.BaseDirectory.Trim('\\', '/'));

            if (File.Exists(wordFilePath))
            {
                //从 磁盘序列化文件获取 单词集合
                List<EnWord> listWord = (List<EnWord>)FileDeserialize(wordFilePath, true);
                return listWord;
            }
            else
            {
                #region  从 数据库获取 单词集合

                List<EnWord> listWord = new List<EnWord>();
                using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=MyWord;User Id=sa; Pwd=123.com;"))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "SELECT * FROM [cetsix];";
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                EnWord item = new EnWord();
                                item.Word = (Convert.ToString(reader["words"]) ?? string.Empty).Trim();
                                item.Mean = (Convert.ToString(reader["meaning"]) ?? string.Empty).Trim();
                                item.Demo = (Convert.ToString(reader["lx"]) ?? string.Empty).Trim();
                                listWord.Add(item);
                            }
                        }
                    }
                }

                FileSerialize(wordFilePath, listWord, true);
                return listWord;

                #endregion
            }
        }

19 View Source File : SqlHelper.cs
License : MIT License
Project Creator : SkyChenSky

public static DataTable MssqlQuery(string connStr, string sql, SqlParameter[] sqlParameter = null)
        {
            var dt = new DataTable();
            using (var conn = new SqlConnection(connStr))
            {
                conn.Open();

                DataBase = conn.Database;

                var cmd = conn.CreateCommand();

                cmd.CommandText = sql;

                if (sqlParameter != null)
                    cmd.Parameters.AddRange(sqlParameter);

                var dr = cmd.ExecuteReader();

                dt.Load(dr);
            }

            return dt;
        }

19 View Source File : DB_Server_PerformanceTracker.cs
License : MIT License
Project Creator : somdipdey

private List<Expensive_Query> fetch_TopCustom_Expensive_Queries(string SQLConnectionString, int Num_Query_Returned = 40)
        {

            List<Expensive_Query> fetched_Query_list = new List<Expensive_Query>();



            SqlConnection conn = new SqlConnection(SQLConnectionString);

            DataTable dt = new DataTable();

            SqlCommand comm = conn.CreateCommand();

            try
            {

                string SPROC = " SELECT TOP " + Num_Query_Returned.ToString().Trim() + " " +

                                       " qs.sql_handle," +

                                       " qs.execution_count," +

                                       " qs.total_worker_time AS Total_CPU," +

                                       " total_CPU_inSeconds = " +

                                       " qs.total_worker_time/1000000," +

                                       " average_CPU_inSeconds = " +

                                       " (qs.total_worker_time/1000000) / qs.execution_count," +

                                       " qs.total_elapsed_time," +

                                       " total_elapsed_time_inSeconds = " +

                                       " qs.total_elapsed_time/1000000," +

                                       " st.text," +

                                       " qp.query_plan" +

                                   " FROM" +

                                       " sys.dm_exec_query_stats AS qs" +

                                           " CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st" +

                                           " CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp" +

                                   " ORDER BY qs.total_worker_time DESC";

                comm.CommandType = CommandType.Text;

                comm.CommandText = SPROC;

                comm.CommandTimeout = 500;

                conn.Open();

                SqlDataAdapter adapter = new SqlDataAdapter(comm);

                adapter.Fill(dt);



                if (dt.Rows.Count > 0)
                {

                    fetched_Query_list.Clear();



                    foreach (DataRow dr in dt.Rows)
                    {

                        Expensive_Query fetched_query = new Expensive_Query

                        {

                            Sql_Handle = Encoding.ASCII.GetBytes(dr["sql_handle"].ToString()),

                            Execution_Count = long.Parse(dr["execution_count"].ToString().Trim()),

                            Total_CPU_inMicroSeconds = long.Parse(dr["Total_CPU"].ToString().Trim()),

                            Total_CPU_inSeconds = long.Parse(dr["total_CPU_inSeconds"].ToString().Trim()),

                            Average_CPU_inSeconds = float.Parse(dr["average_CPU_inSeconds"].ToString().Trim()),

                            Total_Elapsed_Time_inMicroSeconds = long.Parse(dr["total_elapsed_time"].ToString().Trim()),

                            Total_Elapsed_Time_inSeconds = long.Parse(dr["total_elapsed_time_inSeconds"].ToString().Trim()),

                            Sql_Text = dr["text"].ToString(),

                            Query_Plan = dr["query_plan"].ToString()

                        };

                        fetched_Query_list.Add(fetched_query);

                    }

                }

            }

            catch (Exception ex) { }



            return fetched_Query_list;

        }

19 View Source File : SQL_Performance_Counters.cs
License : MIT License
Project Creator : somdipdey

private List<SQL_Individual_Performance_Counter> fetch_Performance_Counters(string SQLConnectionString)
        {

            List<SQL_Individual_Performance_Counter> fetched_Counters_List = new List<SQL_Individual_Performance_Counter>();



            SqlConnection conn = new SqlConnection(SQLConnectionString);

            DataTable dt = new DataTable();

            SqlCommand comm = conn.CreateCommand();

            try
            {

                string SPROC = " SELECT object_name, counter_name, instance_name, cntr_value, cntr_type FROM sys.dm_os_performance_counters ";

                comm.CommandType = CommandType.Text;

                comm.CommandText = SPROC;

                comm.CommandTimeout = 500;

                conn.Open();

                SqlDataAdapter adapter = new SqlDataAdapter(comm);

                adapter.Fill(dt);



                if (dt.Rows.Count > 0)
                {

                    fetched_Counters_List.Clear();

                    foreach (DataRow dr in dt.Rows)
                    {

                        SQL_Individual_Performance_Counter fetched_query = new SQL_Individual_Performance_Counter

                        {

                            object_name = dr["object_name"].ToString(),

                            counter_name = dr["counter_name"].ToString(),

                            instance_name = dr["instance_name"].ToString(),

                            cntr_value = long.Parse(dr["cntr_value"].ToString()),

                            cntr_type = int.Parse(dr["cntr_type"].ToString())

                        };

                        fetched_Counters_List.Add(fetched_query);

                    }

                }

            }

            catch (Exception ex) { }



            return fetched_Counters_List;

        }

19 View Source File : DB_Server_PerformanceTracker.cs
License : MIT License
Project Creator : somdipdey

private List<Expensive_Query> fetch_Top20_Expensive_Queries(string SQLConnectionString)
        {

            List<Expensive_Query> fetched_Query_list = new List<Expensive_Query>();



            SqlConnection conn = new SqlConnection(SQLConnectionString);

            DataTable dt = new DataTable();

            SqlCommand comm = conn.CreateCommand();

            try
            {

                string SPROC = " SELECT TOP 20 " +

                                       " qs.sql_handle," +

                                       " qs.execution_count," +

                                       " qs.total_worker_time AS Total_CPU," +

                                       " total_CPU_inSeconds = " +

                                       " qs.total_worker_time/1000000," +

                                       " average_CPU_inSeconds = " +

                                       " (qs.total_worker_time/1000000) / qs.execution_count," +

                                       " qs.total_elapsed_time," +

                                       " total_elapsed_time_inSeconds = " +

                                       " qs.total_elapsed_time/1000000," +

                                       " st.text," +

                                       " qp.query_plan" +

                                   " FROM" +

                                       " sys.dm_exec_query_stats AS qs" +

                                           " CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st" +

                                           " CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp" +

                                   " ORDER BY qs.total_worker_time DESC";

                comm.CommandType = CommandType.Text;

                comm.CommandText = SPROC;

                comm.CommandTimeout = 500;

                conn.Open();

                SqlDataAdapter adapter = new SqlDataAdapter(comm);

                adapter.Fill(dt);



                if (dt.Rows.Count > 0)
                {

                    fetched_Query_list.Clear();



                    foreach (DataRow dr in dt.Rows)
                    {

                        Expensive_Query fetched_query = new Expensive_Query

                        {

                            Sql_Handle = Encoding.ASCII.GetBytes(dr["sql_handle"].ToString()),

                            Execution_Count = long.Parse(dr["execution_count"].ToString().Trim()),

                            Total_CPU_inMicroSeconds = long.Parse(dr["Total_CPU"].ToString().Trim()),

                            Total_CPU_inSeconds = long.Parse(dr["total_CPU_inSeconds"].ToString().Trim()),

                            Average_CPU_inSeconds = float.Parse(dr["average_CPU_inSeconds"].ToString().Trim()),

                            Total_Elapsed_Time_inMicroSeconds = long.Parse(dr["total_elapsed_time"].ToString().Trim()),

                            Total_Elapsed_Time_inSeconds = long.Parse(dr["total_elapsed_time_inSeconds"].ToString().Trim()),

                            Sql_Text = dr["text"].ToString(),

                            Query_Plan = dr["query_plan"].ToString()

                        };

                        fetched_Query_list.Add(fetched_query);

                    }

                }

            }

            catch (Exception ex) { }



            return fetched_Query_list;

        }

19 View Source File : DB_Server_PerformanceTracker.cs
License : MIT License
Project Creator : somdipdey

private List<SQLServer_Buffer_Usage> fetch_SQLServer_Buffer_Usage(string SQLConnectionString)
        {

            List<SQLServer_Buffer_Usage> fetched_list = new List<SQLServer_Buffer_Usage>();



            SqlConnection conn = new SqlConnection(SQLConnectionString);

            DataTable dt = new DataTable();

            SqlCommand comm = conn.CreateCommand();

            try
            {

                string SPROC = " DECLARE @total_buffer INT; " +



                               " SELECT @total_buffer = cntr_value " +

                               " FROM sys.dm_os_performance_counters  " +

                               " WHERE RTRIM([object_name]) LIKE '%Buffer Manager' " +

                               " AND counter_name = 'Database Pages'; " +



                               " ;WITH src AS " +

                               " ( " +

                               " SELECT  " +

                               " database_id, db_buffer_pages = COUNT_BIG(*) " +

                               " FROM sys.dm_os_buffer_descriptors " +

                               " GROUP BY database_id " +

                               " ) " +

                               " SELECT " +

                               " [db_name] = CASE [database_id] WHEN 32767  " +

                               " THEN 'Resource DB'  " +

                               " ELSE DB_NAME([database_id]) END, " +

                               " db_buffer_pages, " +

                               " db_buffer_MB = db_buffer_pages / 128, " +

                               " db_buffer_percent = CONVERT(DECIMAL(6,3),  " +

                               " db_buffer_pages * 100.0 / @total_buffer) " +

                               " FROM src " +

                               " ORDER BY db_buffer_MB DESC;  ";

                comm.CommandType = CommandType.Text;

                comm.CommandText = SPROC;

                comm.CommandTimeout = 500;

                conn.Open();

                SqlDataAdapter adapter = new SqlDataAdapter(comm);

                adapter.Fill(dt);



                if (dt.Rows.Count > 0)
                {

                    fetched_list.Clear();



                    foreach (DataRow dr in dt.Rows)
                    {

                        SQLServer_Buffer_Usage fetched_item = new SQLServer_Buffer_Usage

                        {

                            db_name = dr.Field<string>("db_name"),

                            db_buffer_pages = long.Parse(dr["db_buffer_pages"].ToString().Trim()),

                            db_buffer_MB = long.Parse(dr["db_buffer_MB"].ToString().Trim()),

                            db_buffer_percent = float.Parse(dr["db_buffer_percent"].ToString().Trim())

                        };

                        fetched_list.Add(fetched_item);

                    }

                }

            }

            catch (Exception ex) { }



            return fetched_list;

        }

19 View Source File : DB_Server_PerformanceTracker.cs
License : MIT License
Project Creator : somdipdey

private List<SQLServer_Memory_Clerks> fetch_All_SQLServer_Memory_Clerks(string SQLConnectionString)
        {

            List<SQLServer_Memory_Clerks> fetched_list = new List<SQLServer_Memory_Clerks>();



            SqlConnection conn = new SqlConnection(SQLConnectionString);

            DataTable dt = new DataTable();

            SqlCommand comm = conn.CreateCommand();

            try
            {

                string SPROC = " SELECT * FROM sys.dm_os_memory_clerks ORDER BY (pages_kb + virtual_memory_committed_kb + virtual_memory_reserved_kb +  awe_allocated_kb) desc ";

                comm.CommandType = CommandType.Text;

                comm.CommandText = SPROC;

                comm.CommandTimeout = 500;

                conn.Open();

                SqlDataAdapter adapter = new SqlDataAdapter(comm);

                adapter.Fill(dt);



                if (dt.Rows.Count > 0)
                {

                    fetched_list.Clear();



                    foreach (DataRow dr in dt.Rows)
                    {

                        SQLServer_Memory_Clerks fetched_item = new SQLServer_Memory_Clerks

                        {

                            memory_clerk_address = dr.Field<byte[]>("memory_clerk_address"),

                            type = dr.Field<string>("type"),

                            name = dr.Field<string>("name"),

                            memory_node_id = int.Parse(dr["memory_node_id"].ToString().Trim()),

                            pages_kb = dr.Field<long>("pages_kb"),

                            virtual_memory_reserved_kb = dr.Field<long>("virtual_memory_reserved_kb"),

                            virtual_memory_committed_kb = dr.Field<long>("virtual_memory_committed_kb"),

                            awe_allocated_kb = dr.Field<long>("awe_allocated_kb"),

                            shared_memory_reserved_kb = dr.Field<long>("shared_memory_reserved_kb"),

                            shared_memory_committed_kb = dr.Field<long>("shared_memory_committed_kb"),

                            page_size_in_bytes = dr.Field<long>("page_size_in_bytes"),

                            page_allocator_address = dr.Field<byte[]>("page_allocator_address"),

                            host_address = dr.Field<byte[]>("host_address")

                        };

                        fetched_list.Add(fetched_item);

                    }

                }

            }

            catch (Exception ex) { }



            return fetched_list;

        }

19 View Source File : WorkloadAnalyzer.cs
License : MIT License
Project Creator : spaghettidba

private int CreateInterval(SqlConnection conn, SqlTransaction tran, DateTime intervalTime)
        {
            string sql = @"INSERT INTO [{0}].[Intervals] (interval_id, end_time, duration_minutes) VALUES (@interval_id, @end_time, @duration_minutes); ";
            sql = String.Format(sql, ConnectionInfo.SchemaName);

            // interval id is the number of seconds since 01/01/2000
            int interval_id = (int)intervalTime.Subtract(DateTime.MinValue.AddYears(1999)).TotalSeconds;

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.Parameters.AddWithValue("@interval_id", interval_id);
                cmd.Parameters.AddWithValue("@end_time", intervalTime);
                cmd.Parameters.AddWithValue("@duration_minutes", Interval);
                cmd.ExecuteNonQuery();
            }

            // If this the first interval of the replacedysis, write
            // a marker interval with duration = 0 
            if (!FirstIntervalWritten)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.Transaction = tran;
                    cmd.CommandText = sql;
                    cmd.Parameters.AddWithValue("@interval_id", interval_id - 1);
                    cmd.Parameters.AddWithValue("@end_time", intervalTime.AddSeconds(-1));
                    cmd.Parameters.AddWithValue("@duration_minutes", 0);
                    cmd.ExecuteNonQuery();
                    FirstIntervalWritten = true;
                }
            }

            return interval_id;
        }

19 View Source File : WorkloadAnalyzer.cs
License : MIT License
Project Creator : spaghettidba

protected void CreateTargetTables()
        {
			CreateTargetDatabase();

			string sql = File.ReadAllText(WorkloadController.BaseLocation + "\\Consumer\\replacedysis\\DatabaseSchema.sql");

            sql = sql.Replace("{DatabaseName}", ConnectionInfo.DatabaseName);
            sql = sql.Replace("{SchemaName}", ConnectionInfo.SchemaName);

            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConnectionInfo.ConnectionString;
                conn.Open();
                conn.ChangeDatabase(ConnectionInfo.DatabaseName);

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }

                sql = "IF OBJECT_ID('dbo.createreplacedysisView') IS NOT NULL EXEC('DROP PROCEDURE dbo.createreplacedysisView')";
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }

                sql = File.ReadAllText(WorkloadController.BaseLocation + "\\Consumer\\replacedysis\\createreplacedysisView.sql");
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }

                // Invoke the stored procedure to create the workload comparison view
                sql = @"
                    DECLARE @name1 sysname, @name2 sysname;

                    SELECT @name1 = [1], @name2 = [2]
                    FROM (
                        SELECT TOP(2) OBJECT_SCHEMA_NAME(object_id) AS schema_name, ROW_NUMBER() OVER (ORDER BY create_date DESC) AS RN
                        FROM sys.tables
                        WHERE name = 'WorkloadDetails'
                        ORDER BY create_date DESC
                    ) AS src
                    PIVOT( MIN(schema_name) FOR RN IN ([1], [2])) AS p;

                    SELECT @name1 ,@name2

                    IF OBJECT_ID(@name1 + '.WorkloadDetails') IS NOT NULL OR OBJECT_ID(@name2 + '.WorkloadDetails') IS NOT NULL
                    BEGIN
                        EXEC createreplacedysisView @name1, @name2;
                    END
                ";
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }
            }
        }

19 View Source File : SqlTraceEventReader.cs
License : MIT License
Project Creator : spaghettidba

private void ReadEventsFromFile()
        {
            try
            {
                SqlConnectionInfo info = new SqlConnectionInfo();
                info.ServerName = "(localdb)\\MSSQLLocalDB";

                string sqlCreateTable = @"
                    IF OBJECT_ID('tempdb.dbo.trace_reader_queue') IS NULL
                    BEGIN
                        CREATE TABLE tempdb.dbo.trace_reader_queue (
                            ts datetime DEFAULT GETDATE(),
                            path nvarchar(4000)
                        )
                    END
                    TRUNCATE TABLE tempdb.dbo.trace_reader_queue;
                    INSERT INTO tempdb.dbo.trace_reader_queue (path) VALUES(@path);
                ";
                
                using(SqlConnection conn = new SqlConnection())
                {
                    conn.ConnectionString = info.ConnectionString;
                    conn.Open();
                    using(SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sqlCreateTable;
                        SqlParameter prm = new SqlParameter()
                        {
                            ParameterName = "@path",
                            DbType = System.Data.DbType.String,
                            Size = 4000,
                            Value = tracePath
                        };
                        cmd.Parameters.Add(prm);
                        cmd.ExecuteNonQuery();
                    }
                }

                reader = new FileTraceEventDataReader(info.ConnectionString, Filter, Events);
                reader.ReadEvents();
                finished = true;
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);

                if (ex.InnerException != null)
                    logger.Error(ex.InnerException.Message);

                Dispose();
            }

        }

19 View Source File : FileTargetXEventDataReader.cs
License : MIT License
Project Creator : spaghettidba

private void ReadXEData(SqlConnection conn, ReadIteration currenreplacederation)
        {

            string sqlXE = @"
                SELECT event_data, file_name, file_offset
                FROM sys.fn_xe_file_target_read_file(
                    @filename, 
                    NULL, 
                    @initial_file_name, 
                    @initial_offset
                )
            ";

            logger.Debug("Reading XE data...");

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sqlXE;

                var paramPath = cmd.Parameters.Add("@filename", System.Data.SqlDbType.NVarChar, 260);
                if (ServerType != ExtendedEventsWorkloadListener.ServerType.AzureSqlDatabase)
                {
                    paramPath.Value = currenreplacederation.GetXEFilePattern();
                }
                else
                {
                    // Azure SqlDatabase does not support wildcards in file names
                    // Specify an exact file name
                    paramPath.Value = currenreplacederation.StartFileName;
                } 


                var paramInitialFile = cmd.Parameters.Add("@initial_file_name", System.Data.SqlDbType.NVarChar, 260);
                paramInitialFile.Value = currenreplacederation.StartFileName;

                var paramInitialOffset = cmd.Parameters.Add("@initial_offset", System.Data.SqlDbType.BigInt);
                paramInitialOffset.Value = currenreplacederation.GetInitialOffset();

                // don't preplaced initial file name and offset
                // read directly from the initial file
                // until we have some rows read already
                if (
                       EventCount == 0 
                    || currenreplacederation.StartOffset <=0 
                    || currenreplacederation.StartOffset == currenreplacederation.MinOffset
                )
                {
                    if (ServerType != ExtendedEventsWorkloadListener.ServerType.LocalDB)
                    {
                        paramPath.Value = currenreplacederation.StartFileName;
                    }
                    paramInitialFile.Value = DBNull.Value;
                    paramInitialOffset.Value = DBNull.Value;
                }

                retryWithNULLS:

                logger.Debug($"paramPath         : {paramPath.Value}");
                logger.Debug($"paramInitialFile  : {paramInitialFile.Value}");
                logger.Debug($"paramInitialOffset: {paramInitialOffset.Value}");

                // in case we don't have any data in the xe file
                // GetInitialOffset returns -1 and we need to wait a bit 
                // to let events flow to the file target
                if (currenreplacederation.GetInitialOffset() > 0)
                {

                    SqlTransformer transformer = new SqlTransformer();

                    using (var reader = cmd.ExecuteReader())
                    {
                        try
                        {
                            int skippedRows = 0;
                            while (reader.Read())
                            {
                                if (reader["file_name"] != DBNull.Value)
                                    currenreplacederation.EndFileName = (string)reader["file_name"];

                                if (reader["file_offset"] != DBNull.Value)
                                    currenreplacederation.EndOffset = (long)reader["file_offset"];

                                string xmldata = (string)reader["event_data"];
                                XmlDoreplacedent doc = new XmlDoreplacedent();
                                doc.LoadXml(xmldata);
                                var evt = parseEvent(doc);

                                // skip to the correct event in case we're reading again
                                // from the same file and we have a reference sequence
                                if ((currenreplacederation.RowsRead == 0) && (currenreplacederation.StartSequence > 0))
                                {
                                    // skip rows until we encounter the reference event_sequence
                                    if (evt.EventSequence != currenreplacederation.StartSequence)
                                    {
                                        skippedRows++;
                                        continue;
                                    }
                                    else
                                    {
                                        // skip one more row...
                                        skippedRows++;
                                        currenreplacederation.RowsRead++;
                                        continue;
                                    }
                                }


                                // this is only to print out a message, so consider
                                // getting rid of it
                                if (skippedRows > 0)
                                {
                                    logger.Debug($"Skipped rows: {skippedRows}");
                                    skippedRows = 0;
                                }

                                // now we have an event, no matter if good or bad => increment rows read
                                currenreplacederation.RowsRead++;
                                if (evt.EventSequence != null)
                                {
                                    currenreplacederation.EndSequence = (long)evt.EventSequence;
                                }

                                if (evt.Type == WorkloadEvent.EventType.Unknown)
                                    continue;

                                if (evt.Type <= WorkloadEvent.EventType.BatchCompleted)
                                {
                                    if (transformer.Skip(evt.Text))
                                        continue;

                                    evt.Text = transformer.Transform(evt.Text);
                                }

                                // it's a "good" event: add it to the queue                       
                                Events.Enqueue(evt);

                                EventCount++;

                            }
                            logger.Debug($"currenreplacederation.EndSequence : {currenreplacederation.EndSequence}");


                        }
                        catch (Exception xx)
                        {
                            if (xx.Message.Contains("Specify an offset that exists in the log file"))
                            {
                                // retry the query without specifying the offset / file pair
                                paramInitialFile.Value = DBNull.Value;
                                paramInitialOffset.Value = DBNull.Value;
                                goto retryWithNULLS;
                            }
                            else
                            {
                                throw;
                            }
                        }

                    }
                }

                // Wait before querying the events file again
                if (currenreplacederation.RowsRead < ReadIteration.DEFAULT_TRACE_ROWS_SLEEP_THRESHOLD)
                    Thread.Sleep(ReadIteration.DEFAULT_TRACE_INTERVAL_SECONDS * 1000);

            }

        }

19 View Source File : FileTraceEventDataReader.cs
License : MIT License
Project Creator : spaghettidba

private ReadIteration InitializeReadIteration(SqlConnection conn, ReadIteration previous)
        {

            string sqlPath = @"
                SELECT value AS path
                FROM ::fn_trace_getinfo(default)
                WHERE traceid = @traceId
                    AND property = 2;
            ";

            string sqlPathLocaldb = @"
                IF OBJECT_ID('tempdb.dbo.trace_reader_queue') IS NOT NULL
                BEGIN
                    SELECT TOP(1) path
                    FROM tempdb.dbo.trace_reader_queue
                    ORDER BY ts DESC
                END
                ELSE
                BEGIN
                    SELECT '' AS path
                END
            ";
            
            ReadIteration currenreplacederation = null;
            using (SqlCommand cmdPath = conn.CreateCommand())
            {
                if (conn.DataSource.StartsWith("(localdb)", StringComparison.InvariantCultureIgnoreCase))
                {
                    _checkedFormat = false;
                    cmdPath.CommandText = sqlPathLocaldb;
                }
                else
                {
                    _checkedFormat = true;
                    cmdPath.CommandText = sqlPath;

                    // Get trace id
                    if (traceId == -1)
                    {
                        string tracePath = utils.GetSqlDefaultLogPath(conn);
                        traceId = utils.GetTraceId(conn, Path.Combine(tracePath, "sqlworkload"));
                        if (traceId == -1)
                        {
                            throw new InvalidOperationException("The SqlWorkload capture trace is not running.");
                        }
                    }
                    var paramTraceId = cmdPath.Parameters.Add("@traceId", System.Data.SqlDbType.Int);
                    paramTraceId.Value = traceId;
                }   


                try
                {
                    logger.Debug("Initializing read iteration");

                    using (SqlDataReader reader = cmdPath.ExecuteReader())
                    {
                        // should return only one row
                        if (reader.Read())
                        {
                            currenreplacederation = new ReadIteration()
                            {
                                StartFileName = reader.GetString(0),
                                Files = 1
                            };
                            currenreplacederation.EndFileName = currenreplacederation.StartFileName;
                            if (previous != null)
                            {
                                //if we have a previous iteration, keep reading from that file first
                                currenreplacederation.StartFileName = previous.EndFileName;
                                // if the file has changed from the previous iteration
                                // read the default number of files ( = 0 )
                                if(currenreplacederation.StartFileName != currenreplacederation.EndFileName)
                                {
                                    currenreplacederation.Files = 0;
                                }

                                // we will use the previous event sequence as the boundary to where 
                                // we need to start reading events again
                                currenreplacederation.StartSequence = previous.EndSequence;
                                currenreplacederation.EndSequence = previous.EndSequence;

                                // trace files do not have an offset like xe files but
                                // the offset can be used to go back and read events
                                // from the previous sequence minus a safety offset
                                currenreplacederation.StartOffset = previous.EndSequence - ReadIteration.TRACE_DEFAULT_OFFSET;

                                // if reading from localdb we don't need to wait for more data
                                if (conn.DataSource.StartsWith("(localdb)", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    if (
                                        (currenreplacederation.StartFileName == previous.StartFileName) && 
                                        (currenreplacederation.StartSequence == previous.StartSequence)
                                    )
                                    {
                                        return null;
                                    }
                                }

                            }

                            logger.Debug($"currenreplacederation.StartFileName: {currenreplacederation.StartFileName}");
                            logger.Debug($"currenreplacederation.MinOffset    : {currenreplacederation.MinOffset}");
                            logger.Debug($"currenreplacederation.EndFileName  : {currenreplacederation.EndFileName}");
                            logger.Debug($"currenreplacederation.StartOffset  : {currenreplacederation.StartOffset}");
                            logger.Debug($"currenreplacederation.StartSequence: {currenreplacederation.StartSequence}");
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.Error(e.StackTrace);
                    throw;
                }
            }

            // check columns in the source file (if localdb)
            // before returning the read iteration
            if (!_checkedFormat)
            {
                if (!utils.CheckTraceFormat(conn, currenreplacederation.StartFileName))
                {
                    throw new InvalidDataException($"The trace file {currenreplacederation.StartFileName} lacks critical column information. See the doreplacedentation for required trace columns.");
                }
            }
            
            return currenreplacederation;
        }

19 View Source File : FileTraceEventDataReader.cs
License : MIT License
Project Creator : spaghettidba

private void ReadTraceData(SqlConnection conn, ReadIteration currenreplacederation)
        {
            string sqlReadTrace = @"
                SELECT EventSequence
	                ,Error
	                ,TextData
	                ,BinaryData
	                ,DatabaseID
	                ,HostName
	                ,ApplicationName
	                ,LoginName
	                ,SPID
	                ,Duration
	                ,StartTime
	                ,EndTime
	                ,Reads
	                ,Writes
	                ,CPU
	                ,EventClreplaced
	                ,DatabaseName
                FROM fn_trace_gettable(@path, @number_files)
            ";

            if (currenreplacederation.StartSequence > 0)
            {
                sqlReadTrace += "WHERE EventSequence > @event_offset";
            }

            logger.Debug("Reading Trace data...");

            TraceEventParser parser = new TraceEventParser();

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sqlReadTrace;

                var paramPath = cmd.Parameters.Add("@path", System.Data.SqlDbType.NVarChar, 260);
                paramPath.Value = currenreplacederation.StartFileName;

                var paramNumberFiles = cmd.Parameters.Add("@number_files", System.Data.SqlDbType.Int);
                paramNumberFiles.Value = currenreplacederation.Files;

                var paramInitialSequence = cmd.Parameters.Add("@event_offset", System.Data.SqlDbType.BigInt);
                paramInitialSequence.Value = currenreplacederation.StartOffset;

                // don't preplaced initial file name and offset
                // read directly from the initial file
                // until we have some rows read already
                if (
                       EventCount == 0
                    || currenreplacederation.StartOffset <= 0
                    || currenreplacederation.StartOffset == currenreplacederation.MinOffset
                )
                {
                    paramPath.Value = currenreplacederation.StartFileName;
                    paramNumberFiles.Value = 0;
                    paramInitialSequence.Value = 0;
                }

                logger.Debug($"paramPath           : {paramPath.Value}");
                logger.Debug($"paramNumberFiles    : {paramNumberFiles.Value}");
                logger.Debug($"paramInitialSequence: {paramInitialSequence.Value}");

            
                SqlTransformer transformer = new SqlTransformer();

                try
                {
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        int skippedRows = 0;
                        while (reader.Read())
                        {
                            if (reader["EventSequence"] != DBNull.Value)
                                currenreplacederation.EndSequence = (long)reader["EventSequence"];

                            // read the event from the sqldatareader
                            var evt = parser.ParseEvent(reader);

                            // skip invalid events
                            if (evt.Type == WorkloadEvent.EventType.Unknown)
                                continue;

                            // skip to the correct event in case we're reading again
                            // from the same file and we have a reference sequence
                            if ((currenreplacederation.RowsRead == 0) && (currenreplacederation.StartSequence > 0))
                            {
                                // skip rows until we encounter the reference event_sequence
                                if (evt.EventSequence != currenreplacederation.StartSequence)
                                {
                                    skippedRows++;
                                    continue;
                                }
                                else
                                {
                                    // skip one more row...
                                    skippedRows++;
                                    currenreplacederation.RowsRead++;
                                    continue;
                                }
                            }


                            // this is only to print out a message, so consider
                            // getting rid of it
                            if (skippedRows > 0)
                            {
                                logger.Debug($"Skipped rows: {skippedRows}");
                                skippedRows = 0;
                            }

                            // now we have an event, no matter if good or bad => increment rows read
                            currenreplacederation.RowsRead++;
                            if (evt.EventSequence != null)
                            {
                                currenreplacederation.EndSequence = (long)evt.EventSequence;
                            }


                            if (evt.Type <= WorkloadEvent.EventType.BatchCompleted)
                            {
                                if (transformer.Skip(evt.Text))
                                    continue;

                                if (!Filter.Evaluate(evt))
                                    continue;

                                evt.Text = transformer.Transform(evt.Text);
                            }

                            // it's a "good" event: add it to the queue                       
                            Events.Enqueue(evt);

                            EventCount++;

                        }
                        logger.Debug($"currenreplacederation.EndSequence : {currenreplacederation.EndSequence}");
                    }

                }
                catch (Exception)
                {
                    throw;
                }

                // Wait before querying the events file again
                if (currenreplacederation.RowsRead < ReadIteration.DEFAULT_TRACE_ROWS_SLEEP_THRESHOLD 
                    && currenreplacederation.StartFileName == currenreplacederation.EndFileName)
                    Thread.Sleep(ReadIteration.DEFAULT_TRACE_INTERVAL_SECONDS * 1000);

            }

        }

19 View Source File : SqlTraceWorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

private void StopTrace(SqlConnection conn, int id)
        {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = String.Format(@"
                    IF EXISTS (
                        SELECT *
                        FROM sys.traces
                        WHERE id = {0}
                    )
                    BEGIN
                        EXEC sp_trace_setstatus {0}, 0;
                        EXEC sp_trace_setstatus {0}, 2;
                    END
                ", id);
                cmd.ExecuteNonQuery();
        }

19 View Source File : WorkloadAnalyzer.cs
License : MIT License
Project Creator : spaghettidba

protected void CreateTargetDatabase()
		{
			string databaseName = ConnectionInfo.DatabaseName;
			ConnectionInfo.DatabaseName = "master";

			try
			{
				using (SqlConnection conn = new SqlConnection())
				{
					conn.ConnectionString = ConnectionInfo.ConnectionString;
					conn.Open();
					conn.ChangeDatabase(ConnectionInfo.DatabaseName);
					using (SqlCommand cmd = conn.CreateCommand())
					{
						string createDb = @"
						IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = @name)
						BEGIN
						    DECLARE @sql nvarchar(max); 
							SET @sql = N'CREATE DATABASE ' + QUOTENAME(@name);
							EXEC sp_executesql @sql;
						END
					";
						cmd.CommandText = createDb;
						cmd.Parameters.AddWithValue("@name", databaseName);
						cmd.ExecuteNonQuery();
					}
				}
			}
			finally
			{
				// restore original database name
				ConnectionInfo.DatabaseName = databaseName;
			}

		}

19 View Source File : TraceUtils.cs
License : MIT License
Project Creator : spaghettidba

public string GetSqlDefaultLogPath(SqlConnection conn)
        {
            string sql = @"
            DECLARE @defaultLog nvarchar(4000);

            EXEC master.dbo.xp_instance_regread
	            N'HKEY_LOCAL_MACHINE',
	            N'Software\Microsoft\MSSQLServer\MSSQLServer',
	            N'DefaultLog',
	            @defaultLog OUTPUT;

            IF @defaultLog IS NULL
            BEGIN
	            SELECT @defaultLog = REPLACE(physical_name,'mastlog.ldf','') 
	            FROM sys.master_files
                WHERE file_id = 2
					AND database_id = 1;
            END

            SELECT @defaultLog AS DefaultLog;
        ";
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                return (string)cmd.ExecuteScalar();
            }
        }

19 View Source File : FileTargetXEventDataReader.cs
License : MIT License
Project Creator : spaghettidba

private ReadIteration InitializeReadIteration(SqlConnection conn, ReadIteration previous)
        {

            string sqlPath = @"
                SELECT file_name, ISNULL(file_offset,-1) AS file_offset
                FROM (
                    SELECT CAST(target_data AS xml).value('(/EventFileTarget/File/@name)[1]','nvarchar(1000)') AS file_name
                    FROM sys.dm_xe_{0}session_targets AS t
                    INNER JOIN sys.dm_xe_{0}sessions AS s
                        ON t.event_session_address = s.address
                    WHERE s.name = @sessionName
                        AND target_name = 'event_file'
                ) AS fileName
                OUTER APPLY (
                    SELECT TOP(1) file_offset
                    FROM fn_xe_file_target_read_file(file_name,NULL,NULL,NULL)
                ) AS fileOffset;
            ";

            string sqlPathLocaldb = @"
                IF OBJECT_ID('tempdb.dbo.trace_reader_queue') IS NOT NULL
                BEGIN
                    SELECT TOP(1) path, CAST(1 AS bigint) AS file_offset
                    FROM tempdb.dbo.trace_reader_queue
                    ORDER BY ts DESC
                END
                ELSE
                BEGIN
                    SELECT '' AS path, CAST(-1 AS bigint) AS file_offset
                END
            ";

            string databaseSuffix = ServerType == ExtendedEventsWorkloadListener.ServerType.AzureSqlDatabase ? "database_" : "";
            ReadIteration currenreplacederation = null;
            using (SqlCommand cmdPath = conn.CreateCommand())
            {
                if (ServerType == ExtendedEventsWorkloadListener.ServerType.LocalDB)
                {
                    cmdPath.CommandText = sqlPathLocaldb;
                }
                else
                {
                    cmdPath.CommandText = String.Format(sqlPath, databaseSuffix);
                    var paramSessionName = cmdPath.Parameters.Add("@sessionName", System.Data.SqlDbType.NVarChar, 260);
                    paramSessionName.Value = SessionName;
                }

                try
                {
                    logger.Debug("Initializing read iteration");

                    using (SqlDataReader reader = cmdPath.ExecuteReader())
                    {
                        // should return only one row
                        if (reader.Read())
                        {
                            currenreplacederation = new ReadIteration()
                            {
                                StartFileName = reader.GetString(0),
                                MinOffset = reader.GetInt64(1)
                            };
                            currenreplacederation.EndFileName = currenreplacederation.StartFileName;
                            if (previous != null)
                            {
                                //if we have a previous iteration, keep reading from that file first
                                currenreplacederation.StartFileName = previous.EndFileName;

                                // we need to read the file from the previous distinct offset
                                // to avoid skipping events. The function fn_xe_file_target_read_file
                                // will skip all events up to the @initial_offset INCLUDED,
                                // so we need to start from the previous offset and skip some rows
                                currenreplacederation.StartOffset = ReadIteration.GetSecondLastOffset(currenreplacederation.StartFileName);

                                // we will use the previous event sequence as the boundary to where 
                                // we need to start reading events again
                                currenreplacederation.StartSequence = previous.EndSequence;
                                currenreplacederation.EndSequence = previous.EndSequence;

                                // if reading from localdb we don't need to wait for more data
                                if (ServerType == ExtendedEventsWorkloadListener.ServerType.LocalDB)
                                {
                                    if (
                                        (currenreplacederation.StartFileName == previous.StartFileName) &&
                                        (currenreplacederation.StartSequence == previous.StartSequence)
                                    )
                                    {
                                        return null;
                                    }
                                }
                            }

                            logger.Debug($"currenreplacederation.StartFileName: {currenreplacederation.StartFileName}");
                            logger.Debug($"currenreplacederation.MinOffset    : {currenreplacederation.MinOffset}");
                            logger.Debug($"currenreplacederation.EndFileName  : {currenreplacederation.EndFileName}");
                            logger.Debug($"currenreplacederation.StartOffset  : {currenreplacederation.StartOffset}");
                            logger.Debug($"currenreplacederation.StartSequence: {currenreplacederation.StartSequence}");
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.Error(e.StackTrace);
                    throw;
                }
            }
            return currenreplacederation;
        }

19 View Source File : TraceUtils.cs
License : MIT License
Project Creator : spaghettidba

public int GetTraceId(SqlConnection conn, string path)
        {
            string sql = @"
                SELECT TOP(1) id
                FROM (
	                SELECT id FROM sys.traces WHERE path LIKE '{0}%'
	                UNION ALL
	                SELECT -1
                ) AS i
                ORDER BY id DESC
            ";

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = String.Format(sql, path);
            return (int)cmd.ExecuteScalar();
        }

19 View Source File : WorkloadAnalysis.cs
License : MIT License
Project Creator : spaghettidba

public void Load()
        {
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConnectionInfo.ConnectionString;
                conn.Open();

                Dictionary<long, NormalizedQuery> NormalizedQueries = new Dictionary<long, NormalizedQuery>();

                int numIntervals = 0;
                int preaggregation = 1;
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "SELECT COUNT(*) FROM " + ConnectionInfo.SchemaName + ".Intervals WHERE duration_minutes > 0;";
                    cmd.CommandTimeout = 0;
                    numIntervals = (int)cmd.ExecuteScalar();
                }
                if (numIntervals > 500) // around 8 hours
                    preaggregation = 15;
                if (numIntervals > 1000) // around 16 hours
                    preaggregation = 30;
                if (numIntervals > 2000) // around 32 hours
                    preaggregation = 60;

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "SELECT TOP(1) end_time FROM " + ConnectionInfo.SchemaName + ".Intervals ORDER BY interval_id ASC ";
                    cmd.CommandTimeout = 0;
                    StartDate = (DateTime)cmd.ExecuteScalar();
                }

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM " + ConnectionInfo.SchemaName + ".NormalizedQueries";
                    cmd.CommandTimeout = 0;
                    using (var rdr = cmd.ExecuteReader())
                    {
                        while (rdr.Read())
                        {
                            NormalizedQueries.Add(rdr.GetInt64(rdr.GetOrdinal("sql_hash")), new NormalizedQuery()
                            {
                                Hash = rdr.GetInt64(rdr.GetOrdinal("sql_hash")),
                                NormalizedText = rdr.GetString(rdr.GetOrdinal("normalized_text")),
                                ExampleText = rdr.GetString(rdr.GetOrdinal("example_text"))
                            });
                        }
                    }
                }

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandTimeout = 0;
                    string sqlText = WorkloadViewer.Properties.Resources.Workloadreplacedysis;
                    cmd.CommandText = sqlText.Replace("capture", ConnectionInfo.SchemaName);
                    cmd.CommandText = cmd.CommandText.Replace("preaggregation", preaggregation.ToString());
                    cmd.CommandTimeout = 0;
                    using (var rdr = cmd.ExecuteReader())
                    {
                        Points = new ObservableCollection<WorkloadreplacedysisPoint>();
                        while (rdr.Read())
                        {
                            try
                            {
                                WorkloadreplacedysisPoint point = new WorkloadreplacedysisPoint()
                                {
                                    OffsetMinutes = rdr.GetInt32(rdr.GetOrdinal("offset_minutes")),
                                    DurationMinutes = rdr.GetInt32(rdr.GetOrdinal("duration_minutes")),
                                    NormalizedQuery = NormalizedQueries[rdr.GetInt64(rdr.GetOrdinal("sql_hash"))],
                                    ApplicationName = rdr.GetString(rdr.GetOrdinal("application_name")),
                                    DatabaseName = rdr.GetString(rdr.GetOrdinal("database_name")),
                                    LoginName = rdr.GetString(rdr.GetOrdinal("login_name")),
                                    HostName = rdr.GetString(rdr.GetOrdinal("host_name")),
                                    AvgCpuUs = rdr.GetInt64(rdr.GetOrdinal("avg_cpu_us")),
                                    MinCpuUs = rdr.GetInt64(rdr.GetOrdinal("min_cpu_us")),
                                    MaxCpuUs = rdr.GetInt64(rdr.GetOrdinal("max_cpu_us")),
                                    SumCpuUs = rdr.GetInt64(rdr.GetOrdinal("sum_cpu_us")),
                                    AvgReads = rdr.GetInt64(rdr.GetOrdinal("avg_reads")),
                                    MinReads = rdr.GetInt64(rdr.GetOrdinal("min_reads")),
                                    MaxReads = rdr.GetInt64(rdr.GetOrdinal("max_reads")),
                                    SumReads = rdr.GetInt64(rdr.GetOrdinal("sum_reads")),
                                    AvgWrites = rdr.GetInt64(rdr.GetOrdinal("avg_writes")),
                                    MinWrites = rdr.GetInt64(rdr.GetOrdinal("min_writes")),
                                    MaxWrites = rdr.GetInt64(rdr.GetOrdinal("max_writes")),
                                    SumWrites = rdr.GetInt64(rdr.GetOrdinal("sum_writes")),
                                    AvgDurationUs = rdr.GetInt64(rdr.GetOrdinal("avg_duration_us")),
                                    MinDurationUs = rdr.GetInt64(rdr.GetOrdinal("min_duration_us")),
                                    MaxDurationUs = rdr.GetInt64(rdr.GetOrdinal("max_duration_us")),
                                    SumDurationUs = rdr.GetInt64(rdr.GetOrdinal("sum_duration_us")),
                                    ExecutionCount = rdr.GetInt64(rdr.GetOrdinal("execution_count"))
                                };
                                Points.Add(point);
                            }
                            catch(Exception e)
                            {
                                logger.Warn($"Skipping invalid datapoint at {rdr.GetInt32(rdr.GetOrdinal("offset_minutes"))} because of Exception: {e.StackTrace}");
                            }
                        }
                    }
                }
            }
        }

19 View Source File : ExtendedEventsWorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

public override void Initialize()
        {
            using (SqlConnection conn = new SqlConnection())
            {
                if (ConnectionInfo == null)
                {
                    throw new ArgumentNullException("You need to provide ConnectionInfo to inizialize an ExtendedEventsWorkloadListener");
                }
                conn.ConnectionString = ConnectionInfo.ConnectionString;
                conn.Open();

                LoadServerType(conn);

                if (serverType == ServerType.AzureSqlDatabase)
                {
                    if (FileTargetPath == null)
                    {
                        throw new ArgumentException("Azure SqlDatabase does not support Extended Events streaming. Please specify a path for the FileTarget");
                    }
                    if (ConnectionInfo.DatabaseName == null)
                    {
                        throw new ArgumentException("Azure SqlDatabase does not support starting Extended Events sessions on the master database. Please specify a database name.");
                    }

                    ((ExtendedEventsEventFilter)Filter).IsSqlAzure = true;
                }
                else
                {
                    ConnectionInfo.DatabaseName = "master";
                }

                logger.Info($"Reading Extended Events session definition from {Source}");

                string sessionSql = null;
                try
                {
                    sessionSql = System.IO.File.ReadAllText(Source);

                    // Push Down EventFilters
                    string filters = String.Empty;

                    string appFilter = Filter.ApplicationFilter.PushDown();
                    string dbFilter = Filter.DatabaseFilter.PushDown();
                    string hostFilter = Filter.HostFilter.PushDown();
                    string loginFilter = Filter.LoginFilter.PushDown();

                    if (appFilter != String.Empty)
                    {
                        filters += ((filters == String.Empty) ? String.Empty : " AND ") + appFilter;
                    }
                    if (dbFilter != String.Empty)
                    {
                        filters += ((filters == String.Empty) ? String.Empty : " AND ") + dbFilter;
                    }
                    if (hostFilter != String.Empty)
                    {
                        filters += ((filters == String.Empty) ? String.Empty : " AND ") + hostFilter;
                    }
                    if (loginFilter != String.Empty)
                    {
                        filters += ((filters == String.Empty) ? String.Empty : " AND ") + loginFilter;
                    }

                    if (filters != String.Empty)
                    {
                        filters = "WHERE " + filters;
                    }

                    string sessionType = serverType == ServerType.AzureSqlDatabase ? "DATABASE" : "SERVER";
                    string principalName = serverType == ServerType.AzureSqlDatabase ? "username" : "server_principal_name";

                    sessionSql = String.Format(sessionSql, filters, sessionType, principalName);

                }
                catch (Exception e)
                {
                    throw new ArgumentException("Cannot open the source script to start the extended events session", e);
                }

                StopSession(conn);

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sessionSql;
                    cmd.ExecuteNonQuery();
                }
                if (FileTargetPath != null)
                {
                    string sql = @"
                        ALTER EVENT SESSION [{2}] ON {0}
                        ADD TARGET package0.event_file(SET filename=N'{1}',max_file_size=(100))
                    ";

                    sql = String.Format(sql, serverType == ServerType.FullInstance ? "SERVER" : "DATABASE", FileTargetPath, SessionName);

                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.ExecuteNonQuery();
                    }
                }


                Task.Factory.StartNew(() => ReadEvents());

                //Initialize the source of performance counters events
                Task.Factory.StartNew(() => ReadPerfCountersEvents());

                // Initialize the source of wait stats events
                Task.Factory.StartNew(() => ReadWaitStatsEvents());
            }
        }

19 View Source File : ExtendedEventsWorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

private void StopSession(SqlConnection conn)
        {
            string sql = @"
                DECLARE @condition bit = 0;

                IF SERVERPROPERTY('Edition') = 'SQL Azure'
                    AND SERVERPROPERTY('EngineEdition') = 5
                BEGIN
	                SELECT @condition = 1
	                WHERE EXISTS (
		                SELECT *
		                FROM sys.database_event_sessions
		                WHERE name = '{1}'
	                )
                END
                ELSE
                BEGIN 
	                SELECT @condition = 1
	                WHERE EXISTS (
		                SELECT *
		                FROM sys.server_event_sessions
		                WHERE name = '{1}'
	                )
                END

                IF @condition = 1
                BEGIN
	                BEGIN TRY
		                ALTER EVENT SESSION [{1}] ON {0} STATE = STOP;
	                END TRY
	                BEGIN CATCH
		                -- whoops...
		                PRINT ERROR_MESSAGE()
	                END CATCH
	                BEGIN TRY
		                DROP EVENT SESSION [{1}] ON {0};
	                END TRY
	                BEGIN CATCH
		                -- whoops...
		                PRINT ERROR_MESSAGE()
	                END CATCH
                END
            ";
            sql = String.Format(sql, serverType == ServerType.AzureSqlDatabase ? "DATABASE" : "SERVER", SessionName);
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
        }

19 View Source File : ExtendedEventsWorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

private void LoadServerType(SqlConnection conn)
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "SELECT SERVERPROPERTY('Edition')";
                string edition = (string)cmd.ExecuteScalar();
                cmd.CommandText = "SELECT SERVERPROPERTY('EngineEdition')";
                int engineEdition = (int)cmd.ExecuteScalar();
                if (edition == "SQL Azure")
                {
                    serverType = ServerType.AzureSqlDatabase;
                    if (engineEdition == 8)
                    {
                        serverType = ServerType.AzureSqlManagedInstance;
                    }
                }
                else
                {
                    serverType = ServerType.FullInstance;
                }
            }
        }

19 View Source File : SqlTraceWorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

public override void Initialize()
        {
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConnectionInfo.ConnectionString;
                conn.Open();

                string traceSql = null;
                try
                {
                    traceSql = System.IO.File.ReadAllText(Source);

                    // Push Down EventFilters
                    string filters = "";
                    filters += Environment.NewLine + Filter.ApplicationFilter.PushDown();
                    filters += Environment.NewLine + Filter.DatabaseFilter.PushDown();
                    filters += Environment.NewLine + Filter.HostFilter.PushDown();
                    filters += Environment.NewLine + Filter.LoginFilter.PushDown();

                    tracePath = utils.GetSqlDefaultLogPath(conn);
                    traceSql = String.Format(traceSql, TraceSizeMB, TraceRolloverCount, Path.Combine(tracePath  ,"sqlworkload"), filters);
                }
                catch (Exception e)
                {
                    throw new ArgumentException("Cannot open the source script to start the sql trace", e);
                }

                int id = utils.GetTraceId(conn, Path.Combine(tracePath, "sqlworkload"));
                if(id > 0)
                {
                    StopTrace(conn, id);
                }

                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = traceSql;
                traceId = (int)cmd.ExecuteScalar();

                // Initialize the source of execution related events
                if(StreamSource == StreamSourceEnum.StreamFromFile)
                    Task.Factory.StartNew(() => ReadEventsFromFile());
                else if (StreamSource == StreamSourceEnum.StreamFromTDS)
                    Task.Factory.StartNew(() => ReadEventsFromTDS());


                // Initialize the source of performance counters events
                Task.Factory.StartNew(() => ReadPerfCountersEvents());

                // Initialize the source of wait stats events
                Task.Factory.StartNew(() => ReadWaitStatsEvents());
            }
        }

19 View Source File : ExtendedEventsEventReader.cs
License : MIT License
Project Creator : spaghettidba

private void ReadEventsFromFile()
        {
            try
            {
                SqlConnectionInfo info = new SqlConnectionInfo();
                info.ServerName = "(localdb)\\MSSQLLocalDB";

                string sqlCreateTable = @"
                    IF OBJECT_ID('tempdb.dbo.trace_reader_queue') IS NULL
                    BEGIN
                        CREATE TABLE tempdb.dbo.trace_reader_queue (
                            ts datetime DEFAULT GETDATE(),
                            path nvarchar(4000)
                        )
                    END
                    TRUNCATE TABLE tempdb.dbo.trace_reader_queue;
                    INSERT INTO tempdb.dbo.trace_reader_queue (path) VALUES(@path);
                ";

                using (SqlConnection conn = new SqlConnection())
                {
                    conn.ConnectionString = info.ConnectionString;
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sqlCreateTable;
                        SqlParameter prm = new SqlParameter()
                        {
                            ParameterName = "@path",
                            DbType = System.Data.DbType.String,
                            Size = 4000,
                            Value = filePath
                        };
                        cmd.Parameters.Add(prm);
                        cmd.ExecuteNonQuery();
                    }
                }

                reader = new FileTargetXEventDataReader(info.ConnectionString, null, Events, ExtendedEventsWorkloadListener.ServerType.LocalDB);
                reader.ReadEvents();
                finished = true;
                    
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);

                if (ex.InnerException != null)
                    logger.Error(ex.InnerException.Message);

                Dispose();
            }
        }

19 View Source File : WorkloadAnalyzer.cs
License : MIT License
Project Creator : spaghettidba

private void WriteDictionary(Dictionary<string, int> values, SqlConnection conn, SqlTransaction tran, string name)
        {

            // create a temporary table

            string sql = @"
                SELECT TOP(0) *
                INTO #{0}
                FROM [{1}].[{0}];
            ";
            sql = String.Format(sql, name, ConnectionInfo.SchemaName);

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }

            // bulk insert into temporary
            using (SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(conn,
                                                                SqlBulkCopyOptions.KeepIdenreplacedy |
                                                                SqlBulkCopyOptions.FireTriggers |
                                                                SqlBulkCopyOptions.CheckConstraints |
                                                                SqlBulkCopyOptions.TableLock,
                                                                tran))
            {

                bulkCopy.DestinationTableName = "#" + name;
                bulkCopy.BatchSize = 1000;
                bulkCopy.BulkCopyTimeout = 300;
                bulkCopy.WriteToServer(DataUtils.ToDataTable(from t in values select new { t.Value, t.Key }));

            }

            // merge new data

            sql = @"
                INSERT INTO [{1}].[{0}s]
                SELECT *
                FROM #{0}s AS src
                WHERE NOT EXISTS (
                    SELECT *
                    FROM [{1}].[{0}s] AS dst 
                    WHERE dst.[{0}_id] = src.[{0}_id]
                );
            ";
            sql = String.Format(sql, name.Substring(0, name.Length - 1), ConnectionInfo.SchemaName);

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
        }

19 View Source File : WorkloadAnalyzer.cs
License : MIT License
Project Creator : spaghettidba

private void WriteNormalizedQueries(Dictionary<long, NormalizedQuery> values, SqlConnection conn, SqlTransaction tran)
        {
            // create a temporary table

            string sql = @"
                SELECT TOP(0) *
                INTO #NormalizedQueries
                FROM [{0}].[NormalizedQueries];
            ";
            sql = String.Format(sql, ConnectionInfo.SchemaName);

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }

            // bulk insert into temporary
            using (SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(conn,
                                                                SqlBulkCopyOptions.KeepIdenreplacedy |
                                                                SqlBulkCopyOptions.FireTriggers |
                                                                SqlBulkCopyOptions.CheckConstraints |
                                                                SqlBulkCopyOptions.TableLock,
                                                                tran))
            {

                bulkCopy.DestinationTableName = "#NormalizedQueries";
                bulkCopy.BatchSize = 1000;
                bulkCopy.BulkCopyTimeout = 300;
                bulkCopy.WriteToServer(DataUtils.ToDataTable(from t in values where (t.Value != null) select new { t.Value.Hash, t.Value.NormalizedText, t.Value.ExampleText }));

            }

            // merge new data

            sql = @"
                INSERT INTO [{0}].[NormalizedQueries]
                SELECT *
                FROM #NormalizedQueries AS src
                WHERE NOT EXISTS (
                    SELECT *
                    FROM [{0}].[NormalizedQueries] AS dst 
                    WHERE dst.[sql_hash] = src.[sql_hash]
                );
            ";
            sql = String.Format(sql, ConnectionInfo.SchemaName);

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }


            // Erase from memory all the normalized queries 
            // already written to the database. This should reduce
            // the memory footprint quite a lot
            foreach(var hash in values.Keys.ToList())
            {
                values[hash] = null;
            }
            // Run the Garbage Collector in a separate task
            Task.Factory.StartNew(() => InvokeGC());
        }

19 View Source File : TraceUtils.cs
License : MIT License
Project Creator : spaghettidba

public bool CheckTraceFormat(SqlConnection conn, string path)
        {
            string sql = @"
                SELECT COUNT(*) AS cnt
                FROM(
                    SELECT TOP(100) *
                    FROM fn_trace_gettable(@path, default)
                ) AS data
                WHERE EventSequence IS NOT NULL
                    AND SPID IS NOT NULL
            ";
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                var p = cmd.CreateParameter();
                p.ParameterName = "@path";
                p.DbType = System.Data.DbType.AnsiString;
                p.Value = path;
                cmd.Parameters.Add(p);
                return ((int)cmd.ExecuteScalar()) > 0;
            }

        }

19 View Source File : WorkloadListener.cs
License : MIT License
Project Creator : spaghettidba

private int GetLastCPUUsage()
        {

            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConnectionInfo.ConnectionString;
                conn.Open();
                // Calculate CPU usage during the last minute interval
                string sql = @"
                    IF SERVERPROPERTY('Edition') = 'SQL Azure'
                        AND SERVERPROPERTY('EngineEdition') = 5
                    BEGIN
                        WITH CPU_Usage AS (
                            SELECT avg_cpu_percent, end_time AS Event_Time
                            FROM sys.dm_db_resource_stats WITH (NOLOCK) 
                        )
                        SELECT 
                            CAST(ISNULL(AVG(avg_cpu_percent),0) AS int) AS avg_CPU_percent
                        FROM CPU_Usage
                        WHERE [Event_Time] >= DATEADD(minute, -{0}, GETDATE())
                        OPTION (RECOMPILE);
                    END

                    IF SERVERPROPERTY('Edition') = 'SQL Azure'
                        AND SERVERPROPERTY('EngineEdition') = 8 -- Managed Instance
                    BEGIN
                        WITH PerfCounters AS (
	                        SELECT DISTINCT
	                             RTrim(spi.[object_name]) AS [object_name]
	                            ,RTrim(spi.[counter_name]) AS [counter_name]
	                            ,RTRIM(spi.instance_name) AS [instance_name]
	                            ,CAST(spi.[cntr_value] AS BIGINT) AS [cntr_value]
	                            ,spi.[cntr_type]
	                        FROM sys.dm_os_performance_counters AS spi 
	                        LEFT JOIN sys.databases AS d
		                        ON LEFT(spi.[instance_name], 36) -- some instance_name values have an additional identifier appended after the GUID
		                        = d.[name]
	                        WHERE
		                        counter_name IN (
			                         'CPU usage %'
			                        ,'CPU usage % base'
		                        ) 
                        )
                        SELECT CAST(SUM(value) AS int) AS avg_CPU_percent
                        FROM (
                            SELECT 
	                            CAST(CASE WHEN pc.[cntr_type] = 537003264 AND pc1.[cntr_value] > 0 THEN (pc.[cntr_value] * 1.0) / (pc1.[cntr_value] * 1.0) * 100 ELSE pc.[cntr_value] END AS float(10)) AS [value]
                            from PerfCounters pc
                            LEFT OUTER JOIN PerfCounters AS pc1
	                            ON (
		                            pc.[counter_name] = REPLACE(pc1.[counter_name],' base','')
		                            OR pc.[counter_name] = REPLACE(pc1.[counter_name],' base',' (ms)')
	                            )
	                            AND pc.[object_name] = pc1.[object_name]
	                            AND pc.[instance_name] = pc1.[instance_name]
	                            AND pc1.[counter_name] LIKE '%base'
                            WHERE
	                            pc.[counter_name] NOT LIKE '% base'
                                AND pc.object_name LIKE '%:Resource Pool Stats'
                        ) AS p
                        OPTION (RECOMPILE);
                    END


                    ELSE -- On Premises

                    BEGIN
                        WITH ts_now(ts_now) AS (
                            SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info WITH (NOLOCK)
                        ),
                        CPU_Usage AS (
                            SELECT TOP(256) SQLProcessUtilization, 
                                            DATEADD(ms, -1 * (ts_now.ts_now - [timestamp]), GETDATE()) AS [Event_Time] 
                            FROM (
                                SELECT record.value('(./Record/@id)[1]', 'int') AS record_id, 
                                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') 
                                    AS [SystemIdle], 
                                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') 
                                    AS [SQLProcessUtilization], [timestamp] 
                                FROM (
                                    SELECT [timestamp], CONVERT(xml, record) AS [record] 
                                    FROM sys.dm_os_ring_buffers WITH (NOLOCK)
                                    WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' 
                                        AND record LIKE N'%<SystemHealth>%'
                                ) AS x
                            ) AS y 
                            CROSS JOIN ts_now
                        )
                        SELECT 
                            ISNULL(AVG(SQLProcessUtilization),0) AS avg_CPU_percent
                        FROM CPU_Usage
                        WHERE [Event_Time] >= DATEADD(minute, -{0}, GETDATE())
                        OPTION (RECOMPILE);
                    END
                ";

                sql = String.Format(sql,StatsCollectionIntervalSeconds / 60);

                int avg_CPU_percent = -1;

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    avg_CPU_percent = (int)cmd.ExecuteScalar();
                }

                return avg_CPU_percent;
            }
        }

19 View Source File : AnalyzerExecutionResult.cs
License : MIT License
Project Creator : SSASQueryAnalyzer

public static replacedyzerExecutionResult CreateFromBatch(string connectionStringBatch, string batchID, ClearCacheMode clearCacheMode)
        {
            // TODO: parallelizzare e sistemare codice
            Action<string, Action<DataTable>, Action<SqlParameterCollection>> load = (commandText, action, param) =>
            {
                using (var connection = new SqlConnection(connectionStringBatch))
                {
                    connection.Open();

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = commandText;
                        command.Parameters.Add(new SqlParameter("@batchID", SqlDbType.UniqueIdentifier)).Value = Guid.Parse(batchID);
                        command.Parameters.Add(new SqlParameter("@clearCacheMode", SqlDbType.NVarChar)).Value = clearCacheMode;
                        param(command.Parameters);

                        using (var reader = command.ExecuteReader())
                        using (var table = new DataTable())
                        {
                            table.Load(reader);
                            action(table);
                        }
                    }
                }
            };

            var result = new replacedyzerExecutionResult();

            load("[asqa].[sp_read_CommonEnginePerformance]", (table) => result.EnginePerformances = EnginePerformanceCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonAggregationsRead]", (table) => result.AggregationsReads = AggregationsReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonParreplacedionsRead]", (table) => result.ParreplacedionsReads = ParreplacedionsReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_CommonCachesRead]", (table) => result.CachesReads = CachesReadCollection.CreateFromDataTable(table), (param) => { });
            load("[asqa].[sp_read_ExecutionInfo]", (table) => result.ExecutionInfo = table.Copy(), (param) => { });

            #region Load performance

            DataTable performanceTypes = null;
            load("[asqa].[sp_read_PerformanceTypes]", (table) => performanceTypes = table.Copy(), (param) => { });

            result.Performances = new PerformanceItemCollectionList();

            foreach (DataRow type in performanceTypes.Rows)
            {
                string category = Convert.ToString(type["CategoryName"]);
                string name = Convert.ToString(type["CounterName"]);           

                load("[asqa].[sp_read_Performance]", 
                    (table) => result.Performances.Add(PerformanceItemCollection.CreateFromDataTable(table, category, name)), 
                    (param) => 
                    {
                        param.Add(new SqlParameter("@categoryName", SqlDbType.NVarChar)).Value = category;
                        param.Add(new SqlParameter("@counterName", SqlDbType.NVarChar)).Value = name;
                    });
            }

            #endregion

            #region Load trace

            DataTable profilerTypes = null;
            load("[asqa].[sp_read_TraceTypes]", (table) => profilerTypes = table.Copy(), (param) => { });

            result.Profilers = new ProfilerItemCollectionList();

            foreach (DataRow type in profilerTypes.Rows)
            {
                string eventClreplaced = type["EventClreplaced"].ToString();

                load("[asqa].[sp_read_Trace]", 
                    (table) => result.Profilers.Add(ProfilerItemCollection.CreateFromDataTable(table, eventClreplaced)),
                    (param) => param.Add(new SqlParameter("@eventClreplaced", SqlDbType.NVarChar)).Value = eventClreplaced);
            }

            #endregion

            return result;
        }

19 View Source File : BatchHelper.cs
License : MIT License
Project Creator : SSASQueryAnalyzer

public static void WriteToServer(ProcedureContext procedureContext, IDataReader reader, string destinationTableName, string beforeActionCommandText = null, string afterActionCommandText = null)
        {
            using (procedureContext.ImpersonationIdenreplacedy.Impersonate())
            {
                using (var connection = new SqlConnection(procedureContext.BatchConnectionString))
                {
                    connection.Open();

                    if (beforeActionCommandText != null)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.CommandText = beforeActionCommandText;
                            command.ExecuteNonQuery();
                        }
                    }

                    // http://www.sqlbi.com/wp-content/uploads/SqlBulkCopy-Performance-1.0.pdf
                    using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, externalTransaction: null))
                    {
                        var fields = Enumerable.Range(0, reader.FieldCount);
                        foreach (var columnName in fields.Select((i) => reader.GetName(i)))
                            bulkCopy.ColumnMappings.Add(columnName, columnName);

                        bulkCopy.BatchSize = BatchHelper.BulkCopyBatchSize;
                        bulkCopy.BulkCopyTimeout = BatchHelper.BulkCopyTimeout;
                        bulkCopy.DestinationTableName = destinationTableName;

                        do
                        {
                            bulkCopy.WriteToServer(reader);
                        }
                        while (reader.NextResult());
                    }

                    if (afterActionCommandText != null)
                    {
                        using (var command = connection.CreateCommand())
                        {
                            command.CommandText = afterActionCommandText;
                            command.CommandTimeout = 0;
                            command.ExecuteNonQuery();
                        }
                    }
                }
            }
        }

19 View Source File : AsqaHelperBatchModeControl.cs
License : MIT License
Project Creator : SSASQueryAnalyzer

private void RefreshCurrentSQLInstance()
        {
            try
            {
                DatabaseVersion = null;
                SetSQLInstanceControlsDisabled();

                var connectionString = GetCurrentSQLInstanceConnectionString();
                if (connectionString == null)
                    return;
             
                using (var connection = new SqlConnection(connectionString))
                {
                    connection.Open();

                    SqlInstanceConnected = true;

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandText = CommandTextCheckDatabaseExist.FormatWith(BatchDatabaseName);
                        command.CommandType = CommandType.Text;

                        DatabaseInstalled = command.ExecuteScalar() != null;
                    }

                    if (DatabaseInstalled)
                    {
                        connection.Close();
                        connection.ConnectionString = connectionString.ToAsqaSqlConnectionString();
                        connection.Open();

                        using (var command = connection.CreateCommand())
                        {
                            command.CommandText = CommandTextCheckExtendedPropertyValue.FormatWith(BatchDatabaseExtendedPropertyVersionName);
                            command.CommandType = CommandType.Text;

                            DatabaseVersion = (string)command.ExecuteScalar();
                        }
                    }
                }
                
                DatabaseInstalled = DatabaseVersion != null;

                EnableASQADBControls();
            }
            catch (Exception ex)
            {
                ex.HandleException(display: true);
            }
        }

See More Examples