AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-185287

Mariano G's questions

Martin Hope
Mariano G
Asked: 2019-09-28 07:30:21 +0800 CST

两个不相关的表之间的死锁

  • 1

我面临两个表 Table1 和 Table2 之间的死锁。

当一个 sp (sp2) delete from table2 而其他 sp (sp1) 尝试更新 table1 时,就会发生死锁。

在此处输入图像描述

在 table2 中删除它的列是 table1 的主键,但是由于设计不好,从未添加外键,即 table2 没有对 table1 的引用,但是从 table2 中删除时会产生排他锁表 1。那么引擎如何在没有 FK 的情况下知道引用呢?

CREATE TABLE [dbo].[Table2] (
    [IdTable1]   INT          NOT NULL,
    [IdTable3] INT          NOT NULL,
    [Sent]         BIT          CONSTRAINT [DF_Table2_Sent] DEFAULT ((0)) NOT NULL,
    [Order]        VARCHAR (50) CONSTRAINT [DF_Table2_NewID] DEFAULT (newid()) NOT NULL,
    [ToExclude]    BIT          CONSTRAINT [DF_Table2_ToExclude] DEFAULT ((0)) NOT NULL,
    CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ([IdTable1] ASC, [IdTable3] ASC) WITH (FILLFACTOR = 100) ON [FG2]
);


GO
CREATE NONCLUSTERED INDEX [IX_Table2_IdTable1_Sent]
    ON [dbo].[Table2]([IdTable1] ASC, [Sent] ASC, [Order] ASC)
    INCLUDE([IdTable3]) WITH (FILLFACTOR = 100)
    ON [FG2];

这是死锁的细节。https://justpaste.it/700ik

此外,这些表位于不同的文件组(不同的文件)

为什么是这样?

另外,如果我有 FK,如果我只是从 table2 中删除,为什么还需要检查 table1 中的 PK?

编辑感谢乔希的回答。

现在我有 SP2 作为

CREATE PROCEDURE SP2 @value
AS
IF @value = 1
    UPDATE dbo.Table1.....
else
BEGIN
    EXEC SP3 --This SP update Table1
    DELETE FROM Table2...
END

现在为了避免保持对表 1 的锁定,我可以添加如下事务以在 SP3 完成时释放对表 1 的锁定吗?

CREATE PROCEDURE SP2 @value
AS
IF @value = 1
    UPDATE dbo.Table1.....
else
BEGIN
    BEGIN TRAN T1
       EXEC SP3 --This SP update Table1
    COMMIT TRAN T1
    DELETE FROM Table2...
END

谢谢。

sql-server sql-server-2014
  • 1 个回答
  • 207 Views
Martin Hope
Mariano G
Asked: 2019-09-26 04:42:43 +0800 CST

部署 Analysis Services 项目时身份验证失败

  • 2

我在 Visual Studio 2012 和 SQL Server 2014 上的 Analysis Services 项目中收到以下错误:

由于以下连接问题,无法将项目部署到“MyServerName\InstanceName”服务器:身份验证失败。要验证或更新目标服务器的名称,请在解决方案资源管理器中右键单击项目,选择项目属性,单击部署选项卡,然后输入服务器名称。

  • 在项目-> 属性-> 部署-> 服务器上,它具有正确的 ServerName\InstanceName,在 SSMS 上使用相同的 ServerName\InstanceName 我可以毫无问题地连接。
  • 在数据源上,我测试了连接并成功通过
  • 将 Impersonator 用户更改为我的用户,即 Sysadmin

我用谷歌搜索,但我发现的所有参考资料都不是认证失败。

谁能帮我?

编辑如果我执行

telnet ipServer 2382

成功连接。

我尝试使用 VS2019 并遇到了同样的错误。

尝试使用服务帐户进行模拟,用户服务是服务器和系统管理员的管理员,但也得到相同的错误。

我还检查了本指南,这些修复中没有一个对我有帮助。

ssas sql-server-2014
  • 2 个回答
  • 1582 Views
Martin Hope
Mariano G
Asked: 2019-08-28 08:28:37 +0800 CST

更改外键的引用索引

  • 9

我有这样的事情:

CREATE TABLE T1 (
    Id INT
    ...
    ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id]
)

CREATE TABLE T2 (
    ....
    ,T1_Id INT NOT NULL
    ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id)
)

出于性能(和死锁)的原因,我在 T1 上创建了一个新索引

CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id)

但是,如果我检查哪个索引引用了 FK,则继续引用聚集索引

select
    ix.index_id,
    ix.name as index_name,
    ix.type_desc as index_type_desc,
    fk.name as fk_name
from sys.indexes ix
    left join sys.foreign_keys fk on
        fk.referenced_object_id = ix.object_id
        and fk.key_index_id = ix.index_id
        and fk.parent_object_id = object_id('T2')
where ix.object_id = object_id('T1');

如果我删除约束并再次创建它会引用非聚集索引,但这会导致再次检查所有 t2 FK。

有没有办法改变这一点,所以 FK_T2_T1 使用 IX_T1_Id 而不是 PK_T1 而不删除 FK 并在 FK 检查时锁定表?

谢谢!

sql-server sql-server-2014
  • 2 个回答
  • 291 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve