当我们对一个表的聚集索引进行重建时,该表中有大约 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