小编Aar*_*and的帖子

架构更改会“破坏”可用性组还是透明处理?

我的组织正计划采用 SQL Server 2012 可用性组,我正在尝试了解它将对我们的应用程序升级过程产生什么影响(如果有)。

我们每 8 周发布一次应用程序更新,任何发布都可能包括架构更改和/或数据迁移。

我想了解的是 HA/DR 解决方案是否透明地处理架构更改(新列、索引被添加到辅助节点),或者是否需要手动干预在每个实例上创建架构然后重新打开 Always On。

我假设的数据迁移部分是透明处理的,但也想确认一下。

我想我也做了一个笼统的假设,即基于可用性组配置的这些行为没有区别,这也可能是错误的。请告诉我。

简而言之; 在我的应用程序的任何给定版本中,我可能会通过向其中添加列来更改非常大的表(数百万条记录的数十到数百条记录)。某些列可能是“全新的”,因此它们可以使用 Enterprise Online 架构更改功能。其他列可能是现有列的重构(全名被拆分为名字和姓氏),并且将为表中的每一行运行迁移以填充这些字段。这些行为中的任何一个是否需要 DBA 更改 AlwaysOn 配置,或者这是默认处理的,并且所有辅助节点都“免费”获得 DDL 和 DML 语句?

感谢您提供的任何清晰度。

schema sql-server sql-server-2012 high-availability availability-groups

12
推荐指数
1
解决办法
5137
查看次数

tempdb 日志文件的最佳实践

我在这里和那里阅读了许多关于如何配置 tempdb 数据文件的博客,但我没有找到有关tempdb 日志文件的任何信息。

这是我目前在 tempdb 中使用的策略:

  • 我已经使用了Paul Randal关于如何拆分我的 tempdb 数据文件的建议
  • 我已将 tempdb 数据文件的大小设置为最大值并禁用自动增长。例如,我有 100gb 的可用磁盘空间并将我的 8 个 tempdb 数据文件的大小设置为每个 10gb。这可以防止Brent Ozar 推荐的磁盘碎片,而且我的日志文件还有 20gb 可用空间。

但就像我说的,没有人在谈论tempdb 日志文件。我该怎么办?在我的设置中,此文件与 tempdb 数据文件位于同一位置。我应该与 tempdb 日志文件一起使用的大小和自动增长值是多少?

sql-server sql-server-2012 tempdb

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

如何正确解决合并复制错误冲突

我们有 SQL Server 2008 R2 合并复制设置。

最近我开始遇到一些表的冲突,当我检查冲突查看器时,我可以看到获胜者和失败者列的值是相同的!

我确信只有一位订阅者输入了这些数据。

我曾经sp_showrowreplicainfo获得有关冲突行的更多详细信息,我得到了 2 行:一个用于发布者,另一行用于订阅者,两行的“版本”均为 1。

我还实现了 Brandon 的方法:Auditing changes in Merge Replication,但它只显示正常插入!

你能告诉我如何开始解决这种冲突吗?

sql-server sql-server-2008-r2 merge-replication

12
推荐指数
1
解决办法
1000
查看次数

MERGE 是否使用 tempdb?

考虑以下查询:

MERGE [Parameter] with (rowlock) AS target
    USING (SELECT @AreaId, @ParameterTypeId, @Value)
            AS source (AreaId, ParameterTypeId, Value)
    ON (target.AreaId = source.AreaId AND 
        target.ParameterTypeId = source.ParameterTypeId)
    WHEN MATCHED THEN 
        UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
    WHEN NOT MATCHED THEN
        INSERT ([AreaId], [ParameterTypeId], [Value])
        VALUES (source.AreaId, source.ParameterTypeId, source.Value);
Run Code Online (Sandbox Code Playgroud)

统计 I/O 提供以下输出:

表“参数类型”。扫描计数 0,逻辑读取 2,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表 'Area'。扫描计数 0,逻辑读取 2,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“参数”。扫描计数 1,逻辑读取 4,物理读取 0,预读读取 0,lob 逻辑读取 …

sql-server t-sql

12
推荐指数
2
解决办法
2191
查看次数

如何确定 SSIS 转换是非阻塞、部分阻塞还是完全阻塞?

有几个博客声称将 SSIS 转换分为阻塞(异步)、非阻塞(同步)和部分阻塞(异步)。

在查看特定问题时:多播是同步(非阻塞)还是异步(部分阻塞)?

一个资源声称异步:“多播是一种异步(也称为部分阻塞)转换”来源:http : //social.technet.microsoft.com/wiki/contents/articles/7392.ssis-multicast-transformation.aspx

另一个同步:https ://jorgklein.com/2009/04/14/ssis-lookup-is-case-sensitive/

其他资源声称 DQS Cleansing 转换是一种非阻塞转换,但在我看来它是部分阻塞的。

请不要使用按类型分类的转换列表的链接来回答。这个问题的答案有望采用更严格的方法来证明正确答案。

由于部分阻塞和阻塞转换会将数据移动到新的缓冲区,而不是在缓冲区上操作的非阻塞,我怀疑解决方案是在转换执行期间观察缓冲区的创建,但我不确定(a ) 如果这会产生明确的答案和 (b) 如何做到这一点。

我相信非阻塞转换不会导致新的执行树开始,因此答案可能在于记录 PipelineExectionTrees 和 PipelineExecutionPlan。这可以区分同步和异步,但不能区分部分阻塞和完全阻塞。

sql-server ssis ssis-2012

12
推荐指数
1
解决办法
3188
查看次数

统计数据是最新的,但估计不正确

当我这样做时,dbcc show_statistics ('Reports_Documents', PK_Reports_Documents)我会得到报告 ID 18698 的以下结果:

在此处输入图片说明

对于此查询:

SELECT * 
FROM Reports_Documents 
WHERE ReportID = 18698 option (recompile)
Run Code Online (Sandbox Code Playgroud)

我得到一个查询计划,PK_Reports_Documents按预期进行聚集索引搜索。

但让我感到困惑的是估计行数的错误值:

在此处输入图片说明

根据这个

当示例查询 WHERE 子句值等于直方图 RANGE_HI_KEY 值时,SQL Server 将使用直方图中的 EQ_ROWS 列来确定等于的行数

这也是我所期望的方式,但在现实生活中似乎并非如此。我还尝试RANGE_HI_KEY了由提供的直方图中存在的一些其他值,show_statistics并经历了相同的情况。在我的情况下,这个问题似乎导致某些查询使用非常不理想的执行计划,导致执行时间为几分钟,而我可以通过查询提示在 1 秒内运行它。

总而言之:有人可以解释一下为什么EQ_ROWS直方图没有用于估计的行数,不正确的估计来自哪里?

更多(可能有用)信息:

  • 自动创建统计已开启,所有统计都是最新的。
  • 被查询的表大约有 8000 万行。
  • PK_Reports_Documents是一个组合PK,由ReportID INTDocumentID CHAR(8)

该查询似乎总共加载了 5 个不同的统计对象,所有这些对象都包含ReportID表中的 + 一些其他列。它们都已新鲜更新。RANGE_HI_KEY下表中是直方图中的最高上限列值。

+-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+
|                                  name                                   | stats_id | auto_created | user_created | Leading column Type …
Run Code Online (Sandbox Code Playgroud)

sql-server statistics sql-server-2008-r2 index-statistics

12
推荐指数
1
解决办法
1395
查看次数

为什么不支持删除列上的 Identity 属性

我读过,在 SQL Server 2000 之后,删除了“取消标识”标识列的能力。而且这是“按设计”(不仅仅是缺失的功能)。

这是我在博客上找到的一个例子。它涉及更新系统表。(并且在 SQL Server 2000 之后删除了该功能。)我认为通过系统表执行此操作不是一个好主意。我只是想知道为什么没有以另一种方式执行此操作的功能。

解决这个问题会给我带来大量的工作。(在不容忍停机的环境中将数亿行复制到新表中。)

所以我想我会问“为什么”。

Sql Server 2005 和更高版本中的哪些更改使这成为一件坏事?或者它总是很糟糕,只是没有被锁定?

再次将标识列设为普通列会违反什么“最佳实践”(或类似原则)?

——

更新以回答“我为什么这样做”的请求:
这是一个非常高级的摘要:我将开始向我的表添加分区。(这样我就可以存档/清除旧数据。)这很容易。但我偶尔需要将记录移动到不同的分区,这样它就不会被删除(当一个分区出现进行归档/删除时)。(我的分区列增加了 2,以便始终有空间将行移动到不同的分区。)

但是如果分区列是标识列,那么我必须删除并重新插入值(没有办法更新标识列的值)。这会导致复制问题。

所以我想使用序列而不是标识列。但是这种切换在大型数据库上非常困难。

sql-server identity

12
推荐指数
1
解决办法
2560
查看次数

找不到正在创建备份的进程

我们在客户服务器上安装了一个 SQL Server 2008 实例。客户的 IT 部门负责机器的各种备份。

SQL Server 日志显示每天晚上 7 点都有完整备份,但我们找不到在 SQL Server 中安排任何计划的证据。

我们联系的技术人员无法告诉我们是否有某种自动备份,他们只告诉我们整个机器正在备份。

使用我在这个论坛帖子中找到的脚本,我发现物理设备名称是一个 GUID,这意味着这是一个外部备份过程

USE [msdb]
GO 
SELECT 
    [bs].[database_name], 
    [bs].[backup_start_date], 
    [bs].[backup_finish_date], 
    [bs].Server_name,
    [bs].user_name AS [BackupCreator] ,
    [bmf].physical_device_name
FROM msdb..backupset bs  
INNER JOIN msdb..backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id] 
ORDER BY [bs].[backup_start_date] DESC
Run Code Online (Sandbox Code Playgroud)

这是上述查询中的一行:

db_name 2015-09-16 19:01:23.000 2015-09-16 19:01:28.000
SERVER_NAME NT AUTHORITY\SYSTEM
{424F084A-F35D-4A66-8FC7-0722778A859

此外,备份开始和完成日期仅跨越 5 秒,所以我想很明显这不是 sql server 的工作。

这是日志中的一行:

2015-09-03 19:02:30.71 备份
数据库备份。
数据库:db_name,创建日期(时间):2012/10/12(20:52:11),转储页面:3290021,
第一个 LSN:276028:152755:172,最后一个 LSN:276028:152827:1,转储设备数: 1、
设备信息:
(FILE=1, TYPE=VIRTUAL_DEVICE: {'{95380B0A-D50B-408F-B95F-1AB8975BA7F8}5'})。 …

sql-server-2008 sql-server backup

12
推荐指数
2
解决办法
6147
查看次数

将文件添加到 tempdb 的上下文中的热点是什么?

我试图找出是否可以将 tempdb 文件添加到 SQL Server 而不必重新启动 SQL Server 服务。我在数据库管理员上看到了这个答案:

一个答案指出:

添加 - 无需停机。尽管正如 Microsoft 的 Sean 指出的那样,SQL 更喜欢使用填充较低的文件。如果您要从 1 个数据文件开始并添加更多数据,那么 SQL 将使用新的数据文件一段时间,但您的性能不会比只有一个文件差。但是,如果您已经有 2+ 个并再添加一个,那么它会在新的一个上产生热点并降低性能。

但是,评论警告以下几点:

我会在“添加”部分添加一个附录:“添加:不,但你很可能会不平衡,所以你会成为热点,这可能会使事情变得更糟。”

我对该评论有以下问题,但被指示在我自己的一个新问题(这个问题)中提出这些问题,而不是通过该问题答案中的评论来询问评论者。

具体来说:

  1. 什么是热点?(我通过谷歌得到了一些信息,但没有详细说明添加文件后在 tempdb 上热点会发生什么)
  2. 热点如何使 tempdb 中的事情变得更糟?
  3. 数据库中的哪些具体事情会变得更糟?

sql-server tempdb troubleshooting

12
推荐指数
2
解决办法
666
查看次数

SQL Server 是如何生成加起来达到 6,000% 的查询执行计划的?

奇怪的执行计划

今天我在 The Heap 上,正在查看我认为可以改进的查询计划。然而,它创造了一些东西,动摇了我对 SQL Server 查询优化器的信念。如果甚至不能计数到 100%,我还可以信任它吗?

表的特点:

  • 聚集在非标识列上
  • 12 个索引,其中之一是相关date_entered
  • 60,000 条记录
  • 26列不同类型和长度
  • PAGE 压缩表

有没有人以前见过这个,是什么导致计划看起来如此扭曲?


以下来自 SQL Sentry Plan Explorer

SQL Sentry 计划资源管理器 - 图像 顶级运营

sql-server optimization ssms execution-plan sql-server-2012

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