当我们对一个表的聚集索引进行重建时,该表中有大约 15GB 的数据并且数据大小缩小到 5GB,这怎么可能?删除了什么样的“数据”?
数据大小我指的是 DBCC sp_spaceused 的“数据”列
在聚集索引上重建之前:
Run Code Online (Sandbox Code Playgroud)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
用于重建的 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) 我有一个不会在生产服务器上运行但它在测试服务器上运行的查询。查询计划似乎无法编译或编译的查询计划非常糟糕。我已经用全扫描更新了所有统计信息,并重建了所有相关表的索引,但没有成功,任何表中的行都没有那么多。我无法更改查询,因为它是 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
我正在尝试查找有关何时以及由谁缩小 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) 最近在尝试同时在两个表上插入数据时,偶尔会遇到死锁。
以下是表结构
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) 我的查询在没有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