标签: sql-server

char 或 smallint 用于带有数字代码的列?

我的应用程序中有列的值始终为 4 位数字,例如“0100”或“1230”。示例之一可能是Merchant Category Code

暂时,我已经将这个列的类型设置为char (4). 我有很多这种类型的专栏。这些类型的列之一也包含在非聚集UNIQUE索引中。我想为这种类型的专栏建立一种方法。

通过在应用程序中添加或 添加到开头来使用char (4)或可能更好吗?smallint' '0

包含这些列的表已分区,将包含大约 3 亿条记录。UPDATE可能不会在这种类型的列上执行。它们也不会出现在WHERE(有时可能出现在临时报告中)。

我应该选择哪种数据类型?

它就像一个邮政编码,它可以是数字,但你必须存储前导零

确切地。我在考虑在性能方面什么是更好的方法。还必须考虑到,如果我将其存储为smallint,应用程序代码必须将其解析为字符串并添加前导零。

sql-server datatypes physical-design sql-server-2019

0
推荐指数
1
解决办法
222
查看次数

如何缩小大型 LDF

我有一个带有 100Gb MDF 和 4Gb LDF 的 SQL2016 DB 的客户端。数据库设置为简单。我无法将 LDF 缩小到最低限度。如何将 LDF 缩小到正常水平?

此设置和文件大小是否会影响性能?

performance sql-server shrink sql-server-2016

0
推荐指数
1
解决办法
546
查看次数

如何从sql server的sa登录中删除sysadmin

我有一个要求,我需要从 sa 登录中删除 sysadmin 服务器角色。

我又创建了 1 个用户,并将 sysadmin 角色授予该用户。

当我从 sa 登录中取消选中 sysadmin 时,它会引发错误。

无法使用特殊主体 sa 错误 15405。

任何人都可以知道如何做到这一点吗?

sql-server-2008 sql-server sql-server-2012

0
推荐指数
1
解决办法
197
查看次数

在后台作业中捕获死锁事件?

我目前正在使用分析器捕获死锁事件。(死锁,死锁图,死锁链)。

到目前为止一切顺利,但为此,客户端计算机需要不断运行和在线。

==> 有没有办法直接在 SQL Server 上捕获和收集死锁事件作为后台作业?

sql-server deadlock sql-server-2014

0
推荐指数
1
解决办法
71
查看次数

主动防止查询随机变慢的良好做法

我们支持基于 SQL Server 的内部应用程序的多种部署。

我们现在遇到过几次问题,一些曾经快速而小的查询突然变得非常缓慢或不稳定,而不一定会产生更多的数据或在更大的数据集上运行。

每次发生这种情况时,都是突然开始缓慢运行的不同查询。每当这种情况发生时,我们必须花一些开发时间来调试问题,可能会再次编写查询并与以前的版本进行基准测试等等。 然而,原始查询通常可以正常工作多年,而且我们事先没有迹象表明它的执行时间可能会爆炸。

有哪些好的做法可以防止查询随机变慢?

我所追求的不是“如何修复我们已经观察到很慢的查询”,而是首先如何降低查询变慢的可能性——一种主动的方法,而不是被动的。我需要一种方法来强制 SQL Server 不要尝试过多地优化查询:我真的不需要快速,我需要一致。如果有一些选择让 SQL Server 在构建查询计划时更加保守,而不是试图利用数据分布等,我会追求它们。

sql-server query-performance

0
推荐指数
1
解决办法
386
查看次数

如何微调一个巨大的有问题的堆表?

问题:

一个巨大的表导致了一个非常重要的生产数据库(MS SQL Server 2016 SP1 标准版)上的严重性能问题。

关于有问题的表的事实:

  • 没有索引的堆表。
  • 450 GB 大小。
  • 超过 1.9 亿条记录。
  • 每次执行简单的 SELECT 查询时,物理 I/O 活动都超过 900 MB/s。如果查询包含 WHERE 子句,则最糟糕。
  • 在此表上执行的查询会导致应用程序 UI 延迟 4-5 分钟。

应用程序/系统制造商建议的解决方案:

  • 将堆表转换为聚集索引表。

与建议解决方案相关的建议性能调整步骤:

  • 截断 db 表(与客户同意删除超过 1 年的记录)。
    • 不要删除记录。将过去 1 年中创建的记录复制到临时表。截断原始表,然后将您从临时表复制的记录插入到清空的原始表中。
  • 对 db 表进行碎片整理。
  • 将 db 表从堆迁移到聚簇表。
  • 创建聚集索引。
  • 创建维护作业并安排它定期重新构建聚集索引。

我对社区的问题:

您将如何提高这种有问题的表的性能?您会在建议的性能调整步骤中添加或删除哪些内容?

非常感谢并提前感谢。

从这里开始编辑:

好的,我不想一一回复所有评论。所以我正在编辑问题并添加更多信息。

第一:我不是专家 DBA。我会说一个高级初学者。这就是为什么我在这里尽可能多地向社区学习。

第二:我们两周前才得到这个客户,我自己还没有完全访问环境。这个关于问题的信息(事实),关于表直接来自客户的系统管理员。

第三:因此,我不知道为什么该表是堆的第一手,没有索引,他们让它在没有任何分区的情况下增长这么多,等等。

第四:建议的解决方案和建议的步骤不是我自己的,而是直接来自整个系统的制造商(这是一个众所周知的统一通信系统,制造商在这方面是最好的。我想你们都知道哪个)。

5th:我希望下周可以完全访问环境,在此之前我只是想分享我手头的东西,并在陷入困境之前尝试获得尽可能多的意见/建议。

第 6 名:因为不幸的是,我将把这个烂摊子从这里拿走,并试图让它更好、更顺畅地工作。

感谢所有已经抽出时间并回复的人。我已经有了一些见识。一旦我手头有更多信息,我肯定会分享更多信息。

index sql-server clustered-index heap performance-tuning

0
推荐指数
1
解决办法
108
查看次数

列存储是否是带有 WHERE 子句的 UPDATES 的好选择?

我正在 SQL Server 上开发一个数据库项目,我在考虑使用列存储索引是否是一个好主意。

该项目由一个表 (A) 组成,该表将包含大量行,一列具有许多重复值。每天,一包新行将添加到表中,每个包都有一个“DateId”。

之后,我需要更新一个不同的表 (B) 加入 A 并过滤 A 以获取“DateId”和其他列。

SQL 中的示例:

CREATE TABLE A (
  [Id] [BIGINT] IDENTITY(1,1) NOT NULL,
  [DateId] [INT] NOT NULL,
  [B_Id] [BIGINT] NOT NULL,
  -- other columns...
  INDEX cci_A CLUSTERED COLUMNSTORE
)

CREATE TABLE B (
  [Id] [BIGINT] IDENTITY(1,1) NOT NULL,
  -- other columns...
  INDEX cci_B CLUSTERED COLUMNSTORE
)

UPDATE B
SET ...
FROM A
INNER JOIN B ON A.B_Id = B.Id
WHERE A.DateId = @myDateId
Run Code Online (Sandbox Code Playgroud)

在这种情况下,列存储是一个不错的选择吗?

performance database-design sql-server columnstore table

0
推荐指数
1
解决办法
47
查看次数

为什么内置距离函数比我自定义的慢这么多?

我想找到两组坐标之间的距离。首先我使用内置函数:

declare @lat1 real = 33.1, @lon1 real =-117.1, @lat1 real = 39.6, @lon1 real =-98.7
declare @source geography = geography::Point(@lat1, @long1, 4326);
declare @target geography = geography::Point(@lat2, @long2, 4326);

select  @source.STDistance(@target)     
Run Code Online (Sandbox Code Playgroud)

现在我使用手动计算来做同样的事情:

 -- Kilometers to Miles: 0.621371, Earth Radius: 6378.137
 select 0.621371 * 6378.137 * ACOS(ROUND(
    (SIN(PI() *  @lat2 /180) * SIN(PI() * @lat1/180))
    + (COS(PI() *  @lat2 /180) * COS(PI() * @lat1/180) * COS(PI() * @lon1/180 - PI() * @lon2 /180)), 12))
Run Code Online (Sandbox Code Playgroud)

在我对 SQL Server 2014 的测试中,手动功能比内置功能快 4 …

sql-server sql-server-2014

0
推荐指数
1
解决办法
55
查看次数

如何识别导致错误 17886 的连接?

我需要一种方法来确定哪个连接导致了错误 17886。我已经研究过并且有修复错误的解决方案,但前提是您知道哪个连接导致了问题。

我想记录错误,这样我就不必坐下来等待它发生 - 如果它再次发生。有没有办法使用扩展事件来跟踪:错误 #17886、连接、发生时间等。

有任何想法吗?

sql-server

0
推荐指数
1
解决办法
62
查看次数

引用带有外键的小表时是否需要非聚集索引

我不是 DBA,如果这个问题听起来很愚蠢,请原谅。希望我能从有经验的 DBA 那里得到帮助,因为我对此质疑了很长时间。

假设有2张表,一张表有很多记录,一张表只是静态数据有2条记录(例如:是/否表)。

以这两个表为例:

  • Table_Yes_No(只有 2 条记录:YesNo。当然,它们有一个递增的聚集 PK)
  • Table_Form(非常大的表,有很多记录,一列有 FK 到 PK Table_Yes_No)。

现在我的问题; 是否值得把一个指标的FK(参考从Table_FormTable_Yes_No表)?该列将仅包含12(但未排序,因为没有索引)。是否值得索引这样的 FK?

SQLFiddle 中的一个例子:http ://sqlfiddle.com/#!18/51614/3/0

无论如何都会查询该列,问题是索引是否有助于性能。小表是静态数据,永远不会改变。大表会被大量查询,上面也会有很多CRUD。

index foreign-key sql-server clustered-index nonclustered-index

0
推荐指数
1
解决办法
83
查看次数