标签: sql-server

将已发布复制数据库的数据库兼容性级别从 90 更改为 100 的影响

我有一个 SQL Server 2008 R2 服务器,其中包含一堆当前在兼容级别 90 (2005) 下运行的已发布数据库。

订阅数据库也是 SQL Server 2008 R2,但是目标数据库设置为兼容性级别 100,并且复制工作正常。

如果我更改已发布数据库的兼容性级别,它会以任何方式影响复制,还是只是重新初始化所有订阅并重新启动复制的情况?

我怀疑更改已发布的数据库兼容性级别可能会稍微改变复制存储过程的功能,但我不是 100% 确定。

是这种情况吗?

replication sql-server-2005 sql-server sql-server-2008-r2

11
推荐指数
1
解决办法
8919
查看次数

SQL Server 2012 可用性组是“AlwaysON”吗?

在传统的 SQL Server 群集中,当发生故障转移时,所有连接到 SQL Server 失败实例的客户端都会失去连接,每个客户端都必须重新建立到故障转移群集实例的新连接。

AlwaysON 可用性组是否可以缓解此问题?SQL Server 2012 AlwaysON 可用性组的故障转移对于连接到 SQL Server 的客户端是否透明?

sql-server-2008 sql-server sql-server-2012 availability-groups

11
推荐指数
1
解决办法
2456
查看次数

SQL Server 2008 日期时间索引性能错误

我们正在使用 SQL Server 2008 R2,并且有一个非常大(100M+ 行)的表,其中包含一个主 id 索引和一个datetime包含非聚集索引的列。我们看到了一些非常不寻常的客户端/服务器行为,这些行为基于专门针对索引日期时间列order by子句的使用。

我通读了以下帖子:https : //stackoverflow.com/questions/1716798/sql-server-2008-ordering-by-datetime-is-too-slow 但客户端/服务器上发生的事情比实际发生的更多这里开始描述。

如果我们运行以下查询(编辑以保护某些内容):

select * 
from [big table] 
where serial_number = [some number] 
order by test_date desc
Run Code Online (Sandbox Code Playgroud)

每次查询都会超时。在 SQL Server Profiler 中,对服务器执行的查询如下所示:

exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'select * .....
Run Code Online (Sandbox Code Playgroud)

现在,如果您将查询修改为:

declare @temp int;
select * from [big table] 
where serial_number = [some number] 
order by test_date desc
Run Code Online (Sandbox Code Playgroud)

SQL Server Profiler 向服务器显示执行的查询如下所示,它立即工作:

exec sp_prepexec @p1 output, NULL, N'declare @temp int;select * …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

11
推荐指数
1
解决办法
5917
查看次数

禁用某些表的日志记录

我使用的是 SQL Server 2005。我有两个包含聚合信息的表。信息不断更新,每天产生近 5GB 的日志数据。(这比整个数据库还大!)我想禁用对这些表的日志记录,因为回滚并不是真正必要的。但是,我想继续登录数据库中的其他表。

是否可以禁用数据库中某些表的日志记录?如果没有,我可以将两个表放在同一个架构中,然后禁用架构上的日志记录吗?将两个表移动到单独的数据库并在那里禁用日志记录的唯一选择是什么?

更新: 我想我会解释为什么我真的不需要在这些表上记录活动。

这两个表充满了 GPS 数据,因此它们变得非常大。第一个表从现场的六个 Android 表中捕获原始位置。来自每个平板电脑的新数据每 5-10 秒就会出现一次。然后将该信息聚合为 locationA、locationB、travelTime。目标是根据实际驾驶数据,最终实现所有地点之间最短的旅行时间。数据只针对小城市,精确到小数点后四位,易于管理。然而,随着新的原始数据的出现,需要更新的旅行时间变慢,需要插入新的旅行时间。

汇总原始数据后,将对其进行清除。我们不会倒退到更长的旅行时间,所以这就是为什么在这些表中回滚并不那么重要。

sql-server-2005 sql-server transaction-log

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

用户无法在 SSMS 中查看非默认架构中的表

我在VIEW DEFINITION为我的一个用户在架构级别适当设置权限时遇到问题。我已经创建了架构TestSchema并添加了一些表。用户目前有权限设置为访问和修改表(SELECTUPDATEDELETE通过等)dbo_datareaderdbo_datawriter角色。但是,他们看不到 SSMS 对象资源管理器中的任何表。

我试过授予查看定义的权限:

grant view definition on SCHEMA :: [TestSchema] to [User]
Run Code Online (Sandbox Code Playgroud)

那没有用。我尝试设置表级权限:

grant view definition on [TestSchema].[NewTable] to [User]
Run Code Online (Sandbox Code Playgroud)

那也没有用。然后我尝试了一个全面的资助:

grant view definition to [User]
Run Code Online (Sandbox Code Playgroud)

确实奏效了;他们现在可以看到TestSchema,以及他们不应该访问的其他模式。

我的目标是允许用户查看给定模式中的所有表。我如何做到这一点?如果默认情况下我应该能够执行此操作,我应该查看哪些权限才能找到为什么不能执行此操作?

sql-server-2008 security sql-server permissions ssms

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

如何通过 SQL Server Management Studio 映射另一台服务器

我正在尝试通过给出命令来映射另一台服务器

EXEC xp_cmdshell 
    'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes'
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

找不到网络路径

但我可以手动映射另一台服务器。请帮我解决这个问题。

sql-server-2008 sql-server ssms t-sql

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

选择/插入死锁

此实例承载 SharePoint 2007 数据库 (SP)。针对 SP 内容数据库中一个使用率很高的表,我们遇到了许多 SELECT/INSERT 死锁。我已经缩小了涉及的资源范围,两个进程都需要对非聚集索引进行锁定。
INSERT 需要对 SELECT 资源的 IX 锁,而 SELECT 需要对 INSERT 资源的 S 锁。死锁图描绘了三个资源,1.) 两个来自 SELECT(生产者/消费者并行线程),和 2.) INSERT。
我已附上死锁图供您查看。因为这是 Microsoft 代码和表结构,我们无法进行任何更改。
但是,我在 MSFT SP 站点上读到,他们建议将 MAXDOP 实例级别配置选项设置为 1。由于此实例在许多其他数据库/应用程序之间共享,因此无法禁用此设置。


因此,我决定尝试阻止这些 SELECT 语句并行运行。我知道这不是解决方案,而是帮助进行故障排除的临时修改。因此,我将“并行的成本阈值”从我们的标准 25 增加到 40,即使工作负载没有改变(SELECT/INSERT 频繁发生),死锁也消失了。我的问题是为什么?

SPID 356 INSERT 在属于非聚集索引的页上有 IX 锁
SPID 690 SELECT 执行 ID 0 在属于同一非聚集索引的页上有 S 锁

现在

SPID 356 想要 SPID 690 资源上的 IX 锁,但无法保留它,因为 SPID 356 被 SPID 690 执行 ID 0 S 锁
SPID 690 执行 ID …

sql-server deadlock sharepoint

11
推荐指数
2
解决办法
9909
查看次数

如何平衡 SQL Server 内存与 SQL Server Analysis Services 内存

我们有许多具有相同配置的系统

  • 一台服务器(虚拟或物理)
  • 运行 SQL Server (SQL) 和 SQL Server Analysis Server (AS)
  • 多核
  • 16GB 内存

每天晚上 SQL Server 会做大约 2-3 小时的处理,然后是 2-3 小时的 AS 处理。然后全天只查询 AS。

假设这是一个专用服务器,没有其他应用程序值得关注,并且两组处理是完全同步的 - 没有重叠总是一个接一个 - 我怎样才能最好地设置 SQL 和 AS 服务器内存限制。

询问的原因是,如果我不为 SQL 设置限制,它将抢占它所能获取的所有内存。但是 - 我的理解是,如果出现以下情况,SQL 将很乐意放弃此内存:

  • 它没有使用它并且

  • 另一个服务/程序请求它。

所以从逻辑的角度来看,我相信允许 SQL 根据需要使用尽可能多的东西,但我不太确定 AS' TotalMemoryLimit。我不确定 AS 是否会放弃它的记忆。事实上,阅读更多让我相信让它承担一切是错误的。

这是否意味着我实际上需要为两者设置限制?我对最佳实践应该是什么以及考虑到流程不重叠我们需要衡量什么感到困惑。

希望这是有道理的。

sql-server ssas memory

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

如何检查 SQL Server 终结点的安全设置?

我正在为我们的 SQL Server 开发人员创建一个测试环境。

在生产中,我们有 3 个 SQL Server,SQL01包含多个镜像到SQL02. SQL03在“具有自动故障转移的高安全性”或同步配置中充当见证人。

我已经使用 VMWare P2V 将所有三台机器虚拟化到单独的硬件上,重新配置机器的 SID,并从这些新机器上获取我们生产服务器的 IP 地址。

我一开始忘记了生产见证机器的黑洞,所以测试机器上的数据库仍然使用SQL03机器作为见证。注意到这个问题,我决定重新配置 TEST 上的数据库以指向新虚拟化的 TEST 见证,称之为TEST03.

为了重新配置数据库以使用新的见证,我在主服务器上输入了以下命令TEST01

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Run Code Online (Sandbox Code Playgroud)

反应出乎意料:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.
Run Code Online (Sandbox Code Playgroud)

我对这个错误消息感到非常困惑,因为配置在生产机器上确实有效,并且在测试机器上没有以任何方式进行修改。

为了让它工作,我需要LOGIN在测试见证上创建一个:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server mirroring

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

SQL Server 缓存刷新和磁盘 I/O

我们正忙于对我们在 .NET 4.0 中开发并在后台运行 SQL Server 2008 R2 的 OLTP 系统进行负载测试。系统使用 SQL Server Service Broker 队列,它们的性能非常好,但我们在处理时遇到了一个特殊的趋势。

SQL Server 以极快的速度处理请求 1 分钟,然后增加约 20 秒的磁盘写入活动。下图说明了这个问题。

SQL OLTP 系统 - 性能计数器

Yellow = Transactions per second
Blue   = Total CPU usage
Red    = Sqlsrv Disk Write Bytes/s
Green  = Sqlsrv Disk Read Bytes/s
Run Code Online (Sandbox Code Playgroud)

在故障排除期间,我们尝试了以下方法,但模式没有任何重大变化:

  • 已停止 SQL Server 代理。
  • 杀死了几乎所有其他正在运行的进程(无 A/V、SSMS、VS、Windows 资源管理器等)
  • 删除了所有其他数据库。
  • 禁用所有对话计时器(我们不使用任何触发器)。
  • 从消息队列驱动的方法转向简单/粗略的表监控设计。
  • 使用从轻到重的不同负载。
  • 修复了所有死锁。

似乎 SQL Server 可能正在建立其缓存并以特定的时间间隔将其写入磁盘,但我无法在网上找到任何支持该理论的内容。

接下来,我计划将解决方案转移到我们的专用测试环境中,看看我是否可以复制该问题。在此期间的任何帮助将不胜感激。

更新 1 根据要求,附上一张图表,其中包括Checkpoint Pages/SecPage Life Expectancy和一些磁盘延迟计数器。

SQL OLTP 系统 - 性能计数器 - 检查点

看起来好像检查点(浅蓝线)是我们观察到的性能下降(黄线)的原因。^

磁盘延迟在处理过程中保持相对一致,页面预期寿命似乎没有任何明显影响。我们还调整了 SQL Server 可用的 ram 量,这也没有太大影响。将恢复模型从 …

performance sql-server service-broker

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