标签: sql-server

替换基于 RANGE LEFT 的分区方案的最后一个分区片中使用的文件组

我有一个date使用 RANGE LEFT的简单的基于分区函数...

CREATE PARTITION FUNCTION [PF_YEAR_LEFT](date) AS RANGE LEFT 
    FOR VALUES (N'1992-12-31', N'1993-12-31', N'1994-12-31')
GO

CREATE PARTITION SCHEME [PS_YEAR_LEFT] AS PARTITION [PF_YEAR_LEFT] 
    TO ([DATA_1992], [DATA_1993], [DATA_1994], [DATA_1995])
GO
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,文件组 [DATA_1995] 将保留超出最后一个分区边界的值。因此,如果我选择添加新文件组并以这种方式拆分附加边界的功能......

ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1995]
GO

ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1995-12-31')
GO

ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1996]
GO

ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1996-12-31')
GO
Run Code Online (Sandbox Code Playgroud)

对于超出最高边界的值,文件组 [DATA_1995] 保留在最后一个分区位置。

在最初创建分区方案后是否可以更改最后一个文件组,或者是创建新分区方案并将使用旧方案的所有索引重建为新方案的唯一方法?

sql-server partitioning

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

一台服务器中的多个数据库问题

我们公司有 5 个不同的数据库。多个数据库中没有一个涉及或利用跨数据库连接。我们有充足的资源和预算。

我们公司正在争论:

  • 1 个服务器实例上的 5 个数据库,

  • 或 5 个不同服务器上的 5 个数据库。

问题:如果我们将所有内容都放在一台服务器上,可能会出现哪些具体问题、障碍问题?我的背景不是 DBA,所以想学习可以与团队讨论的示例。

背景:

公司 1 个服务器实例的论据:我们有带有故障转移群集的“资源调控器”和“AlwaysOn 可用性组”。资源调控器将处理数据库之间的内存、CPU、io 工作负载。因此,与 AlwaysOn DR 一起,它可以处理失控的查询、糟糕的设计、内存问题。

每个数据库 100GB,关键公司信息,最少 5000 万行

我们每秒处理 300 笔交易

RTO = 10 分钟

performance database-design sql-server availability-groups performance-tuning

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

锁定在旧的 2008R2 数据库之外

我们刚刚发现了另一台带有数据库的服务器。数据库归 SQL 帐户所有SA,具有publicsysadmin角色。另一个登录名是BUILTIN\Users,只有public。我只能通过这个连接。SAdisabled,即使不是,我们也可能不知道密码。

问题:有什么方法可以使用enable SA或创建另一个 sql 登录sysadmin

security sql-server sql-server-2008-r2

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

如何插入到表变量中?

我想在表变量中存储 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 JOIN 不起作用

我不确定为什么下面的连接查询没有返回任何结果。

SELECT * FROM table1 JOIN table2  ON table1.fieldid = table2.idfield 
Run Code Online (Sandbox Code Playgroud)

以下 2 个查询返回结果,所以当我可以清楚地看到两个表具有共同的连接字段值时,我不确定为什么连接不会选择任何行。

SELECT *  FROM table1 WHERE fieldid =  900399530  (returns rows)
SELECT *  FROM table2 WHERE idfield =  900399530  (returns rows)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

以下是 2 列的数据类型:

fieldid [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

idfield [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

join sql-server

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

当 LDF 文件很大时,fn_dblog 不显示记录

我需要在事务日志文件中查找一些特定事务,因此我使用 fn_dblog 函数。但该函数只返回几行。同时,我的数据库的 LDF 文件至少有几 GB。

我知道 fn_dblog 函数仅搜索日志的活动部分:

  • 但是,这是什么意思?

  • 事务日志的一部分何时变得不活动?

  • 以及如何搜索不活动的部分?

sql-server transaction-log

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

SQL Server 2008-R2 数据库上的大量短期阻塞

寻求专家就短期封锁提供建议,我们现在已经看到了近一周的时间。

DB 是 15 TB,而我们有很多阻塞的这个表 B - 几乎有 300 个是 2 TB。

在使用 sp_whoisactive 时,我看到查询在 3-4 秒的较短部分内被阻塞,有些在 9-10 秒内被阻塞,但由于这些查询几乎一整天都在连接超过 2-3 千个,这会导致应用程序中出现大量错误。

故障排除:

  • 更新了 NC 指数的统计数据,我们只有一个 NC 和一个 C 指数。
  • 通过哨兵检查我们可以看到,这些被阻塞的语句都是上面提到的那个表的插入语句。

以下是一些指标:

  1. 等待过去 3-4 小时的统计数据,直到阻塞为止
    • PAGELATCH_EX --> 51.1 % 总等待 730 513 153.5
    • PAGELATCH_SH --> 23 % 总等待 343 538 769.7
    • THREADPOOL --> 18 % 总等待时间 257 222 894.4
  2. 平均批次/秒:8612.6
  3. CPU 和内存 --> 远低于阈值,因为我们有 256 个逻辑处理器和 612 GB RAM
  4. 检查点页数/秒 --> 1706
  5. 懒惰写入 --> 0
  6. 日志刷新/秒 1844.4
  7. 事务/秒 9074

结果根据 david …

sql-server sql-server-2008-r2 blocking waits

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

SQL Server 权限检查何时完成?

当用户要执行一个复杂的存储过程时,其中有相当多的表/视图甚至另一个存储过程。

我的问题是:

SQL server 在生成执行计划之前,会检查用户的权限吗?

否则,如果用户首先没有EXEC此存储过程的权限,则生成执行计划本身就是一种开销成本。

如果是,在我看来,SQL Server 引擎没有任何可消耗的东西,即没有安全标识符(如存储过程本身、存储过程中的表等),SQL Server 引擎可以使用它来检查用户权限. 至少在解析完成之前,不会生成所有这些安全标识符。

那么从执行存储过程的生命周期角度来看,SQL Server 权限检查何时开始?

sql-server permissions

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

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

我正在尝试在引用带有屏蔽列的表(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
查看次数

有没有人有一个存储过程来截断时态表?

有没有人知道或知道将执行通用临时表操作以便历史记录和主表都被截断的存储过程?

您必须更改它以设置 system_versioning = off,然后删除历史表,然后截断主表,然后在主表上重新启用版本控制。我打算构建一个通用存储过程来为传递给它的任何数据库/模式/表名称执行此操作,但如果有人已经拥有它,肯定会很好。如果可以避免的话,我从不喜欢重新发明轮子。

sql-server stored-procedures temporal-tables

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