标签: sql-server

ALLOW_SNAPSHOT_ISOLATION 和 READ_COMMITTED_SNAPSHOT

大部分的论坛和榜样的网上总是建议同时拥有ALLOW_SNAPSHOT_ISOLATIONREAD_COMMITTED_SNAPSHOT设置为ON,每当别人问快照,行版本或类似的问题。

我想这两种设置中的 SNAPSHOT 一词都有些令人困惑。我认为,为了让数据库引擎对 READ_COMMITTED 默认行为使用行版本控制而不是锁定,无论设置如何,数据库READ_COMMITTED_SNAPSHOT都设置为 ON 。ALLOW_SNAPSHOT_ISOLATION

ALLOW_SNAPSHOT_ISOLATION设定被设定为ON只允许快照隔离启动事务(例如SET TRANSACTION ISOLATION级快照)时无论READ_COMMITTED_SNAPSHOT设置。

将这两个设置设置为 ON 的唯一原因是它需要具有 READ COMMITTED 行版本控制 快照隔离。

我的问题是,我的理解在某种程度上是错误的吗?并且这两个设置必须始终一起设置为 ON(特别是对于 READ COMMITTED 行版本控制)?

sql-server configuration isolation-level

43
推荐指数
3
解决办法
5万
查看次数

SQL Server 代理作业和可用性组

我正在寻找处理 SQL Server 2012 可用性组中计划的 SQL Server 代理作业的最佳实践。也许我错过了一些东西,但是在目前的状态下,我觉得 SQL Server 代理并没有真正与 SQL2012 的这个强大功能集成在一起。

如何让计划的 SQL 代理作业知道节点切换?例如,我有一个在主节点上运行的作业,它每小时加载数据。现在,如果主要服务器出现故障,我如何激活现在成为主要服务器的辅助服务器上的作业?

如果我总是在辅助上安排作业,它会失败,因为辅助是只读的。

sql-server sql-server-2012 sql-server-agent availability-groups

43
推荐指数
3
解决办法
4万
查看次数

执行计划基础——哈希匹配混淆

我开始学习执行计划,并且对哈希匹配的工作原理以及为什么在简单连接中使用它感到困惑:

select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

据我了解,顶部索引扫描的结果变为可散列的,底部索引聚集扫描中的每一行都被查找。我至少在某种程度上了解哈希表是如何工作的,但我对在这样的示例中究竟哪些值进行了哈希处理感到困惑。

我认为它们之间的公共字段,即 id 被散列是有意义的——但如果是这种情况,为什么要散列一个数字?

sql-server execution-plan sql-server-2008-r2

42
推荐指数
3
解决办法
8万
查看次数

更改列宽

增加一列(nvarchar)的宽度一定会删除表格吗?

换句话说,在有活跃用户的生产环境中,宽度可以改变吗?

我认为如果大小增加(而不是减少),这将不是问题。

sql-server

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

数据库主体在数据库中拥有一个架构,并且无法删除消息

我试图从数据库中删除一个主体,但不能,因为它拥有一个架构。但是,当我去编辑用户时,取消选中架构的框是蓝色的并且无法移除。如何从这些架构中删除主体?

sql-server-2008 sql-server

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

如何识别负责“字符串或二进制数据将被截断”的列。

我正在使用我从远程 Pg 数据库写入 SELECT 的代码自动生成一些查询,并插入到本地 SQL Server 数据库中。但是,其中之一正在生成此错误:

[Microsoft][ODBC SQL Server 驱动程序][SQL Server]字符串或二进制数据将被截断。(SQL-22001) [状态是 22001 现在是 01000]

[Microsoft][ODBC SQL Server Driver][SQL Server]语句已终止。(SQL-01000) 在 .\insert.pl 第 106 行。

我如何找出哪个列产生了该错误并且缺少输入的长度?有没有办法做到这一点而不用蛮力猜测所有varchar

sql-server-2008 sql-server

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

将最后一个身份插入表中的最佳方法

哪个是获取我刚刚通过插入生成的标识值的最佳选择?这些语句对性能有什么影响?

  1. SCOPE_IDENTITY()
  2. 聚合函数 MAX()
  3. SELECT TOP 1IdentityColumn FROM TableNameORDER BY IdentityColumn DESC

sql-server sql-server-2008-r2 identity

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

检查用户是否存在于 SQL Server 数据库中

我正在使用 SQL Server 2012。我想在将用户添加到数据库之前检查用户是否存在。

这是我测试过的:

USE [MyDatabase]
GO

IF NOT EXISTS (SELECT name 
                FROM [sys].[server_principals]
                WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
    CREATE USER [IIS APPPOOL\MyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Run Code Online (Sandbox Code Playgroud)

但是,SELECT name FROM [sys].[server_principals]如果该用户存在于MyDatabase.

如何检查用户是否存在于MyDatabase

sql-server sql-server-2012

42
推荐指数
3
解决办法
10万
查看次数

为什么更改声明的连接列顺序会引入排序?

我有两个具有相同名称、类型和索引键列的表。其中一个具有唯一的聚集索引,另一个具有非唯一的.

测试设置

设置脚本,包括一些真实的统计数据:

DROP TABLE IF EXISTS #left;
DROP TABLE IF EXISTS #right;

CREATE TABLE #left (
    a       char(4) NOT NULL,
    b       char(2) NOT NULL,
    c       varchar(13) NOT NULL,
    d       bit NOT NULL,
    e       char(4) NOT NULL,
    f       char(25) NULL,
    g       char(25) NOT NULL,
    h       char(25) NULL
    --- and a few other columns
);

CREATE UNIQUE CLUSTERED INDEX IX ON #left (a, b, c, d, e, f, g, h)

UPDATE STATISTICS #left WITH ROWCOUNT=63800000, PAGECOUNT=186000;

CREATE …
Run Code Online (Sandbox Code Playgroud)

join sql-server sql-server-2014 sort-operator sql-server-2017

42
推荐指数
2
解决办法
1878
查看次数

外部应用与左连接性能

我正在使用 SQL SERVER 2008 R2

我刚刚在 SQL 中遇到 APPLY 并且喜欢它如何解决如此多情况下的查询问题,

我使用 2 个左连接来获得结果的许多表,我能够获得 1 个外部应用。

我的本地数据库表中有少量数据,部署后代码应该在至少 20 倍大的数据上运行。

我担心对于大量数据,外部应用可能需要比 2 个左连接条件更长的时间,

谁能告诉我 apply 究竟是如何工作的,以及它如何影响非常大数据的性能,如果可能的话,每个表的大小有一些比例关系,比如与 n1^1 或 n1^2 成比例......其中 n1 是表中的行数1.

这是带有 2 个左连接的查询

select EC.*,DPD.* from Table1 eC left join
  (
   select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2
   group by member_id,parent_gid,child_gid,LOB,group_gid

  ) DPD2 on DPD2.parent_gid = Ec.parent_gid
        AND DPD2.child_gid = EC.child_gid
        AND DPD2.member_id = EC.member_id
        AND DPD2.LOB = EC.default_lob
        AND DPD2.group_gid = EC.group_gid
  left join
  Table2 dpd on dpd.parent_gid = dpd2.parent_gid 
            and …
Run Code Online (Sandbox Code Playgroud)

join sql-server cross-apply

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