标签: sql-server-2014

如何安装 Microsoft SQL Server 2014 Standard Edition 试用版?

我想在具有相同硬件的两台独立服务器上安装 SQL Server 2014StandardEnterprise版本,以测试运行内部程序集的性能差异。

DBA 给了我两个ISO名称如下:

SW_DVD9_SQL_Svr_Standard_Edtn_2014w_SP1_64Bit_English_-2_MLF_X20-29010
SW_DVD9_SQL_Svr_Ent_Core_2014w_SP1_64Bit_English_-2_MLF_X20-28988
Run Code Online (Sandbox Code Playgroud)

声称它们是从 Microsoft 下载的,但是一旦我安装了它们并运行:

SELECT @@VERSION
Run Code Online (Sandbox Code Playgroud)

我得到以下Enterprise版本:

Microsoft SQL Server 2014 - 12.0.4213.0 (X64) 2015 年 6 月 9 日 12:06:16 版权所有 (c) Windows NT 6.3(内部版本 9600:)上的 Microsoft Corporation 企业评估版(64 位)

以及以下Standard版本:

Microsoft SQL Server 2014 - 12.0.4213.0 (X64) 2015 年 6 月 9 日 12:06:16 版权所有 (c) Windows NT 6.3(内部版本 9600:)上的 Microsoft Corporation 企业评估版(64 位)

那么,我做错了什么?为什么,当我Standard再次使用iso 时Enterprise被安装?


我想这应该是 …

sql-server sql-server-2014

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

如何优化这个棘手的 SQL 自连接?

我想对表执行复杂的自联接。我知道理论上这可以非常有效地完成(见下文),但我无法让 SQL(在 Microsoft SQL Server 上)这样做。

我的问题是:

我怎样才能让 SQL 有效地做到这一点?我需要提供哪些信息才能推断出最佳解决方案或类似的快速解决方案?

输入:

我有一个事件表。每个事件都属于某个项目,并且具有两种类型之一。我可以随意使用这个表,并创建我想要的任何索引,因为它是一个中间表。它也仅用于离线处理,因此以后不会添加新数据。

该表有数亿行。type=0 的条目和 type=1 的条目大致以相同的频率出现,并且它们或多或少是公平的分布,因为输入数据是按照某些规则创建的,因此可以假设以下情况为真对于数据:每次type=0发生事件时,涉及的项目的计数器增加,每次type=1发生事件时,它再次减少。计数器将始终介于 0 和 3(含)之间。

该表目前看起来像这样,但您可以随时提出更改建议:

select
    a.item
    ,case when a.<some_condition> then 1 else 0 end as event_type
    ,row_number() over(partition by a.item order by a.date asc) as sequence_id -- this makes the order clearer and deals with duplicate dates in a manner that is acceptable for these purposes
    ,<...> as counter_after_event -- this lies in [1;3] if event_type=0, and in [0;2] if …
Run Code Online (Sandbox Code Playgroud)

performance sql-server t-sql sql-server-2014 query-performance

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

如何使用 CTE 来比较值

我需要根据以前的记录返回 0 或 1。示例表:

DECLARE @x TABLE(ProductID INT, Failed bit, SampleDate date, LevelCode int);
INSERT @x VALUES
(101, 0, '20151201', 1),    
(101, 1, '20151205', 2),    
(101, 0, '20151206', 3),
(101, 1, '20151208', 2), 
(102, 1, '20151202', 1),
(102, 0, '20151204', 2),    
(102, 0, '20151205', 3),
(103, 0, '20160101', 1),
(103, 1, '20160102', 2),
(103, 0, '20160103', 2),
(104, 0, '20160101', 1),
(104, 0, '20160102', 2),
(104, 0, '20160103', 3);
Run Code Online (Sandbox Code Playgroud)

我们在最后一条记录上唯一关心的是LevelCode(即每个ProductID 的最后一条记录)。最后一条记录是否通过/失败无关紧要。然后,我们查看该 ProductID 的所有其他记录(因此是最后一条记录之前的所有记录),如果出现与最后一条记录相同的 LevelCode 失败,我们将 IsLastRunSameLevelAsPreviousRun 设置为 1,否则为 0:

 ProductID …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

4
推荐指数
2
解决办法
2345
查看次数

当模式为“prefix%”形式时,如何获得 (LIKE @p) 的良好执行计划

我正在使用一个执行表单查询的 ORM:

SELECT Columns
FROM T
WHERE Col LIKE @p0 ESCAPE '~'
Run Code Online (Sandbox Code Playgroud)

Col已编入索引且索引正在覆盖。谓词非常有选择性。这些表有 500,000 行。

我总是在查询字符串前缀(例如'prefix%')。显然,这里的 SQL Server 不是静态知道的。但我知道 SQL Server 基本上能够根据LIKE带有前缀的模式进行查找。

我希望 SQL Server 在执行时发现要扫描的索引的相关范围,并且只扫描该范围。不过,我得到的执行计划有一个索引扫描。

ORM 不支持OPTION (RECOMPILE),我不确定它是否是一个不错的选择,因为查询在大约 20 毫秒内执行。(但是我希望这个查询更快。通过搜索,这应该能够在 ~1ms 内运行)。

我可以以某种方式让 SQL Server 在这里执行搜索吗?

sql-server sql-server-2014

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

增量统计:找出哪些分区已被重新采样

TL;DR:在使用增量统计数据时,是否可以找出哪些分区已重新采样,哪些未重新采样?平台为 SQL Server 2014 企业版。

带有一些背景信息的长版本是这样的。

假设一个相当典型的 DW 环境,有一个分区表。分区基于日期列。这是因为将暂存数据加载到单独的表上,并且在预处理之后,使用分区切换将数据移动到生产事实表中。哦,一个聚集列存储索引正在使用中。使用了大约一千个分区。数据库在虚拟机上运行。

事实表中有大约 7.5 gigarows (100 GB)。每日增长约为 5 兆。这个增长率太小,无法触发自动统计更新,保存跟踪标志 2371(尚未尝试)。

开发人员对过时统计数据的下意识反应是更新它们。对于 7.5 gigarows,所有统计数据的完整更新需要大约五个小时。对于单个统计更新,处理性能约为每秒 20 分钟或 90 兆行。

由于系统位于 VM 平台上,因此业务规则限制了其成本。内存和 IOPS 都不容易增加。五小时的更新工作太慢,无法包含在每晚的 ETL 过程中,因此统计数据要么过时,要么在意外的时间更新,要么将在维护窗口中更新。

由于 SQL Server 是 2014 企业版,它支持增量统计,听起来就像解决方案。将统计信息转换为增量统计信息后,处理单个分区的单个统计信息只需 20 秒。新切换的分区总计约五分钟。这听起来很棒,当然也适合 ETL 过程。

我想知道的是如何在分区切换环境中管理增量统计信息。假设统计数据在日期 D 被转换和更新为增量,那么如何找出未处理的分区,例如,日期 D+2?在 ETL 过程中更新统计信息是微不足道的,因为切换过程显然知道分区 ID。但是,如果存在未重新采样的分区,如何找到这些分区?

  • 可以从以下位置找到统计数据的最后更新 sys.dm_db_stats_properties
  • 分区号可从 sys.partitions
  • 分区函数值在 sys.partition_range_values

可以选择统计数据的最后更新日期 L 并将其与今天的日期 T 进行比较。然后计算 L 指向哪个分区 id 以及它是否与 T 相同。然后继续更新所有分区 ID [L, T)。这听起来很棘手且容易出错,那么有更好的方法吗?显示哪些分区用于重采样的 DMV 会很好,但没有,是吗?

sql-server statistics dmv partitioning sql-server-2014

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

SYSUTCDATETIME 是安全的主键吗?

我有一个连续修改的已处理事件表。处理时间的 UTC 时间和 eventId。

使用 SYSUTCDATETIME() 作为主键是否安全?我可以轻松使用代理键,但感觉很有趣。

sql-server primary-key sql-server-2014

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

如何查找引用表?

我在 SQL Server 2014 上,我有一张User表:

+----+------+-----+
| ID | Name | ... |
+----+------+-----+
| 11 | John | ... |
| 12 | Jack | ... |
| .. | .... | ... |
+----+------+-----+
Run Code Online (Sandbox Code Playgroud)

我有很多表格都引用了这个表格。我可以获得引用此表的所有表的列表吗?而且,特别是,我可以获得引用该表中特定行的所有表的列表吗?

然后我需要将所有引用更新为User12 到User11。

foreign-key sql-server sql-server-2014

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

为什么 SQL Server 使用非聚集索引而不使用聚集索引?

我有一张有 1.45 亿行的表

CREATE TABLE [dbo].[RFTest](
    [SnapshotKey] [int] NOT NULL,
    [SnapshotDt] [datetime] NOT NULL,
    [LoanNum] [int] NOT NULL,
    [GLSourceSystem] [varchar](10) NOT NULL,
    [FlowDescription] [varchar](30) NULL,
    [Account] [varchar](30) NULL,

    --- plus 20 more column
)
Run Code Online (Sandbox Code Playgroud)

该表在 SnapshotDt 上分区。

我在我的表上添加了以下索引:

create clustered index ci on RFTest (SnapshotDt, SnapshotKey, LoanNum)

create nonclustered index nci on RFTest (SnapshotDt, SnapshotKey, LoanNum)
    include ([GLSourceSystem],[Account],[FlowDescription])
Run Code Online (Sandbox Code Playgroud)

我运行了以下查询:(我使用前 100 名进行测试,因为如果我想运行它,整个表将需要很长时间)

select top 100 *
from RFTest with (index(ci)) -- force index
where LoanNum = 2712

select top 100 * …
Run Code Online (Sandbox Code Playgroud)

index sql-server clustered-index nonclustered-index sql-server-2014

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

使用可用性组和辅助副本修补 SQL Server

场景:SQL Server 2014 CU6。1 个 AG 与 2 个数据库(兼容性级别 100)。Windows Server 2012 R2 上具有 3 个节点的故障转移群集。节点 1 和节点 2 上的主要可用性副本。节点 3 上的次要可用性副本(无投票)。异步提交、手动故障转移、可读辅助。节点 3 用于在这 2 个数据库上运行报告(在节点 1 和 2 的 AG 外部运行的 8 个数据库中)。

问题:希望将这些从 SQL 2014 修补到 SP1 和最新的 CU。不是我的构建,到目前为止还没有使用 AG 或 FC 的经验。我的“测试”环境也用于开发,所以没有错误的余地。

问题:

修补 3 个节点的最佳顺序是什么?

我是否首先必须从我正在修补的节点上的 AG 中删除数据库?

修补辅助节点时是否需要将其取出?

没有这方面的经验,我在文档中找不到明确的答案(可能不支持?):https ://msdn.microsoft.com/en-us/library/dn178483( v=sql.120) .aspx

sql-server failover availability-groups sql-server-2014 patching

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

4
推荐指数
2
解决办法
708
查看次数