小编Dan*_*örk的帖子

在聚集索引上重建,为什么数据大小会缩小?

当我们对一个表的聚集索引进行重建时,该表中有大约 15GB 的数据并且数据大小缩小到 5GB,这怎么可能?删除了什么样的“数据”?

数据大小我指的是 DBCC sp_spaceused 的“数据”列

在聚集索引上重建之前:

name                  rows        reserved    data        index_size  unused
LEDGERJOURNALTRANS    43583730    39169656 KB 15857960 KB 22916496 KB 395200 KB
Run Code Online (Sandbox Code Playgroud)

在聚集索引上重建后:

name                  rows        reserved    data        index_size  unused
LEDGERJOURNALTRANS    43583730    29076736 KB 5867048 KB  22880144 KB 329544 KB
Run Code Online (Sandbox Code Playgroud)

用于重建的 TSQL:

USE [DAX5TEST]
GO
ALTER INDEX [I_212RECID] ON [dbo].[LEDGERJOURNALTRANS] REBUILD PARTITION = ALL WITH ( PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, ONLINE = ON, SORT_IN_TEMPDB = OFF, DATA_COMPRESSION = PAGE, FILLFACTOR …
Run Code Online (Sandbox Code Playgroud)

sql-server clustered-index

10
推荐指数
3
解决办法
4538
查看次数

查询不会编译/运行

我有一个不会在生产服务器上运行但它在测试服务器上运行的查询。查询计划似乎无法编译或编译的查询计划非常糟糕。我已经用全扫描更新了所有统计信息,并重建了所有相关表的索引,但没有成功,任何表中的行都没有那么多。我无法更改查询,因为它是 AOS (AX 2012) 创建的。我应该怎么做才能按原样使用查询?

询问

DECLARE @P1 AS BIGINT = 5637144576
DECLARE @P2 AS NVARCHAR(4) = N'1003'
DECLARE @P3 AS INT = 212
DECLARE @P4 AS BIGINT = 5638885273
DECLARE @P5 AS BIGINT = 5637144576
DECLARE @P6 AS INT = 865
DECLARE @P7 AS BIGINT = 5637144576
DECLARE @P8 AS BIGINT = 5637144576

SELECT     t1.balance01, 
           t1.recid, 
           t2.amountcur, 
           t2.dataareaid, 
           t2.recid, 
           t3.recid, 
           t3.voucher, 
           t3.accountnum, 
           t3.approved, 
           t3.closed, 
           t3.dataareaid, 
           t4.party, 
           t4.dataareaid, 
           t4.recid 
FROM       spectrans T1 
CROSS JOIN custtransopen T2 
CROSS JOIN custtrans T3 …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2014 query-performance

6
推荐指数
1
解决办法
243
查看次数

何时以及谁缩小了 ldf 文件?

我正在尝试查找有关何时以及由谁缩小 ldf 文件的信息,但在任何地方都找不到该信息。

有人可以指出我正确的方向吗?

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4266.0 (X64) 
    Sep 26 2012 17:08:07 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 ddl

5
推荐指数
1
解决办法
86
查看次数

如何解决两个表上并发 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
查看次数

不重新编译就慢

我的查询在没有OPTION (RECOMPILE). 如果不重新编译,运行需要 3-4 分钟,重新编译需要大约 15-20 秒。

我无法更改查询,我已更新所有统计信息并重建所有索引。只有 1 个索引建议,改进了 9.4%。

我试过了:

-- clear all plans in cache
DBCC FREEPROCCACHE

-- Clear Buffer pool
CHECKPOINT
GO
DBCC DROPCLEANBUFFERS
GO
Run Code Online (Sandbox Code Playgroud)

我还能做什么?我无法编辑查询,所以OPTION (RECOMPILE)对我来说不是一个有效的解决方案。查询可能会不时有所不同,因此“计划指南”不起作用?

请注意,这不是实际查询。实际查询由 Dynamics AX 执行,因此使用api_cursor. 我从 中撬出sp_cursorprepare并手动填写了参数。

DECLARE @p1 AS BIGINT = 5637144576
DECLARE @p2 AS NVARCHAR(32) = N'1003'
DECLARE @p3 AS NVARCHAR(32) = N'posp%'
DECLARE @p4 AS BIGINT = 5637144576
DECLARE @p5 AS NVARCHAR(32) = N'sv'
DECLARE @p6 AS NVARCHAR(32) = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2014 microsoft-dynamics query-performance

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