0

我对我不理解的 WSREP 错误有疑问。如果有人解释发生了什么以及如何解决它,我会很高兴。

我的应用程序有一个用于创建帐户的端点。在端点中,有几个请求 DB 检查帐户是否已经存在,并在必要时创建一个新帐户。新的“账户”有两部分——用户和身份。用户和相应身份的创建不会发生在事务中,但两个数据库请求都应用于集群的同一个节点(但其他用户和身份创建可能发生在其他节点上)。

出于某种原因,有时我会在身份创建(插入)时遇到 WSREP(检测到死锁/冲突)错误。我确信没有任何冲突的插入请求具有相同的数据,因为之后我在 DB 中没有身份。为什么会这样?可能是一些索引/外键问题吗?

我在这里完全不知所措。任何帮助表示赞赏!

配置: mysqld Ver 5.7.23-23-57 for Linux on x86_64 (Percona XtraDB Cluster (GPL), Release rel23, Revision f5578f0, WSREP version 31.31, wsrep_31.31)

表格(有点简化):

create table users
(
    id                         bigint auto_increment
        primary key,
    profile                    json                                 null,
    is_active                  tinyint(1) default 1                 null,
    is_email_confirmed         tinyint(1) default 0                 null,
    is_phone_confirmed         tinyint(1) default 0                 null,
    created_at                 datetime   default CURRENT_TIMESTAMP null,
    modified_at                datetime                             null,
    email                      varchar(200)                         null,
);
create index ix_users_email
    on users (email);
create index ix_users_phone_number
    on users (phone_number);

create table identities
(
    id               bigint auto_increment
        primary key,
    user_id          bigint                                   null,
    provider_id      bigint                                   null,
    email            varchar(200)                             null,
    password         varchar(200)                             null,
    first_name       varchar(200)                             null,
    last_name        varchar(200)                             null,
    last_login       datetime(6)                              null,
    created_at       datetime(6) default CURRENT_TIMESTAMP(6) null,
    modified_at      datetime(6) default CURRENT_TIMESTAMP(6) null,
    is_deleted       tinyint(1)  default 0                    null,
    constraint identities_ibfk_1
        foreign key (user_id) references users (id),
);
create index provider_id
    on identities (provider_id);
create index user_id
    on identities (user_id);
4

0 回答 0