标签: sql-server-2016

SQL Server 2016中TempDB默认文件数

注意到 SQL Server 2016 CTP2 的文档声明“默认情况下,安装程序添加与 CPU 数量或 8 一样多的 tempdb 文件,以较低者为准”。 https://msdn.microsoft.com/en-us/library/bb510411(v=sql.130).aspx

但我一直认为“正确”的比例应该是 CPU 核心数量的一半,对于 8 核心以下的机器来说。

这是否应该被视为微软的官方建议,甚至适用于2012/2014年?

sql-server configuration tempdb sql-server-2016

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

利用触发器动态改变分区函数

我想利用基于 a 的分区[TenantId](稍后与日期范围结合使用)。我不需要在 中手动插入最新值PARTITION FUNCTION,而是考虑创建一个TRIGGER AFTER INSERT来提取[TenantId]值并将ALTER PARTITION FUNCTION其添加到 中SPLIT RANGE。然而,我遇到了一个意想不到的错误:

无法对/使用表“租户”执行 ALTER PARTITION FUNCTION,因为该表是目标表或当前正在执行的触发器的级联操作的一部分。

首先,我创建PARTITION FUNCTION [PF_Tenant_Isolation]PARTITION SCHEME [PS_Tenant_Isolation]以便在 上进行分区[TenantId]

CREATE PARTITION FUNCTION [PF_Tenant_Isolation] ([int])
    AS RANGE LEFT FOR VALUES (1);
GO

CREATE PARTITION SCHEME [PS_Tenant_Isolation]
    AS PARTITION [PF_Tenant_Isolation]
    ALL TO ([Auth]);
GO
Run Code Online (Sandbox Code Playgroud)

接下来,我将[Tenant]根据新创建的分区方案创建表。

IF OBJECT_ID('[Auth].[Tenant]', 'U') IS NULL
BEGIN
    CREATE TABLE [Auth].[Tenant] (
        [TenantId] [int] IDENTITY(1,1)
        ,[TenantActive] [bit] …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server partitioning sql-server-2016

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

在 ssms 上编写索引脚本时不显示数据压缩

当我右键单击 SSMS 并选择编写创建索引的脚本时:

在此输入图像描述

我得到这个脚本,没有 data_compression:

USE [APCore]
GO

/****** Object:  Index [i_agencyId]    Script Date: 07/11/2019 12:18:13 ******/
CREATE UNIQUE NONCLUSTERED INDEX [i_agencyId] ON [agy].[agency]
(
    [agencyId] ASC
)
INCLUDE (   [countryCode]) WITH (PAD_INDEX = OFF, 
STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [NONCLUSTERED_INDEXES]
GO
Run Code Online (Sandbox Code Playgroud)

但是,当使用下面的查询专门检查数据压缩时

use APCore
go

SELECT i.name, p.data_compression_desc 
 FROM sys.partitions P
 INNER JOIN sys.indexes I ON I.object_id = …
Run Code Online (Sandbox Code Playgroud)

index sql-server ssms compression sql-server-2016

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

避免在重新启动期间 Microsoft SQL Server 停机

我们正在运行 SQL Server Standard 2016。有时需要安装 Microsoft 更新并重新启动服务器。

我们被要求研究在重启期间保持数据库可用。

因此,出于性能原因,我们不需要另一个数据库服务器,数据库应该“简单”在常规 Windows 更新的重新启动过程中可用。

在这种情况下,首选设置是什么?

sql-server high-availability sql-server-2016

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

错误严重性 16 针对 is_event_logged = 0 的事件发出警报

我的错误级别 16 警报设置如下:

USE [msdb]
GO

EXEC msdb.dbo.sp_add_alert @name=N'Error - Severity 16', 
        @message_id=0, 
        @severity=16, 
        @enabled=1, 
        @delay_between_responses=0, 
        @include_event_description_in=1, 
        @category_name=N'[Uncategorized]', 
        @job_id=N'00000000-0000-0000-0000-000000000000'
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么

SELECT 1/0;
Run Code Online (Sandbox Code Playgroud)

消息 8134,级别 16,状态 1,第 17 行 遇到除零错误。

没有引发错误,但是

BACKUP DATABASE MyDatabase TO DISK = 'C:\FolderThatDoesntexist'
Run Code Online (Sandbox Code Playgroud)

消息 3201,级别 16,状态 1,第 8 行 无法打开备份设备“C:\FolderThatDoesntexist”。操作系统错误 5(访问被拒绝。)。

消息 3013,级别 16,状态 1,第 8 行备份数据库异常终止。

曾是

这篇文章它引用的博客文章表明 SQL Server 只会针对记录的错误引发事件,这可以在sys.messages

所以我查询sys.messages了这些错误代码:

SELECT  severity,
        message_id,
        is_event_logged
FROM    sys.messages
WHERE   language_id = 1033 AND
        message_id IN (8134,3201,3013)
Run Code Online (Sandbox Code Playgroud)

但发现这三个都设置为0:

在此输入图像描述

为什么 3201 …

errors alerts raiserror sql-server-2016

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

SQL Server 2016 的内存利用率

我在 Windows Server 上运行 SQL Server 2016 企业版,内存为 128 GB。在安装过程中,我为 SQL 服务器分配了 124 GB,因为该服务器仅专用于 SQL,其余的留给操作系统。

现在,当 DML/DDL 查询运行或任何维护计划运行时,每个任务管理器的内存消耗飙升至 97%。但。PLE 保持良好状态(即 > 300 秒)并且未观察到性能问题。一旦作业和查询完成,SQL 在相当长一段时间内不会释放内存,我必须进行内存上限或等待一整天才能释放内存。

除了内存上限之外,还有什么方法可以让 SQL Server 释放内存以及为什么 SQL 无法在所有作业完成后立即释放内存。

sql-server memory sql-server-2016 enterprise-edition performance-tuning

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

区分大小写不起作用

我遇到一个问题,我不断从下面的查询中获取值“CtP_PETER_Fact”。它应该是区分大小写的 where 子句。我尝试了几种不同的方法:在选择中的“Where ObjectName”之后、正则表达式之后设置 COLLATE 语句,并使用排序规则创建列。我不断得到我意想不到的输出。也许是我的正则表达式有问题?我也对正则表达式进行了很多实验,但似乎无法让它发挥作用。

IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;


CREATE TABLE #nameFacts (


    objectname varchar(200) COLLATE SQL_Latin1_General_CP1_CS_AS,
    ObjectType varchar(40)

)


insert into #nameFacts (objectname, ObjectType)
values
 ('BPD_Inslap_Fact','Fact')
,('CTP_HENK_FACT','Fact')
,('CTP_PETER_Fact','Fact')
,('CTP_PETER_FACT','Fact')
,('CtP_PETER_Fact','Fact')
,('C0P_PETER_Fact','Fact')
,('C0P_PETER_FACT','FACT')


SELECT *
FROM #nameFacts
WHERE
ObjectName --COLLATE SQL_Latin1_General_CP1_CS_AS 
            LIKE '[A-Z0-9][A-Z][A-Z][_][A-Z][A-Z][A-Z][A-Z][A-Z][_][F][a][c][t]' --COLLATE SQL_Latin1_General_CP1_CS_AS


IF OBJECT_ID('tempdb..#nameFacts') IS NOT NULL
DROP TABLE #nameFacts;
Run Code Online (Sandbox Code Playgroud)

我不断收到下面的输出,我不希望得到值“CtP_PETER_Fact”。我使用的是 SQL Server 2016 SP2 CU 17。

输出

sql-server collation sql-server-2016 string-searching

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

添加“前 20 个”会大大减慢查询速度!

我有一个疑问:

select * from Aview where field=20
order by id desc
Run Code Online (Sandbox Code Playgroud)

这将在大约 1 秒内从视图中返回 2700 行。

在查询中添加“top 20”使 MSSQL 在 43 秒内返回!

这是一个很难重现的问题,重建统计数据可以修复该问题几天,但随后又回来了。

我使用 SQL 已经有几十年了,我从未见过添加“top”导致时间增加的情况。

查看执行计划,如果执行前 20 条,它似乎正在执行 9.6 亿行的惰性假脱机操作,但如果不执行,则不会执行。

sql-server execution-plan sql-server-2016 top table-spool

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

如何知道我是否在 azure 中?

我这里说的是sql server。

我可以连接到天蓝色。我还可以管理权限

但是在进行一些自动化操作时,我需要知道我是在天蓝色还是普通sql中。我怎样才能做到这一点?

我一直在使用@@版本。不过,据说并不准确

sql-server azure-sql-database environment-variables sql-server-2016 azure

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

在现有服务器上安装 SQL Server 2016 时,功能选择中缺少选项

我有一台 Windows 2008R2 64 位服务器,它已经安装了 2 个 SQL Server 2008R2 实例,并且工作正常。我想添加一个新实例,但对于 SQL Server 2016,同时将现有实例保留在 2008R2 中。当我进入功能选择时,没有安装数据库引擎和其他所有选项的选项。我得到的只是这个屏幕:

在此处输入图片说明

我无法弄清楚为什么“正常”功能选择没有出现,以便我可以添加一个新实例。有小费吗?谢谢

sql-server installation windows-server sql-server-2016

0
推荐指数
1
解决办法
3523
查看次数