标签: sql-server

如何在此日志记录表上优化此查询?

我正在尝试为记录事件的表格优化表格布局。

日志表包含三个相关的列:Timestamp, ItemId, LocationId
每行表示在给定的time,item已经在某个 看到了某个location。

2017-01-01 10:00    Item A has been seen at location 1
2017-01-01 10:01    Item A has been seen at location 1
2017-01-01 11:00    Item B has been seen at location 1
2017-01-01 11:01    Item B has been seen at location 2
2017-01-01 11:02    Item A has been seen at location 2
2017-01-01 11:03    Item B has been seen at location 1
Run Code Online (Sandbox Code Playgroud)

大约有 100 个不同的位置、每天 20.000 个新项目、每天一百万个事件和 14 天的日志。 …

performance database-design sql-server sql-server-2012 denormalization

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

AlwaysOn DDL 和架构更改

任何人都可以讨论如何逐步将 DDL 架构更改与 Always On Availability Groups 准确合并?我们在一个状态有一个主副本,在另一个状态位置有一个辅助副本。辅助副本将是只读异步的。

如果我要进行架构更改,包括任何种类...

例子

  1. 添加/修改/删除表上的列
  2. 添加/修改/删除表外键约束
  3. 添加/修改/删除聚集和非聚集索引
  4. 添加/修改/删除默认约束
  5. 添加/修改/删除存储过程和函数
  6. 添加/修改/删除触发器
  7. 添加/修改/删除视图

... 我需要什么才能确保主副本 DDL 顺利流向次副本?

我的假设

次要副本上的读取查询不会影响主 DML(数据修改、插入、更新、删除),并且会顺利进行,因为次要副本设置为读取快照隔离。

次要副本上的读取查询会影响主 DDL(模式更改、表结构更改),因为读取查询会放置模式锁。

解决方案

停止对从副本的所有查询,进行主副本DDL,然后DDL变化会流向从副本。

  • 在此过程中是否还需要其他任何步骤?
  • 还有什么需要认真做的?
  • 关闭辅助副本上的所有读取查询的最佳方法是什么?杀死/关闭 Spid,立即使用回滚设置 SINGLE_USER?

此示例仅用于辅助只读异步。如果辅助副本是只读同步的怎么办?


其他背景:Primary Replica是OLTP,日夜事务。我们公司有一个部署变更管理时间窗口。假设我早上只有 1 小时来执行架构和 DDL 更改。我不能等待长时间的查询完成。在异步模式下,日志重做永远不会是最新的。

我记得读过 Microsoft 文章Active Secondary:Readable Secondary Replicas (Always On Availability Groups)

sql-server availability-groups

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

检索表列中选择查询的值

对于以下查询,我需要替代游标/while 循环:

我们有一个表格,如下面的屏幕截图所示,包含以下列:ID, Module, Query。该表包含近 100,000 条记录。目前,我们正在使用游标和 while 循环将选择查询的输出插入到临时表中,我们将根据ID.

在此处输入图片说明

我需要帮助编写一个查询,该查询将Query列作为输入并像函数一样将结果作为值提供。

我试图创建其执行动态SQL功能,但它失败,因为EXEC并sp_executesql没有一个函数中允许的。尝试使用存储过程也不起作用,因为我们只能将一个查询作为参数从该表中传递以获取作为值的输出。

每个查询返回一个值(一列,一行)。不同的查询可能返回不同数据类型的值;所有都应转换为nvarchar.

任何解决方案将不胜感激。

sql-server

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

SQL Server 排序规则不匹配会减少应用程序可见的数据量吗?

我们的一台服务器最近死了,它用错误的排序规则重建,所以它看起来如下:

  • SQL Server - SQL_Latin1_General_CP1_CI_AS
  • 主数据库 - SQL_Latin1_General_CP1_CI_AS
  • 模型数据库 - SQL_Latin1_General_CP1_CI_AI
  • msdb 数据库 - SQL_Latin1_General_CP1_CI_AI
  • 临时数据库 - SQL_Latin1_General_CP1_CI_AS
  • 每个用户数据库 - SQL_Latin1_General_CP1_CI_AI

数据库是可访问的,我的问题是:用户通过应用程序可见的数据是否会因为排序规则不匹配而受到限制?一些用户表示,即使数据库是从最近的备份中恢复的,他们也认为自己丢失了大量数据。

它是 Windows Server 2012 R2 上的 SQL Server 2008 R2 SP3(仅由于服务包而兼容)

谢谢

sql-server collation

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

识别消耗资源最多的登录\用户

有没有一种方法可以识别执行查询时实际消耗大量资源的顶级数据库用户?

sql-server-2008 sql-server resource-governor

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

授予对每个数据库中的系统“sys”表的最小选择权限

我们的开发团队创建了一些 SSRS 报告,这些报告仅从每个数据库中检索元数据(非“真实”数据)。我试图将运行这些报告的服务帐户锁定到所需的最低权限。

查询仅从每个数据库中的系统表中进行选择,例如:

 sys.tables
 sys.extended_properties
 SYS.objects
 SYS.schemas
 sys.dm_db_partition_stats
 sys.indexes
Run Code Online (Sandbox Code Playgroud)

我认为以下会做到这一点,但没有这样的运气。

 GRANT VIEW ANY DATABASE TO [DOMAIN\LOGIN]
 GRANT VIEW SERVER STATE TO [DOMAIN\LOGIN]
 GRANT VIEW DATABASE STATE TO [DOMAIN\LOGIN]
Run Code Online (Sandbox Code Playgroud)

查询系统表给出错误:

 The server principal "DOMAIN\LOGIN" is not able to access the database "DATABASENAME" under the current security context.
Run Code Online (Sandbox Code Playgroud)

除了为每个数据库的登录创建一个用户然后显式授予系统表的权限之外,我似乎找不到其他方法来解决这个问题。这对所有未来的数据库提出了一系列新的挑战。我是否遗漏了什么,或者没有简单的方法可以在不授予“系统管理员”服务器级角色的情况下向所有数据库授予此访问权限?

security sql-server permissions logins system-tables

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

授予非系统管理员更改最大内存设置 SQL Server 的能力

我收到了创建存储过程的请求,该存储过程将允许用户(有权访问数据库服务器)更改 SQL Server 的max server memory (MB). 这不是困难的部分。

另一个要求是该用户应该能够更改这个唯一的参数,max server memory (MB)而不能更改其他任何参数。我想知道的是,如果可能的话。

我确实意识到,为了能够执行sp_configure和运行RECONFIGURE,所需的最低权限是ALTER SETTINGS. 并且提供ALTER SETTINGS会破坏存储过程的目的(它被设计为只运行exec sys.sp_configure 'max server memory (MB)', @TheReqMemVal)以及 的最小和最大允许值max server memory (MB)。

在阅读了一些评论后,我想补充一点,如果响应中包含可能存在的安全隐患,我们将不胜感激。

sql-server stored-procedures permissions sql-server-2012 sql-server-2014

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

检查 SQL Server 数据库上的约束对于数字范围和年份和月份是否可取?

我正忙于设计一个网站,我需要在我的 SQL Server 数据库中包含以下列:

  1. 分配(从 0 到 100 的值)
  2. 年(仅)
  3. 月(仅)

我已经阅读了有关检查约束的内容,我想知道以下是否可行/以及它是否是上述问题的最佳解决方案:

allocation  | tinyint | not null | check constraint: 0-100
year        | date    | not null | check constraint: year
month       | date    | not null | check constraint: month
Run Code Online (Sandbox Code Playgroud)

我也会从我的前端进行验证,但我听说在适当的地方设计带有这些限制的数据库是一种很好的做法。

sql-server check-constraints

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

如何将数据从 SQL Server 审计文件加载到表中?

我在 SQL Server 2008 R2 中启用了审计来监视 DML 和 DDL 操作。

有没有办法将 SQLAudit 文件加载到数据库?或者任何其他方法将审计详细信息直接自动加载到数据库?

sql-server audit sql-server-2008-r2

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

sp_blitz 执行需要多长时间?

我正在尝试sp_blitz在 SQL Server 2014上运行,但似乎需要很长时间。正常长度是多少?

我们只有大约 30 个数据库。一个是 300GB,但它持续了 15 分钟。

sql-server sql-server-2014 sp-blitz

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