标签: sql-server

SQL Server 使用并行计划成本低于 5

我有一个使用并行计划的数据透视查询,即使成本小于 5。

Parallelism 的成本阈值设置为默认值 5,MAXDOP 为 0。

SELECT Column1, Column2 Column3, Column4 AS Column5, Column6 Column7, Column8 Column9, Column10 Column11
        FROM (
              SELECT Column12,
                        Column13,
                        Column1
                FROM Database1.Schema1.Object1
             ) Object2 PIVOT( SUM(Column13) FOR Column12 IN (Column2, Column4, Column6, Column8, Column10) ) AS pvtScore;
Run Code Online (Sandbox Code Playgroud)

以下屏幕截图显示估计的子树成本为 1.39。

我想知道为什么在成本阈值为 5 时使用并行计划以启动并行性。

坚果

版本:SQL Server 2008 R2

sql-server parallelism sql-server-2008-r2

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

SQL Server Management Studio 17.1 镜像错误

我注意到有一个错误,当人们询问它时,他们被发送到错误的方向(见下面的最后评论)。

尝试使用带有 SSMS 17.1 的 SQL Server 2016 创建镜像数据库时,可能会收到以下错误:

没有为数据库镜像配置数据库。
无法打开数据库 x。它正处于恢复过程中。

这个错误是一个真正的 PITA,我花了 2 周的时间搜索,因为我是 DBA 的新手,否则我会走脚本路径。

我认为这是 SSMS 17.1 中的一个错误,因为它适用于 SSMS 16.5.3。不幸的是,我花了很长时间才弄清楚真正的问题是管理工作室本身。17.1版本的界面比16.5.3版本好很多!

错误的建议和误导性的解决方案

主要是数据库镜像/hadr_endpointTCP://servername:port设置,NORECOVERY在许多情况下被遗忘的恢复,但在正确完成备份和恢复时并不是真正的问题。

sql-server ssms mirroring sql-server-2016

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

允许用户只查看他们有权访问的数据库

我想知道是否有任何方法可以让用户只查看他们有权访问的特定数据库。例如。假设我们有一个 alwaysOn,其中只有一个本地数据库和 10 个添加到 AO 中的数据库。用户需要对 AO 中添加的 10 个数据库之一的读取权限。但是当授予用户对该数据库的权限并且他连接到 AO 时,他可以查看每个数据库,但当然只能访问他有权访问的数据库。如果 AO 在本地数据库所在的位置处于活动状态,他也会看到那个。

我们已经尝试了一些东西,但没有成功,而且从我们所阅读的内容来看,除非用户被授予 dbowner 权限,否则它似乎不是一种方法。

有人有任何想法吗?

sql-server availability-groups sql-server-2014

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

如何检查谁杀死了正在运行的作业? 如果没有生成日志

SQL Server 上发生未指定的错误。连接可能已被服务器终止。

这是我收到的错误。(执行作业时)

[SQLSTATE HY000](错误 0)无法继续执行,因为会话处于终止状态。
[SQLSTATE HY000](错误 596)。步骤失败。

sql-server jobs

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

SQL Server 无法在域名中创建带有破折号的用户

我正在 SQL 服务器中创建代理用户。我运行下面的 SQL 但它失败了,因为我的域名中有破折号。

CREATE LOGIN [ABC-SEN-DEA\proxyssisuser] WITH PASSWORD='Password'
Run Code Online (Sandbox Code Playgroud)

消息 15006,级别 16,状态 1,第 1 行
“ABC-SEN-DEA\proxyssisuser”不是有效名称,因为它包含无效字符。

请帮助如何纠正此错误。

sql-server ssis

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

如何跳过 SQL Server 查询中的行?

我从我的product表中选择了一个额外的 Row_Number() 列 (Num) 的查询,我得到了如下的答案(我只限制了 20 行来检索)。

询问

SELECT * 
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) AS Num, 
             ProductName
      FROM   BASE_Product 
      WHERE IsActive = 1) BASE_Product 
WHERE Num > 0 
AND   Num < (21)
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

我的要求是如何跳过每 3 行并仅检索 7 个限制行。

预期结果

我需要如下结果:

在此处输入图片说明

sql-server sql-server-2012 sql-server-2014

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

找不到用户,因为它不存在或您没有权限

我正在使用 mssql,我想实现这一目标:拥有 1 个数据库,2 个非 SA 用户。第一个用户应该是数据库的所有者,第二个用户应该对某些表具有读取权限,对其他表具有读+写权限。

第二个用户的表是由我们使用第一个用户的应用程序创建的。

我所做的步骤:
1)我执行创建 DB + 用户的脚本

CREATE LOGIN USER1
WITH PASSWORD = 'password';
GO
CREATE USER USER1 FOR LOGIN USER1;
GO

CREATE DATABASE my_database;
ALTER AUTHORIZATION ON DATABASE ::my_database TO USER1;

CREATE LOGIN USER2
WITH PASSWORD = 'password';
GO
CREATE USER USER2 FOR LOGIN USER2;
GO
Run Code Online (Sandbox Code Playgroud)

2) 我的应用程序执行创建表的脚本 + 向 USER2 授予对表的权限,这失败了,因为:

Cannot find the user 'USER2', because it does not exist or you do not 
have permission.
Run Code Online (Sandbox Code Playgroud)

我的问题是如何授予 USER1 权限以在 my_database 中为其他用户添加读/写权限?不过,那个数据库所有者就足够了。 …

sql-server permissions

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

为什么计算列会突然降低性能?

用户可以在上午 10 点之前运行报告。在同样的报告变得非常缓慢之后,有时用户只是没有耐心等待。经过一些故障排除后,我找到了导致延迟的列。它是计算列,它使用函数来带来结果。

大约在同一时间,我收到了另一个关于运行缓慢报告的抱怨,那总是工作正常。经过一些故障排除后,我发现了导致延迟的列:

where (Amount - PTD) <> 0
Run Code Online (Sandbox Code Playgroud)

同样,该Amount列是计算列。

所以我的问题是:为什么总是作为报告一部分的所有突然计算列开始显着降低性能?大约在上午 10 点之后真正会发生什么?如果我制作这些列有persisted什么缺点?

谢谢

--FUNCTION 带列:

ALTER FUNCTION [dbo].[CalcInvoiceAmtPTD]
(@SInvNum INT, @entityGuid uniqueIdentifier) RETURNS MONEY
AS
BEGIN
    DECLARE @Amt MONEY

    declare @toplevel uniqueidentifier
    set @toplevel = (select dbo.gettoplevelentity(@entityguid))

    declare @t table 
    (
        Guid uniqueidentifier
    )

    insert into @t select * from dbo.getlinkedentities(@toplevel) where guid is not null
    declare @tbl table (amount money, glacctid int)

    select @amt = isNull(sum(amount), 0) from tblfin_journalpostings jp
        inner join tblfin_journal …
Run Code Online (Sandbox Code Playgroud)

performance sql-server t-sql

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

执行查询所花费的时间似乎比查询中测量的时间长......?

我正在尝试优化存储过程。我仅使用日期变量将一些手动分析插入到我的 SP 中,然后使用 datediff 显示经过的时间。

例如

DECLARE @MyDate datetime = GetDate()
PRINT '..profiling text...'
PRINT DateDiff(ms, @MyDate, GetDate())
SET @MyDate = GetDate()

<execute some actions here>

PRINT '..elapsed time...'
PRINT DateDiff(ms, @MyDate, GetDate())
SET @MyDate = GetDate()
Run Code Online (Sandbox Code Playgroud)

当我在 SQL Server Management Studio 的查询窗口中运行它时,我的配置文件的总耗用时间大约为 5 秒。但是,整个查询的持续时间更像是 14 秒,如右下角的查询属性所示(以及当我用手表手动计时时)。

有什么理由会发生这种情况吗?我放置或声明日期变量的位置没有任何问题。通过 datediff 和查询所用的时间输出的时间肯定不匹配。

还应该注意的是,在优化时,我没有返回任何大型数据表。我只是将它们插入到临时表中,以确保我没有返回结果的开销。

sql-server t-sql

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

SSMS 连接到本地开发数据库的速度极慢

所以我发现了这个问题并相信这是相关的。 使用 Windows 身份验证时 SQL Server Management Studio 连接缓慢或超时

如果我将超时延长到 30 秒,我会连接 SSMS,但一切都非常慢!调试时应用程序非常慢/超时。

他们提到向主机文件添加一个条目以绕过 DNS 查找。这是在我的机器上运行的本地开发数据库。我会在主机文件中添加什么来消除这些 DNS 问题???服务器名称 = "ROG-DREAM-MACHI\SQLDEV"。

我是数据库菜鸟。请帮忙。:(

sql-server ssms sql-server-2012

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