Exemplo n.º 1
0
        void _timer_Tick(object sender, EventArgs e)
        {
            List <SessionInfo> sessionList = new List <SessionInfo>(0);
            ConnStringBuilder  strBuilder  = new ConnStringBuilder()
            {
                DataSource = this._DbName, UserName = this._DbUser, Password = this._Password
            };
            IDBMonitor dbmonitor = DBMonitorFactory.CreateDBMonitor(this._DbType);

            sessionList = dbmonitor.GetSessionList(strBuilder);

            switch (this.MonitorModeComboBox.SelectedIndex)
            {
            case 0:
                ShowBlockingLog(sessionList);
                break;

            case 1:
                ShowActiveLog(sessionList);
                break;

            default:
                ShowAllLog(sessionList);
                break;
            }

            if (this.listView1.Items.Count > 10000 && this.LogAutoSaveCheckBox.Checked)
            {
                DumpLog();
            }

            if (DateTime.Now > this.stopDateTime.Value)
            {
                this.btnMonitorDB.Checked = false;
            }
        }
Exemplo n.º 2
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            bool canConn = false;

            try
            {
                ConnStringBuilder strBuilder = new ConnStringBuilder()
                {
                    DataSource = this.DbName, UserName = this.DbUser, Password = this.Password
                };
                IDBMonitor dbmonitor = DBMonitorFactory.CreateDBMonitor(this.DbType);
                canConn = dbmonitor.CheckConnAndAuth(strBuilder);
            } catch (Exception ex)
            {
                //MessageBox.Show(ex.StackTrace);
                MessageBox.Show("连接失败或权限不足:" + ex.Message);

                canConn = false;
            }
            if (canConn == true)
            {
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
        }
Exemplo n.º 3
0
        void ShowBlockingLog(List <SessionInfo> sessionList)
        {
            int blockedTime = Convert.ToInt32(this.BlockTimeNumericUpDown.Value);
            List <SessionInfo> blockedList = sessionList.Where(s => s.blocked != 0 && s.waitTime >= blockedTime).ToList();

            if (blockedList == null || blockedList.Count <= 0)
            {
                return;
            }


            // 找出所有阻塞链条上的session信息和阻塞源头
            List <SessionInfo> tmpList  = new List <SessionInfo>();
            List <SessionInfo> rootList = new List <SessionInfo>();

            foreach (var item in blockedList)
            {
                int         blockId = item.blocked;
                SessionInfo info    = null;
                do
                {
                    // 数据库启用并行时,同一个客户端请求可能对应多个服务器端会话
                    //info = sessionList.Single(s => s.spid == blockId);
                    //if (!tmpList.Any(s => s.spid == info.spid))
                    //    tmpList.Add(info);

                    List <SessionInfo> parentList = sessionList.Where(s => s.spid == blockId).ToList();
                    if (parentList == null || parentList.Count <= 0)
                    {
                        break;
                    }
                    else
                    {
                        foreach (var p in parentList)
                        {
                            if (!tmpList.Any(s => s.spid == p.spid && s.kpid == p.kpid))
                            {
                                tmpList.Add(p);
                            }
                        }
                    }

                    info    = sessionList.First(s => s.spid == blockId);
                    blockId = info.blocked;
                    if (tmpList.Any(s => s.spid == blockId))
                    {
                        break;
                    }
                } while (blockId != 0);

                if (info != null && !rootList.Any(s => s.spid == info.spid))
                {
                    rootList.Add(info);
                }
            }

            foreach (var item in tmpList)
            {
                if (!blockedList.Any(s => s.spid == item.spid && s.kpid == item.kpid))
                {
                    blockedList.Add(item);
                }
            }

            int    rowIndex = 0;
            string dt       = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

            ListViewItem[] list = new ListViewItem[blockedList.Count];
            foreach (var sessionInfo in blockedList)
            {
                ListViewItem lvItem = new ListViewItem((++rowIndex).ToString()); //(++rowIndex).ToString());
                lvItem.SubItems.Add(dt);
                lvItem.SubItems.Add(sessionInfo.spid.ToString());
                lvItem.SubItems.Add(sessionInfo.kpid.ToString());
                lvItem.SubItems.Add(sessionInfo.blocked.ToString());
                lvItem.SubItems.Add(sessionInfo.status);
                lvItem.SubItems.Add(sessionInfo.lastWaitType);
                lvItem.SubItems.Add(sessionInfo.waitResource);
                lvItem.SubItems.Add(sessionInfo.waitTime.ToString());
                lvItem.SubItems.Add(sessionInfo.cpu_time.ToString());
                lvItem.SubItems.Add(sessionInfo.logical_reads.ToString());
                lvItem.SubItems.Add(sessionInfo.disk_reads.ToString());
                lvItem.SubItems.Add(sessionInfo.elapsed_time.ToString());
                lvItem.SubItems.Add(sessionInfo.loginName);
                lvItem.SubItems.Add(sessionInfo.hostName);
                lvItem.SubItems.Add(sessionInfo.programName);
                lvItem.SubItems.Add(sessionInfo.hostProcess);
                lvItem.SubItems.Add(sessionInfo.remarks);
                lvItem.SubItems.Add(sessionInfo.sqlText);

                list[rowIndex - 1] = lvItem;
            }
            this.listView1.BeginUpdate();
            this.listView1.Items.AddRange(list);
            this.listView1.EndUpdate();

            if (this.KillBlockCheckBox.Checked && rootList.Count > 0)
            {
                ConnStringBuilder strBuilder = new ConnStringBuilder()
                {
                    DataSource = this._DbName, UserName = this._DbUser, Password = this._Password
                };
                IDBMonitor dbmonitor = DBMonitorFactory.CreateDBMonitor(this._DbType);
                dbmonitor.KillRootBlockingSession(strBuilder, rootList);
            }
        }