小编got*_*tqn的帖子

sp_estimate_data_compression_savings 用于列存储压缩

有没有办法为列存储和列存储列存储归档压缩节省压缩?

为了检查这些压缩保存,我必须删除所有聚集和非聚集索引,然后创建一个聚集列存储索引 - 大多数时候这是一个耗时的操作,我想知道是否有其他方法可以做到这一点。

sql-server compression columnstore sql-server-2014

3
推荐指数
1
解决办法
417
查看次数

临时表可以跨会话共享吗?

我修改了构建动态 SQL 语句来创建和填充临时表的过程。语法是这样的:

...'create #temp_' + CAST(GETGUID() AS VARCHAR(36)) ...
Run Code Online (Sandbox Code Playgroud)

我问一位同事是否知道为什么将唯一标识符连接到表名。他告诉我,以前有过跨会话共享临时表的情况,导致数据混乱。

我知道这是不可能的,因为 MSDN 明确指出:

您可以创建本地和全局临时表。本地临时表仅在当前会话中可见,全局临时表对所有会话可见。

现在(记住这个例子)一些同事认为我们应该使用上面的语法作为一个好的实践,但我不喜欢它,需要证明不存在这样的错误,或者如果有的话它已经被修复了。

有 SQL Server 2005/2008 经验的人可以告诉我是否有过这种情况吗?

sql-server temporary-tables

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

如果启用“行外大值类型”表选项,则表大小会增加

我最近了解了sp_tableoption,它使您能够为特定表存储“行外大值类型”。

我的一个同事告诉我,如果我启用它,每个字段至少存储在 8 KB 页面上,无论它有多大。我无法找到对此的确认,因此我运行了以下测试:

DROP TABLE Size

CREATE TABLE Size
(
    [ID] TINYINT
   ,[Text] NVARCHAR(MAX)
)


EXEC sp_tableoption 'Size' ,'large value types out of row' ,0

TRUNCATE TABLE Size

INSERT INTO Size
SELECT 1, N'in row text'
UNION ALL
SELECT 2, N'' -- add here very large string

SELECT [ID], DATALENGTH([Text]) Size, LEN([Text]) [Len]
FROM [dbo].[Size]

EXEC sp_spaceused Size;


DROP TABLE Size

CREATE TABLE Size
(
    [ID] TINYINT
   ,[Text] NVARCHAR(MAX)
)

EXEC sp_tableoption 'Size' ,'large value types …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2012

3
推荐指数
1
解决办法
1975
查看次数

如何检测tempdb的使用情况?

在本地,我们在READ_COMMITTED隔离级别下使用 SQL Server 2019 标准版,我想测试一个数据库的执行情况READ_COMMITTED_SNAPSHOT(Azure 默认值)。

查询存储已启用。

我想记录READ_COMMITED一周的一些指标(CPU 使用情况、tempdb 使用情况、IO),然后使用READ_COMMITTED_SNAPSHOT. 然后,如果性能更好(这是我所期望的),则计划如何(如果)扩展资源以激活所有数据库的隔离级别。

我们有记录 CPU 使用情况的工具,但没有记录 tempdb 的工具。我想知道是否有一个查询或实用程序可以用来获取当前 tempdb 使用情况(例如给定时刻的 20-50-70%)并创建此类日志?

我对 tempdb 很感兴趣,因为行版本将存储在那里,并且我担心一些遗留代码和繁重/长时间运行的更新,我可能需要首先重写这些更新才能切换隔离级别。

我正在寻找这些数据,因为有很多遗留代码执行速度很慢并且会阻止其他查询。我有以毫秒为单位执行的新代码,但有时,由于长时间运行的 CRUD 操作和阻塞,它会执行 25 秒以上,这很糟糕。我正在重写此类遗留代码,但有时特定情况会花费我几天的时间,有时甚至几个月。当然,客户不愿意等待......

sql-server tempdb sql-server-2019

3
推荐指数
1
解决办法
2244
查看次数

SQL Server - 升级到 2022 CU7 后出现内存问题

在 SQL Server 实例之一中,我无法执行任何查询。我认为这是由于负载过重所以我尝试执行sp_execeute whoisactive并得到:

在此输入图像描述]

昨晚,DBA 已升级到 SQL Server 2022 CU5,并告诉我有一个问题,已通过 CU7 解决。因此,升级到 CU7,但没有任何变化。

DBA 发给我这个:

在此输入图像描述

之后:

在此输入图像描述

但我不确定发生了什么事。DBA 停止了查询存储和所有扩展事件会话,但没有任何变化。现在,DBA 认为问题是由此引起的,但它应该在 CU4 中修复,并且它会在升级过程中(而不是升级后)引起问题。

DBA已向MS开票,但我想知道是否有人知道可能导致此问题的原因是什么?


我将附上跟踪数据。更多信息 - 我们有 SQL Server 2022 CU5 实例和另一个运行 CU7 副本的实例。

另一位 DBA 认为问题出在始终在线的副本上,因此它们被停止 - 副本不断崩溃。

sql-server

3
推荐指数
1
解决办法
357
查看次数

添加新列后表大小不会改变

我正在尝试检查添加具有默认值的新列后表大小将如何增加。

我使用以下默认值:NULL, ''(空字符串)和some text(一些随机文本)`但似乎表大小没有改变。

我正在使用以下语句:

EXEC sp_spaceused '[Table_A]';

ALTER TABLE [dbo].[Table_A]
ADD [Loops] NVARCHAR(900)
CONSTRAINT [DF_Loops] DEFAULT('XXX') WITH VALUES;

EXEC sp_spaceused '[Table_A]';

ALTER TABLE [dbo].[Table_A]
DROP CONSTRAINT [DF_Loops]

ALTER TABLE [dbo].[Table_A]
DROP COLUMN [Loops];
Run Code Online (Sandbox Code Playgroud)

sp_spaceused总是返回:

name                                               rows                 reserved           data               index_size         unused
------------------------------------------------- -------------------- ------------------ ------------------ ------------------ ------------------
Table_A                                            73540994             8701688 KB         6658544 KB         2042976 KB         168 KB
Run Code Online (Sandbox Code Playgroud)

谁能告诉我做错了什么?

sql-server size alter-table sql-server-2014

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

不使用“持久化”列

我有一个具有以下结构的表:

ItemID           int
ItemType         char(1)
Language         char(2)
Localization     char(2)
Literal          nvarchar(4000)
Run Code Online (Sandbox Code Playgroud)

用于将特定的文本翻译ItemIDLiteral一个。该Literal列可能包含HTML标签。对于一组特定的查询,HTML需要删除这些标记,并且因为清理是使用 SQL CLR 对数千行完成的,所以我不想在读取时执行此类操作。

所以,我添加了一个像这样的持久列:

ALTER TABLE [dbo].[table]
ADD [LiteralSanitized] AS NULLIF(CAST(LTRIM(RTRIM([dbo].[fn_Utils_RemoveAllHtmlTags] ([Literal]))) AS NVARCHAR(4000)), '') PERSISTED;
Run Code Online (Sandbox Code Playgroud)

该表只有一个索引(主键),定义如下:

ItemID, ItemType, Language, Localization
Run Code Online (Sandbox Code Playgroud)

所以查询速度更快,但我看到这个表有一些额外的读取:

Scan count    - 2     vs 12,230 
Logical reads - 3,234 vs 43,472 
Run Code Online (Sandbox Code Playgroud)

这可能是正常的,因为现在我因为该列而读取了更多数据。所以,我添加了以下索引:

(ItemID ASC, ItemType ASC, Language ASC, Localization ASC) INCLUDE ([LiteralSanitized])
Run Code Online (Sandbox Code Playgroud)

但它不被引擎使用。所以,我尝试强制引擎使用它:

UPDATE #temp
SET [QuestionText] = PSGQ.[LiteralSanitized]
FROM #temp PQD                                            
INNER JOIN [dbo].[table_with_translations] …
Run Code Online (Sandbox Code Playgroud)

sql-server computed-column sql-server-2019

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