标签: sql-server-2016

SQL Server:超过 8KB 的行:文档在哪里?

我需要正确了解在 SQL Server 2016 标准版中是否以及如何获得每行 10KB 或 20KB。

我正在阅读 SQL Server 技术规范:

https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server#Engine

特别是“每行字节数

它指的是 BOL 中的某些内容,我找不到。

SQL Server 联机丛书中的“行溢出数据超过 8 KB ”主题部分在哪里。?

sql-server sql-server-2016

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

从奇怪的查询中调查错误

在我的数据库错误日志(在这个答案中生成)中,我看到以下查询的许多实例(每天数百个):

声明@HkeyLocal nvarchar(18)
声明@ServicesRegPath nvarchar(34)
声明@SqlServiceRegPath 系统名
声明@BrowserServiceRegPath 系统名
声明@MSSqlServerRegPath nvarchar(31)
声明@InstanceNamesRegPath nvarchar(59)
声明@InstanceRegPath 系统名
声明@SetupRegPath 系统名
声明@NpRegPath 系统名
声明@TcpRegPath 系统名
声明@RegPathParams 系统名称
声明@FilestreamRegPath 系统名
选择@HkeyLocal=N'HKEY_LOCAL_MACHINE'
-- 基于实例的路径
选择@MSSqlServerRegPath=N'SOFTWARE\Microsoft\MSSQLServer'
选择@InstanceRegPath=@MSSqlServerRegPath + N'\MSSQLServer'
选择@FilestreamRegPath=@InstanceRegPath + N'\Filestream'
选择@SetupRegPath=@MSSqlServerRegPath + N'\Setup'
选择@RegPathParams=@InstanceRegPath+'\Parameters'
-  服务
选择@ServicesRegPath=N'SYSTEM\CurrentControlSet\Services'
选择@SqlServiceRegPath=@ServicesRegPath + N'\MSSQLSERVER'
选择@BrowserServiceRegPath=@ServicesRegPath + N'\SQLBrowser'
-- InstanceId 设置
选择@InstanceNamesRegPath=N'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL'
-  网络设置
选择@NpRegPath=@InstanceRegPath + N'\SuperSocketNetLib\Np'
选择@TcpRegPath=@InstanceRegPath + N'\SuperSocketNetLib\Tcp'
声明@SmoAuditLevel int
exec master.dbo.xp_instance_regread @HkeyLocal, @InstanceRegPath, N'AuditLevel', @SmoAuditLevel OUTPUT
声明 @NumErrorLogs int
exec master.dbo.xp_instance_regread @HkeyLocal、@InstanceRegPath、N'NumErrorLogs'、@NumErrorLogs …

sql-server sql-server-2016

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

将 SQL Server 2016 从 RTM 更新到 SP1

我安装了 SQL Server 2016 RTM 并希望将其更新到 SP1。当我运行 SP1 累积更新时,它失败了,因为没有要更新的内容。大概这是因为它需要先安装 SP1。当我运行 SP1 安装程序时,它想创建一个新实例。

如何将现有实例从 RTM 更新到 SP1,而无需卸载和重新安装实例?

update sql-server-2016

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

SQL Server:SET NOCOUNT ON 仍在返回数据

按照此页面中的示例,我无法阻止存储过程返回选择数据集。

执行这个:

SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT 'should be displayed'
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT 'should NOT be displayed'
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO
Run Code Online (Sandbox Code Playgroud)

将返回给我:

在问题上设置无计数

这是一个错误吗?有什么不对?我在 SQL Server 13.0.4206 上

sql-server sql-server-2016

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

如何插入到表变量中?

我想在表变量中存储 2 个坐标点(纬度、经度)。

我试过了:

declare @coordinates table(latitude1 decimal(12,9), 
                           longitude1 decimal(12,9), 
                           latitude2 decimal(12,9), 
                           longitude2 decimal(12,9)) 

select latitude, 
       longitude into @coordinates 
from   loc.locations 
where  place_name IN ('Delhi', 'Mumbai')
select @coordinates
Run Code Online (Sandbox Code Playgroud)

它显示错误:

消息 102,级别 15,状态 1,第 2 行 '@coordinates' 附近的语法不正确。

选择查询的结果:

select latitude, 
       longitude 
from   loc.locations 
where  place_name IN ('Delhi', 'Mumbai')
Run Code Online (Sandbox Code Playgroud)

是:

latitude    longitude
28.666670000    77.216670000
19.014410000    72.847940000
Run Code Online (Sandbox Code Playgroud)

如何将值存储在表数据类型中?

我运行了查询SELECT @@VERSION并得到了结果:

Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 2016 年 4 月 29 日 23:23:58 版权所有 (c) Microsoft Corporation Standard …

sql-server datatypes sql-server-2016 table-variable

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

无法针对具有屏蔽列的表创建索引视图

我正在尝试在引用带有屏蔽列的表(SQL Server 2016)的视图上创建索引。屏蔽列不是该表中唯一的列,并且未在视图中使用。

create unique clustered index [IX_Name]
on dbo.vw_ViewName(SomeUniqueId)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

无法创建视图“dbo.vw_ViewName”上的索引,因为该视图正在引用带有屏蔽列的表“dbo.TableName”。

在另一个未启用屏蔽的环境中,索引创建成功。

我浏览了大约四页的 Google 结果,但没有找到任何合理的错误描述。我很感激任何关于错误的知识转移以及为什么不可能创建这样的索引。

这是一些重现问题的 SQL:

drop view if exists dbo.vw_Aggregate
drop table if exists dbo.MainTable, dbo.SecondaryTable
go

create table dbo.MainTable
(
    MainTableId uniqueidentifier primary key,
    SomeExternalId uniqueidentifier,
    SecondaryTableId uniqueidentifier
)
go

create table dbo.SecondaryTable
(
    SecondaryTableId uniqueidentifier primary key,
    CreatedOn datetime,
    Amount decimal(19, 8),
    -- the below column produces error,
    -- if commented out - there is no error
    [Description] nvarchar(max) masked with (function = 'default()'),
    Dummy …
Run Code Online (Sandbox Code Playgroud)

sql-server materialized-view sql-server-2016 data-masking dynamic-data-masking

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

为什么我的标量 UDF 在两个不同(但极其相似)的服务器上表现如此不同?

最近,我正在解决一个奇怪的性能问题,该问题影响了应用程序的生产环境,但不影响任何较低的环境。我设法用这个查询以最简单的形式复制了这个问题:

SELECT product_id, dbo.TranslateStatusToActive(status_id) FROM prod_Products
Run Code Online (Sandbox Code Playgroud)

TranslateStatusToActive是一个非常简单的标量 UDF,它基本上只是连接给另一个表的值,并根据case语句返回 1 或 0 。我会发布代码,但它是供应商编写的功能,我今天对被起诉并不特别感兴趣。(是的,逻辑可以内联。是的,它解决了性能问题。是的,我们已经说服供应商实施更改。这不是我的问题。)

在生产中执行时,查询需要 10 到 20 秒才能返回结果。在开发中,相同的查询在不到 3 秒的时间内返回。执行计划几乎相同,除了显示 CPU 时间在生产中约为 15000 毫秒,其他地方为 3000 毫秒。

我怀疑存在一些环境差异,因此我设置了另一台服务器来尽可能地复制生产条件:我确保 CPU 的数量、分配给 SQL Server 的内存量以及特定的补丁级别 (13.0.0.1)。 4451) 相同。

我将生产数据库的副本恢复到这个新的沙箱服务器,令我惊讶的是,查询的执行速度与它在开发中的执行速度一样快。再一次,计划和数据是相同的,除了额外的 CPU 时间。执行计划中列出的等待类型相同,并且在每个环境中彼此相差几毫秒。

不知道接下来要做什么,我optimize for ad hoc workloads在生产服务器上启用了。这解决了性能问题!但是有一件事:其他环境都没有启用此设置。我一直在测试期间定期清除每个环境中的程序和系统缓存,所以我认为这不是更改设置导致重新编译的结果。

问题

  • 尽管有相同的计划和几乎相同的系统,但什么可能导致 UDF 在每个环境中运行如此不同?
  • 为什么需要optimize for ad hoc workloads启用生产环境才能与未启用它的其他环境一样好?
  • 是否有一些我没想到检查的设置可能会导致如此大的差异?

开发是共享的,而生产目前仅由该应用程序使用。第三个盒子的用法和生产的盒子几乎一样。我几乎清除了他们发出DBCC命令的每个缓存。开发环境经常用作培训系统,所以我相当确信这不是计划缓存问题。

与第三个框的唯一区别是没有连接到它的应用程序,但是在我在生产中测试该功能时几乎没有使用应用程序,所以区别在于,基于我在这种环境中工作的经验,微不足道。我唯一不能做的就是重启生产服务器,但微软的文档明确指出启用optimize for ad hoc workloads不会清除或影响任何现有计划,所以我看不出有什么区别。

performance sql-server functions sql-server-2016 query-performance

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

在不同的文件组上创建表分区,这是内存优化文件组的第一个边界

我们所有交易的 99% 都是针对最近一周的数据,一个 WEEK_SELECTOR 列描述了哪一周被描述。按周对我们的 10 亿+ 行表进行分区将是有益的,如果最近一周的 50 万左右行位于内存分区中,则更是如此。

在尝试将前一周拆分到我们的内存优化文件组时

CREATE PARTITION FUNCTION [TPF](int) AS RANGE RIGHT FOR VALUES (N'1700114')
CREATE PARTITION SCHEME [TPS] AS PARTITION [TPF] TO ([PRIMARY], [memtest])
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误:

Msg 7737, Level 16, State 1, Line 2
Filegroup memtest is of a different filegroup type than the first filegroup in partition scheme TPS
Run Code Online (Sandbox Code Playgroud)

我们现在假设分区的文件组必须是相同类型的,我们的计划是不可能的,但找不到文档说这是不可能的。

有人可以解释如何做到这一点,或者如果没有,请提供一个链接来说明?谢谢。

sql-server partitioning memory-optimized-tables sql-server-2016

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

使用数据库镜像的 SQL Server 迁移(滚动升级)

我计划将 SQL Server 2012 的 SQL Server 迁移到新硬件和新版本的 SQL Server (2016)。我试图找到停机时间最短的最佳解决方案。我在互联网上找到了一些理论上听起来很棒的建议。我说的是数据库镜像和滚动升级。但我也读到 MS 不推荐不同 SQL Server 版本之间的数据库镜像。所以现在我很困惑我应该还是不应该为此使用数据库镜像。有什么建议?以前有人试过这种方法吗?我也在考虑日志传送。

sql-server migration mirroring sql-server-2012 sql-server-2016

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

DBA 的 SqlDataAdapter 与 SqlDataReader

与开发人员谈论SqlDataAdaptervs的使用SqlDataReader并阅读此内容:https : //stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader

几乎没有解释从 切换SqlDataAdapter到对 SQL Server 的影响SqlDataReader

我知道SqlDataReader可能会增加连接对 SQL Server 开放的时间长度,这在有效使用池连接时肯定是一个问题。

除此之外,使用SqlDataReader而不是对 SQL Server 有什么影响SqlDataAdapter?有没有人观察到此更改对 SQL Server 的影响?

sql-server ado.net application-design data-tier-application sql-server-2016

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