小编use*_*910的帖子

如何解决两个表上并发 MERGE 的死锁

最近在尝试同时在两个表上插入数据时,偶尔会遇到死锁。

以下是表结构

Create Table TableA
(
  Id Bigint not null primary key ,
  FieldA1 nvarchar(50)
)
go

Create Table TableB
(
  Id Bigint not null primary key,
  TableAId Bigint not null constraint FK_TableA Foreign Key (TableAId) References TableB(Id),
  FieldB1 nvarchar(50)
)
go

CREATE type TableBParam as table
(
    Id Bigint,
    TableAId Bigint not null,
    FieldB1 nvarchar(50)
)

--Deadlock was observed on the save query
go
CREATE PROC SaveTableB
(  
 @val [dbo].[TableBParam] READONLY  
)  
AS 
BEGIN 
SET NOCOUNT ON;  

MERGE [dbo].[TableB] …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock sql-server-2016

4
推荐指数
1
解决办法
7270
查看次数

已分配的临时数据库空间 - 会被回收吗?

我观察到生产环境中的 tempdb 在初始化后已经增长到 100 GB。

我知道由于服务器负载和一些昂贵的查询导致 tempdb 在短短两天内增长。我已经观察了一个多星期,发现这个尺寸没有进一步增长并且保持不变。

我在具有 8 个逻辑核心的服务器上为 tempdb 配置了一个 mdf 文件。虽然我可以根据逻辑核心添加多个 mdf 文件。

我观察到空闲页面大小和临时数据库数据文件的物理大小在我的情况下是相同的

SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)

帮助我了解是否会在不显式执行脚本以缩小空间或通过重新启动服务器以重置临时数据库分配的情况下自动回收此物理空间?

sql-server sql-server-2008-r2 disk-space tempdb

2
推荐指数
1
解决办法
830
查看次数