我有一个 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”,因为它不为空。
我们有一个包含超过 300 列的表的第三方数据库,在 SQL Server 2012 中,我们收到一个错误,提示我们超出了允许的最大 8060 字节。我想知道升级到 SQL Server 2016 是否会有所帮助。
SQL Server 2016 是否也有 8060 字节的限制?是否可以在 SQL Server 2016 中拥有更多列而不会遇到以下错误?
错误:已创建表“X”,但其最大行大小超过了允许的最大值 8060 字节。如果结果行超过大小限制,则对该表的 INSERT 或 UPDATE 将失败。
我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保正确加密和保护备份/备份位置。
我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且无法被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。
我知道使用 SSL 证书来加密与数据库的连接,尽管我很少配置它。我真的不知道这是否是端到端加密的合适选项,因为这肯定不能单独使用 SQL Server 进行配置?
在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?
我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。
我担心这个问题会被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置端到端的数据加密。
在 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 亿行和一个文本列,我将删除它。在我的开发环境中,我已经删除了列并开始了回收过程,但我不确定“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 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 上,这不是我们的情况。)
我使用扩展事件来存储数据库错误,如下所示:
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 执行的语句引起的错误?
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) 我一直认为 CU 中的所有更改都会汇总到下一个服务包中。我最近在查看SQL 2016 SP2和SQL 2016 CU15 for SP1 的变化。
我很惊讶地看到 SP2 中没有提到 SP1CU15 中的知识库。我错过了什么?
我正在使用 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 ×10
sql-server-2016 ×10
dbcc ×1
deadlock ×1
encryption ×1
json ×1
patching ×1
performance ×1
ssrs ×1
ssrs-2017 ×1
t-sql ×1
upgrade ×1