标签: sql-server-2016

在内存数据库中删除文件和文件组

我有一个 SQL Server 2016 数据库,并且配置了内存表。我想删除此配置,然后删除该表。当我想删除该文件和文件组时,出现以下错误。

USE [InMem_Test]
GO
ALTER DATABASE [InMem_Test]  REMOVE FILE [InMemFile]
GO
ALTER DATABASE [InMem_Test] REMOVE FILEGROUP [InMemFileGroup]
GO
Run Code Online (Sandbox Code Playgroud)

消息 41802,级别 16,状态 1,第 3 行无法删除最后一个内存优化容器“InMemFile”。消息 5042,级别 16,状态 11,第 5 行无法删除文件组“InMemFileGroup”,因为它不为空。

sql-server in-memory-database sql-server-2016

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

SQL Server 2016 最大字节数/行

我们有一个包含超过 300 列的表的第三方数据库,在 SQL Server 2012 中,我们收到一个错误,提示我们超出了允许的最大 8060 字节。我想知道升级到 SQL Server 2016 是否会有所帮助。

SQL Server 2016 是否也有 8060 字节的限制?是否可以在 SQL Server 2016 中拥有更多列而不会遇到以下错误?

错误:已创建表“X”,但其最大行大小超过了允许的最大值 8060 字节。如果结果行超过大小限制,则对该表的 INSERT 或 UPDATE 将失败。

sql-server sql-server-2016

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

SQL Server 端到端加密选项

我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保正确加密和保护备份/备份位置。

我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且无法被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。

我知道使用 SSL 证书来加密与数据库的连接,尽管我很少配置它。我真的不知道这是否是端到端加密的合适选项,因为这肯定不能单独使用 SQL Server 进行配置?

在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?

我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。

我担心这个问题会被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置端到端的数据加密。

sql-server encryption sql-server-2014 sql-server-2016

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

由于数据倾斜,嵌套循环的估计值非常低

在 SQL Server 2016 SP2 上,我们有一个查询对嵌套循环运算符的估计非常低。由于估计值较低,此查询也会溢出到 tempdb。

如果我是正确的,SQL Server 2014+ 使用粗直方图估计来计算连接的估计行数。
但是当我执行查询时,SQL Server 使用密度向量来计算估计的行数。如果没有子句,
SQL Server 是否仅使用粗直方图估计where

通常,当我有一个包含倾斜数据的表时,我会使用过滤的统计数据来改进估计。但在这种情况下,这似乎不起作用。

有没有办法改进嵌套循环的估计?

使用以下代码可以重现数据:

create table MyTable
(
    id int identity,
    field varchar(50),
    constraint  pk_id primary  key clustered (id)
)
go

create table SkewedTable
(
    id int identity,
    startdate datetime,
    myTableId int,
    remark varchar(50),
    constraint  pk_id primary  key clustered (id)
)

set nocount on

insert into MyTable select top 1000 [name] from master..spt_values …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2016 cardinality-estimates query-performance

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

dbcc cleantable 批量大小说明

我有一个非常大的表,有 5 亿行和一个文本列,我将删除它。在我的开发环境中,我已经删除了列并开始了回收过程,但我不确定“DBCC CLEANTABLE (MyDb,'dbo.LargeTbl, 100000)”语句中的批处理大小实际上是什么。

我尝试将其设置为 5,希望它检查前 5 行并结束。“DBCC CLEANTABLE (MyDb,'dbo.LargeTbl, 5)”,耗时 28 小时。所以我恢复了数据库,将其设置为 100,000,花了 4 个小时

实际问题:批处理大小是否告诉 dbcc cleantable 一次要执行多少行,并一次连续运行 100K 直到它通过所有 500 百万行?或者一旦我运行了 100,000 行,我是否必须再次运行它直到我完成所有 5 亿行?

在我的第二次测试中,(运行 100K 一次)我能够回收 30GB。然后我对所有索引运行了索引重组并回收了额外的 60GB ..

sql-server dbcc sql-server-2016

5
推荐指数
2
解决办法
1206
查看次数

我们可以下载 SSRS 2017 以与 SQL Server 2016 一起使用吗?

我们正在使用我们组织的 SQL Server 2014 SP3 服务器。(他们也有 2016 年的 SQL Server,但我们选择跳过 2016 年,并在安装后移至下一个 SQL 服务器。)我们需要SSRS 2017 中的REST API 访问权限,因此我们想升级我们当前的 SSRS服务器到 SSRS 2017。

Windows服务器管理员刚刚为我们设置了一个新的/测试SSRS服务器,但他使用的是SSRS 2016,因为这是该组织拥有的最新媒体,他们的印象是我们只能为SQL服务器版本安装SSRS我们正在使用的。

我认为我们应该可以下载(免费)并安装 SSRS 2017,然后将其指向现有的 2016 SQL 服务器,这是否正确?或者我们是否需要购买 SQL Server 2017 的许可证才能使用 SSRS 2017?

(这似乎类似于SQL Server 2014 上的现有问题SSRS 2016,但该问题和答案似乎集中在 SQL Server Express 上,这不是我们的情况。)

sql-server ssrs upgrade sql-server-2016 ssrs-2017

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

跟踪准备好的 SQL 语句中的错误

我使用扩展事件来存储数据库错误,如下所示:

CREATE EVENT SESSION [ErrorCapture] 
ON SERVER 
ADD EVENT sqlserver.error_reported
(
    ACTION
    (
        sqlserver.client_hostname,
        sqlserver.database_id,
        sqlserver.sql_text,
        sqlserver.username
    )
    WHERE 
    (
        [severity] >= (11)
    )
) 
ADD TARGET package0.asynchronous_file_target
(
    SET filename='J:\ServerXmlOutput\ErrorCapture.xel'
)
WITH 
(
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=10 SECONDS,
    MAX_EVENT_SIZE=0 KB,
    MEMORY_PARTITION_MODE=NONE,
    TRACK_CAUSALITY=OFF,
    STARTUP_STATE=ON
);
Run Code Online (Sandbox Code Playgroud)

这有助于我轻松跟踪导致它们的应用程序。我有类似的东西来跟踪慢查询和其他特殊情况。但是,我从 SQL Server Profiles 中注意到 PHP/Laravel 应用程序不是直接发送一些语句,而是使用 RPC:Completed:它们看起来像准备好的语句,在运行时接收参数。如何扩展我的 ErrorCapture 以包含由通过 RPC:Completed 执行的语句引起的错误?

sql-server prepared-statement sql-server-2016

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

为什么 CASE 语句中的 JSON_QUERY 无法删除转义字符?

json_query如果在case语句中应用该函数,则似乎无法删除双引号字符 (") 的转义字符。

下面的示例代码。

declare @data nvarchar(max);
declare @debug int = 0;

set @data = '{"id":10}';

set @debug = 0;
select
    isjson(@data) as 'validateData',
    @data as 'unprocessedSourceData',
    json_query(@data) as 'processedSourceData',
    case when @debug = 1 then json_query(@data) else null end as 'conditionallyProcessedSourceData'
    for json path, without_array_wrapper ;

set @debug = 1;
select
    isjson(@data) as 'validateData',
    @data as 'unprocessedSourceData',
    json_query(@data) as 'processedSourceData',
    case when @debug = 1 then json_query(@data) else null end as 'conditionallyProcessedSourceData'
    for json path, without_array_wrapper …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql json sql-server-2016

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

Service Pack 是否具有累积更新中的所有更改

我一直认为 CU 中的所有更改都会汇总到下一个服务包中。我最近在查看SQL 2016 SP2SQL 2016 CU15 for SP1 的变化

我很惊讶地看到 SP2 中没有提到 SP1CU15 中的知识库。我错过了什么?

sql-server sql-server-2016 patching

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

SQL Server 2016 如何在两个不同的表上使用页锁死锁?

我正在使用 SQL Server 2016 并遇到一种情况,即通过页锁在两个不同的表上发生死锁。据我了解,数据库从不跨表共享页面,那么从表栏中选择怎么可能阻止表foo上的更新?特别是考虑到foo没有传入或传出的 FK(它是一个独立的、隔离的表)。

这是死锁xml:

<deadlock>
<victim-list>
    <victimProcess id="process200e2c2cca8"/>
</victim-list>
<process-list>
    <process id="process200e2c2cca8" taskpriority="0" logused="528" waitresource="PAGE: 7:1:463762 " waittime="2813" ownerId="232195085" transactionname="implicit_transaction" lasttranstarted="2019-06-18T01:57:05.067" XDES="0x201379a6430" lockMode="IX" schedulerid="2" kpid="2780" status="suspended" spid="77" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-06-18T01:57:05.267" lastbatchcompleted="2019-06-18T01:57:05.267" lastattention="1900-01-01T00:00:00.267" clientapp="Microsoft JDBC Driver for SQL Server" hostname="EC2AMAZ-U81HN6O" hostpid="0" loginname="mydb" isolationlevel="read committed (2)" xactid="232195085" currentdb="7" currentdbname="mydb" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058">
        <executionStack>
            <frame procname="adhoc" line="1" stmtstart="684" stmtend="1618" sqlhandle="0x0200000068ff5415175911deba600fac1e2197ddfe8b65890000000000000000000000000000000000000000">  unknown    </frame>
            <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">  unknown    </frame>
        </executionStack>
        <inputbuf>  update foo …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock sql-server-2016

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