Пример #1
0
        public void RunProc(string strConnect, string procName)
        {
            //****************************************
            //* Purpose: Executing Stored Procedures where UPDATE, INSERT
            //*and DELETE statements are expected but does not
            //*work for select statement is expected.
            //* Input parameters:
            //*procName ---StoredProcedures name
            //* Returns :
            //*nothing
            //* ***************************************
            string strCommandText = procName;
            //create a new Connection object using the connection string
            var objConnect = new SqlConnection(strConnect);
            //create a new Command using the CommandText and Connection object
            var objCommand = new SqlCommand(strCommandText, objConnect)
            {
                CommandTimeout = 3600
            };

            //set the timeout in seconds

            try
            {
                objConnect.Open();
                objCommand.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                PLOG.Write(e.Message, 1);
                throw;
            }
        }
Пример #2
0
        //private
        //**************************************
        //* Purpose: Accessing SQL database
        //*Methods:
        //*GetDataSet
        //*RunProc
        //*GetDataReader
        //*GetDataView
        //* *************************************
        public bool BulkCopyData(string strConnect, string bulkCopyTable, SqlDataReader sourcedata)
        {
            //********************************
            //* Purpose: Performs bulk copy from one data source to another
            //* Input parameters:
            //* bulkCopytable ---the target table to bulk data into
            //* sourcedata ---the SqlDataReader holding the data to bulk insert
            //* Returns :
            //* nothing
            //**************************************************
            bool err = false;
            //create source connection
            var sourceConnection = new SqlConnection(strConnect);

            sourceConnection.Open();
            // Create SqlBulkCopy
            var bulkData = new SqlBulkCopy(strConnect, SqlBulkCopyOptions.TableLock)
            {
                BatchSize            = 1000,
                BulkCopyTimeout      = 360,
                DestinationTableName = bulkCopyTable
            };

            //set number of records to process in one batch
            //set timeout for a single bulk process
            // Set destination table name

            try
            {
                bulkData.WriteToServer(sourcedata);
            }
            catch (Exception e)
            {
                err = true;
                PLOG.Write(e.Message, 1);
                bulkData.Close();
                sourceConnection.Close();
                sourceConnection.Dispose();
            }
            finally
            {
                bulkData.Close();
                sourceConnection.Close();
                sourceConnection.Dispose();
            }
            return(err);
        }
Пример #3
0
        public DataSet GetDataSet(string strConnect, string[] procName, string[] dataTable)
        {
            //********************************
            //* Purpose: Returns Dataset for one or multi datatables
            //* Input parameters:
            //*procName() ---StoredProcedures name in array
            //*dataTable()---dataTable name in array
            //* Returns :
            //*DataSet Object contains data
            //**************************************************
            SqlDataAdapter dadEorder;
            var            dstEorder = new DataSet();
            var            conn      = new SqlConnection(strConnect);

            try
            {
                int intCnt = procName.GetUpperBound(0);
                // if one datatable and SP
                if (intCnt == 0)
                {
                    dadEorder = new SqlDataAdapter(procName[0], conn);
                    dadEorder.Fill(dstEorder, dataTable[0]);
                }
                // more than one datatable and one SP
                else
                {
                    conn.Open();
                    //add first data table and first SP
                    dadEorder = new SqlDataAdapter(procName[0], conn);
                    dadEorder.Fill(dstEorder, dataTable[0]);
                    // add second datatable and second SP onwards
                    for (int i = 1; i < (intCnt + 1); i++)
                    {
                        dadEorder.SelectCommand = new SqlCommand(procName[i], conn);
                        dadEorder.Fill(dstEorder, dataTable[i]);
                    }
                }
                return(dstEorder);
            }
            catch (Exception e)
            {
                PLOG.Write(e.Message, 1);
                throw;
            }
        }
Пример #4
0
        public DataView GetDataView(string strConnect, string procName, string dataSetTable)
        {
            //*****************************************
            //* Purpose: Getting DataReader for the given Procedure
            //* Input parameters:
            //* procName ---StoredProcedures name
            //* dataSetTable--dataSetTable name sting
            //* Returns :
            //* DataView contains data
            //* ****************************************
            string   strCommandText = procName;
            DataView objDataView;
            //create a new Connection object using the connection string
            var objConnect = new SqlConnection(strConnect);
            //create a new Command using the CommandText and Connection object
            var objCommand = new SqlCommand(strCommandText, objConnect);
            //declare a variable to hold a DataAdaptor object
            var objDataAdapter = new SqlDataAdapter();
            var objDataSet     = new DataSet(dataSetTable);

            //set the timeout in seconds
            objCommand.CommandTimeout = 3600;

            try
            {
                //open the connection and execute the command
                objConnect.Open();
                objDataAdapter.SelectCommand = objCommand;
                objDataAdapter.Fill(objDataSet);

                objDataView = new DataView(objDataSet.Tables[0]);

                //objDataReader = objCommand.ExecuteReader()
            }
            catch (Exception e)
            {
                PLOG.Write(e.Message, 1);
                throw;
            }
            return(objDataView);
        }
Пример #5
0
 public DataTable GetDataTable(string strConnect, string procName)
 {
     //********************************
     //* Purpose: Returns DataTable for one datatables
     //* Input parameters:
     //*procName ---StoredProcedure or query name
     //* Returns :
     //*DataTable Object contains data
     //**************************************************
     using (var dstEorder = new DataTable())
     {
         using (var conn = new SqlConnection(strConnect))
         {
             PLOG.Write(procName);
             using (var dadEorder = new SqlDataAdapter(procName, conn))
             {
                 dadEorder.Fill(dstEorder);
             }
             // more than one datatable and one SP
         }
         return(dstEorder);
     }
 }
Пример #6
0
        public SqlDataReader GetDataReader(string strConnect, string procName)
        {
            //**************************************
            //* Purpose: Getting DataReader for the given Procedure
            //* Input parameters:
            //*procName ---StoredProcedures name
            //* Returns :
            //*DataReader contains data
            //* ************************************
            string        strCommandText = procName;
            SqlDataReader objDataReader;
            //create a new Connection object using the connection string
            var objConnect = new SqlConnection(strConnect);
            //create a new Command using the CommandText and Connection object
            var objCommand = new SqlCommand(strCommandText, objConnect)
            {
                CommandTimeout = 3600
            };

            //set the timeout in seconds

            try
            {
                //open the connection and execute the command
                objConnect.Open();
                //objDataAdapter.SelectCommand = objCommand
                objDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
            }

            catch (Exception e)
            {
                PLOG.Write(e.Message, 1);
                throw;
            }
            return(objDataReader);
        }
Пример #7
0
        private static void Main(string[] args)
        {
            CLP.About();

            if (args.Length == 0)
            {
                char[] delimiterChars = { ' ' };
                if (File.Exists("tpccbench.txt"))
                {
                    //attempt to open file with command line args in it
                    StreamReader re      = File.OpenText("tpccbench.txt");
                    string       input   = re.ReadToEnd();
                    string[]     cmdargs = input.Split(delimiterChars);
                    re.Close();
                    //send the command line to the parser
                    CLP.Cmdline(cmdargs);
                }
                else
                {
                    Globals.Err = 1;
                    Console.WriteLine("tpccbench.txt not found, no commands on command line found.");
                }
            }
            else
            {
                CLP.Cmdline(args);
            }

            if (Globals.Err == 1)
            {
                Console.WriteLine("Error detected, execution stopped.");
            }
            else if (Globals.Err == 2)
            {
                Console.WriteLine("Program Exit.");
            }
            else
            {
                //LoadGlobal.LoadGeneralGlobals();
                LoadGlobals.LoadMasterConnectionString();
                LoadGlobals.LoadLogFilePath();

                var trd = new Thread(PLOG.WriteLog);
                //trd.IsBackground = true;
                trd.Start();

                PLOG.Write("Running Benchmark on server: " + Globals.ServerName);
                PLOG.Write("Running Benchmark on database: " + Globals.DatabaseName);

                const string query = "select @@version";
                //Console.WriteLine(query);
                try
                {
                    //Globals.SQLVersion =
                    ClientDataAccess.RunProc(Globals.StrPublisherConn, query);
                }
                catch
                {
                    Console.WriteLine("Unable to connect to database, correct and retry");
                    PLOG.Write("Unable to connect to database, correct and retry", 1);
                    Thread.Sleep(1000);
                    Globals.Err = 1;
                }

                if (Globals.Err == 1)
                {
                    Console.WriteLine("Error detected, execution stopped.");
                }
                else
                {
                    if (Globals.Heartbeat == 1)
                    {
                        PLOG.Write("Heartbeat enabled.");
                        var heartbeat = new Thread(TpcUtils.Heartbeat)
                        {
                            IsBackground = true
                        };
                        heartbeat.Start();
                    }

                    var stpStartInfo = new STPStartInfo();

                    if (!(Globals.StaggeredLoad == 0))
                    {
                        stpStartInfo.StartSuspended   = false;
                        stpStartInfo.MaxWorkerThreads = Globals.NumClients + 1;
                        stpStartInfo.MinWorkerThreads = Globals.NumClients + 1;
                        stpStartInfo.IdleTimeout      = 10 * 1000;
                    }
                    else
                    {
                        stpStartInfo.StartSuspended   = true;
                        stpStartInfo.MaxWorkerThreads = Globals.NumClients + 1;
                        stpStartInfo.MinWorkerThreads = Globals.NumClients + 1;
                        stpStartInfo.IdleTimeout      = 10 * 1000;
                    }

                    var smartThreadPool = new SmartThreadPool(stpStartInfo);


                    var s = new StopWatch();

                    int i = 0;

                    var clients = new Tpcc[Globals.NumClients];

                    PLOG.Write("Start TPC benchmark :" + DateTime.Now);
                    s.Start();

                    if (!(Globals.StaggeredLoad == 0))
                    {
                        while (i < Globals.NumClients)
                        {
                            clients[i] = new Tpcc {
                                Clientid = i + 1
                            };
                            smartThreadPool.QueueWorkItem(new WorkItemCallback(clients[i].Client));
                            Console.WriteLine("Client " + i + " Loaded.");
                            Thread.Sleep(Globals.StaggeredLoad);
                            i++;
                        }
                    }
                    else
                    {
                        while (i < Globals.NumClients)
                        {
                            clients[i] = new Tpcc {
                                Clientid = i + 1
                            };
                            smartThreadPool.QueueWorkItem(new WorkItemCallback(clients[i].Client));
                            i++;
                        }
                    }

                    PLOG.Write("Started On: " + DateTime.Now);
                    if (Globals.NumLoops == 0)
                    {
                        PLOG.Write("Target Run Time: " + (Globals.MaxRunTimeMin));
                    }
                    else
                    {
                        PLOG.Write("Number of Loops: " + (Globals.NumLoops));
                    }
                    PLOG.Write("number of clients to load: " + i);
                    PLOG.Write("Work load Mix:");
                    if (Globals.RawWrite == 0)
                    {
                        PLOG.Write("Percent New Orders: " + Globals.PNO);
                        PLOG.Write("Percent Order Status: " + (Globals.POS));
                        PLOG.Write("Percent Stock Level: " + (Globals.PSL));
                        PLOG.Write("Percent Payment: " + (Globals.PP));
                        PLOG.Write("Percent Delivery: " + (Globals.PD));
                        PLOG.Write("Total Percent: " +
                                   ((Globals.PNO) + (Globals.POS) + (Globals.PSL) + (Globals.PD) + (Globals.PP)));
                    }
                    else
                    {
                        PLOG.Write("Raw Inserts: 100");
                    }
                    PLOG.Read();

                    //Console.WriteLine("Threads waiting callback: " + smartThreadPool.WaitingCallbacks);

                    if (Globals.StaggeredLoad == 0)
                    {
                        smartThreadPool.Start();
                    }

                    // Wait for the completion of all work items
                    smartThreadPool.WaitForIdle();

                    s.Stop();

                    smartThreadPool.Shutdown();

                    if (Globals.RawWrite == 1)
                    {
                        PLOG.Write("Total number of operations: " + Globals.TotalCount);
                        PLOG.Write("elapsed time in seconds: " + s.GetElapsedTimeSecs());
                        PLOG.Write("elapsed time in minutes: " + s.GetElapsedTimeSecs() / 60);
                        PLOG.Write("Total number of operations per minute: " +
                                   (Globals.TotalCount / (s.GetElapsedTimeSecs() / 60)));
                    }
                    else
                    {
                        PLOG.Write("Total number of new orders: " + Globals.Countno);
                        PLOG.Write("Total number of order status: " + Globals.Countos);
                        PLOG.Write("Total number of payments: " + Globals.Countp);
                        PLOG.Write("Total number of new diliveries: " + Globals.Countd);
                        PLOG.Write("Total number of new stock level: " + Globals.Countsl);
                        PLOG.Write("Total number of operations: " +
                                   (Globals.Countno + Globals.Countos + Globals.Countp + Globals.Countd +
                                    Globals.Countsl));
                        PLOG.Write("elapsed time in seconds: " + s.GetElapsedTimeSecs());
                        PLOG.Write("elapsed time in minutes: " + s.GetElapsedTimeSecs() / 60);
                        PLOG.Write("Total number of new orders per minute: " +
                                   (Globals.Countno / (s.GetElapsedTimeSecs() / 60)));
                    }
                    PLOG.Write("end TPC benchmark :" + DateTime.Now);

                    PLOG.Read();
                    Globals.RunFlag = 1;
                }
                trd.Join(10000);
                //Console.ReadKey();
            }
        }