早上好,我的数据库特定表有问题。 有时,当我编辑或删除该表的元组时,会进入死锁状态,并且此消息会出现在日志中:
*2018-10-18 10:34:59 BRT ERROR: canceling statement due to statement timeout
2018-10-18 10:34:59 BRT CONTEXT: while updating tuple (1289,6) in relation "funcaoriscoepi"
2018-10-18 10:34:59 BRT STATEMENT: UPDATE engenharia.funcaoriscoepi SET FuncaoEpiId = ((0)::int8), Descricao = (('Boné tipo Árabe')::text), EpiEficaz = ((2)::int4), CaEpi = (('NA')::text), MedProtecao = ((2)::int4), CondFuncionamento = ((2)::int4), PrazoValidade = ((2)::int4), PeriodicidadeTroca = ((2)::int4), Higienizacao = ((2)::int4), UsoIninterrupto = ((2)::int4), Utilizacao = (('\x424F4EC9205449504F20C15241424520616F207265616C697A6172206174697669646164657320636F6D206578706F7369E7E36F20616F73207261696F7320736F6C617265732E')::bytea), Conservacao = ((NULL)::bytea), Manutencao = ((NULL)::bytea), Observacao = ((NULL)::bytea), QuandoUsar = ((NULL)::text), EpiUsado = ((2)::int4), CondicaoUso = ((NULL)::int4), TipoEquipamento = ((0)::int4), FuncaoRisco_id = ((293122)::int8), Epi_id = ((247)::int8) WHERE Id = ((26130)::int8)*
public class FuncaoRiscoEpi : BaseEntity
{
public virtual FuncaoRisco FuncaoRisco { get; set; }
public virtual Epi Epi { get; set; }
public virtual long FuncaoEpiId { get; set; }
public virtual string Descricao { get; set; }
public virtual EEpiEficaz EpiEficaz { get; set; } = EEpiEficaz.NA;
public virtual string CaEpi { get; set; } = "NA";
public virtual string QuandoUsar { get; set; }
public virtual ESimOuNao EpiUsado { get; set; }
public virtual ESimOuNao MedProtecao { get; set; } = ESimOuNao.Sim;
public virtual ESimOuNao CondFuncionamento { get; set; } = ESimOuNao.Sim;
public virtual ESimOuNao PrazoValidade { get; set; } = ESimOuNao.Sim;
public virtual ESimOuNao PeriodicidadeTroca { get; set; } = ESimOuNao.Sim;
public virtual ESimOuNao Higienizacao { get; set; } = ESimOuNao.Sim;
public virtual ESimOuNao UsoIninterrupto { get; set; } = ESimOuNao.Sim;
public virtual ECondEpi? CondicaoUso { get; set; }
public virtual byte[] Utilizacao { get; set; }
public virtual byte[] Conservacao { get; set; }
public virtual byte[] Manutencao { get; set; }
public virtual byte[] Observacao { get; set; }
public virtual ETipoEquipamento TipoEquipamento { get; set; } = ETipoEquipamento.Epi;
public override bool Equals(object obj)
{
var o = obj as FuncaoRiscoEpi;
if (o == null)
{
return false;
}
return (GetHashCode() == o.GetHashCode());
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
public sealed class FuncaoRiscoEpiMap : ClassMap<FuncaoRiscoEpi>
{
public FuncaoRiscoEpiMap()
{
Table("funcaoriscoepi");
Id(x => x.Id);
References(x => x.FuncaoRisco);
References(x => x.Epi);
Map(x => x.FuncaoEpiId);
Map(x => x.Descricao).Length(Domain.Domain.DESCRICAO);
Map(x => x.EpiEficaz).CustomType<EEpcEficaz>();
Map(x => x.CaEpi).Length(Domain.Domain.CA10);
Map(x => x.MedProtecao).CustomType<ESimOuNao>();
Map(x => x.CondFuncionamento).CustomType<ESimOuNao>();
Map(x => x.PrazoValidade).CustomType<ESimOuNao>();
Map(x => x.PeriodicidadeTroca).CustomType<ESimOuNao>();
Map(x => x.Higienizacao).CustomType<ESimOuNao>();
Map(x => x.UsoIninterrupto).CustomType<ESimOuNao>();
Map(x => x.Utilizacao).CustomType<byte[]>();
Map(x => x.Conservacao).CustomType<byte[]>();
Map(x => x.Manutencao).CustomType<byte[]>();
Map(x => x.Observacao).CustomType<byte[]>();
Map(x => x.QuandoUsar).Length(Domain.Domain.SENHA);
Map(x => x.EpiUsado).CustomType<ESimOuNao>();
Map(x => x.CondicaoUso).CustomType<ECondEpi>();
Map(x => x.TipoEquipamento).CustomType<ETipoEquipamento>();
}
}
我试图对此表进行备份并还原它,它按时解决了,但是又发生了。 通过检查表的XMAX,我可以看到所有有问题的元组的XMAX仍然不同于0。
有人知道为什么会这样吗?