Exemplo n.º 1
0
        public IEnumerable <QueryDeadLockInfo> ReadDeadLockEvents(string file)
        {
            var parser = new DeadLockParser();

            foreach (XmlRow row in ReadEventData(file))
            {
                QueryDeadLockInfo info;
                try {
                    var parsedInfo = parser.Parse(row.XML);
                    var queryAText = parsedInfo.data.value.deadlock.processlist.First()?.inputbuf;
                    var queryBText = parsedInfo.data.value.deadlock.processlist.Last()?.inputbuf;
                    info = new QueryDeadLockInfo {
                        TimeStamp = parsedInfo.timestamp,
                        QueryA    = queryAText.ExtractLocksSqlText(),
                        QueryB    = queryBText.ExtractLocksSqlText()
                    };
                    var objects = parsedInfo.data.value.deadlock.resourcelist?
                                  .SelectNodes("//@objectname")?.OfType <XmlNode>().ToList();
                    if (objects != null)
                    {
                        info.ObjectAName = objects.FirstOrDefault()?.InnerText;
                        info.ObjectBName = objects.LastOrDefault()?.InnerText;
                    }
                } catch (Exception e) {
                    _logger.LogError(new EventId(1), e, "Error while parsing deadlocks xml record: {0}", row.XML);
                    continue;
                }
                yield return(info);
            }
        }
Exemplo n.º 2
0
        public void RegisterDeadLock(QueryDeadLockInfo lockInfo)
        {
            if (lockInfo.TimeStamp <= _lastDeadLockDate.Value)
            {
                return;
            }
            Guid blockedTextId = _queryTextStoringService.GetOrCreate(lockInfo.QueryA, "DeadLocks");
            Guid blockerTextId = _queryTextStoringService.GetOrCreate(lockInfo.QueryB, "DeadLocks");
            var  deadLocksInfo = _dateRepository.CreateInfoRecord <DeadLockInfoRecord>(lockInfo.TimeStamp);

            deadLocksInfo.QueryAId = blockedTextId;
            deadLocksInfo.QueryBId = blockerTextId;
            _pendingDeadLocksInfo.Add(deadLocksInfo);
        }