我有一个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] 保留在最后一个分区位置。
在最初创建分区方案后是否可以更改最后一个文件组,或者是创建新分区方案并将使用旧方案的所有索引重建为新方案的唯一方法?
我们公司有 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
我们刚刚发现了另一台带有数据库的服务器。数据库归 SQL 帐户所有SA,具有public和sysadmin角色。另一个登录名是BUILTIN\Users,只有public。我只能通过这个连接。SA是disabled,即使不是,我们也可能不知道密码。
问题:有什么方法可以使用enable SA或创建另一个 sql 登录sysadmin?
我想在表变量中存储 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 …
我不确定为什么下面的连接查询没有返回任何结果。
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
我需要在事务日志文件中查找一些特定事务,因此我使用 fn_dblog 函数。但该函数只返回几行。同时,我的数据库的 LDF 文件至少有几 GB。
我知道 fn_dblog 函数仅搜索日志的活动部分:
但是,这是什么意思?
事务日志的一部分何时变得不活动?
以及如何搜索不活动的部分?
寻求专家就短期封锁提供建议,我们现在已经看到了近一周的时间。
DB 是 15 TB,而我们有很多阻塞的这个表 B - 几乎有 300 个是 2 TB。
在使用 sp_whoisactive 时,我看到查询在 3-4 秒的较短部分内被阻塞,有些在 9-10 秒内被阻塞,但由于这些查询几乎一整天都在连接超过 2-3 千个,这会导致应用程序中出现大量错误。
故障排除:
以下是一些指标:
结果根据 david …
当用户要执行一个复杂的存储过程时,其中有相当多的表/视图甚至另一个存储过程。
我的问题是:
SQL server 在生成执行计划之前,会检查用户的权限吗?
否则,如果用户首先没有EXEC此存储过程的权限,则生成执行计划本身就是一种开销成本。
如果是,在我看来,SQL Server 引擎没有任何可消耗的东西,即没有安全标识符(如存储过程本身、存储过程中的表等),SQL Server 引擎可以使用它来检查用户权限. 至少在解析完成之前,不会生成所有这些安全标识符。
那么从执行存储过程的生命周期角度来看,SQL Server 权限检查何时开始?
我正在尝试在引用带有屏蔽列的表(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
有没有人知道或知道将执行通用临时表操作以便历史记录和主表都被截断的存储过程?
您必须更改它以设置 system_versioning = off,然后删除历史表,然后截断主表,然后在主表上重新启用版本控制。我打算构建一个通用存储过程来为传递给它的任何数据库/模式/表名称执行此操作,但如果有人已经拥有它,肯定会很好。如果可以避免的话,我从不喜欢重新发明轮子。
sql-server ×10
blocking ×1
data-masking ×1
datatypes ×1
join ×1
partitioning ×1
performance ×1
permissions ×1
security ×1
waits ×1