我很迷惑。AFAIK SQL Server 2005 Express 的数据库 数据大小限制为 4GB 。但是我有以下结果sp_spaceused:

space left直到我达到限制吗?index_size在极限算?我有点好奇,具有 128 GB 数据库 RAM 大小的 SQL 2012 企业版之一是 370 GB 并且还在增长,锁 (OBJECTSTORE_LOCK_Manager) 内存管理员使用的内存量显示为 7466016 KB。我也可以通过查看性能计数器来确认select * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)'
但是,当我运行查询时
select count(*) from sys.dm_tran_locks
Run Code Online (Sandbox Code Playgroud)
它只显示了 16 个锁。那么什么是使用超过 7 GB 的锁。有办法查到吗?
这是否意味着一旦分配了锁的内存,SQL 还没有释放它?在过去的 1 小时内,我没有看到锁计数超过 500,但锁内存保持不变。
最大服务器内存为 106 GB,我们没有在内存中使用锁定页面,我在过去 12 小时内没有看到任何内存压力或错误日志中的任何错误。可用 MBytes 计数器显示超过 15 GB 的可用内存。
活动监视器始终显示 0 个等待任务,因此显然没有阻塞。
考虑到 SQL 服务器锁占用大约 100 字节的内存,7 GB 是大量内存,并试图找出谁在使用它。
我通过锁计数运行服务器仪表板报告最高事务,它说“当前系统上没有运行锁定事务。但是,锁内存仍然显示如上所述。数据库在夜间最忙。
sql-server-2008 sql-server memory sql-server-2008-r2 sql-server-2012
我使用 SQL Server 2008 R2 已经有一段时间了,它运行良好。现在我需要使用 SQL Server 2012。这会影响我现有的数据库吗?在运行 SQL Server 2008 R2 的计算机上安装 SQL Server 2012 涉及多少风险?
有什么地方可以查找 SQL Server 2012 中的失败事务吗?
我们的用户想要从生产中刷新 QA 数据库,但想要两个表(我们称它们为 T1 和 T2)来保留原始 QA 数据。因此,我将两个表从 QA (DB1) 复制到临时 QA 数据库 (DB2)。然后从生产中刷新 DB1。刷新后,我想将 T1 和 T2 数据从 DB2 覆盖到 DB1,以便它可以包含预刷新 QA 值。
我做了以下工作:
用
select *
INTO D1.dbo.T1
FROM D2.dbo.T1
Run Code Online (Sandbox Code Playgroud)然后从 prod 刷新 D1
然后使用以下步骤截断 T1:
SELECT COUNT(*) AS BeforeTruncateCount
FROM T1;
GO
TRUNCATE TABLE T1;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM T1;
GO
Run Code Online (Sandbox Code Playgroud)现在,当我返回将数据从 D2.T1 复制到 D1.T1 时,我收到错误消息,即数据库中已存在名为 T1 的对象。
我应该放下桌子并复制吗?
或者整个过程有没有更好的方法?
我正在维护一个 SQL Server 2005 数据库,该数据库承载大约 2.9Tb 的数据(2 x 1.45Tb - 我有一个 RAW 架构和一个 ANALYSIS 架构,因此基本上是摄取的数据的两个副本)。恢复模型很简单,.ldf大小为 6Gb。
无论出于何种原因,.mdf都是 7.5Tb。现在,分析表中可能只有 2-3 个额外的列,并且没有多少NVARCHAR(MAX)列,根据我的理解(可能有错误理解 - 如果我错了,请纠正我)可能会导致额外的空间分配。那是在刚刚缩小数据库之后 - 在此之前它约为 9Tb。有什么想法吗?
并且,如果您有其他问题,请告诉我 - 我对数据库管理和优化工作非常陌生(我通常不做这方面的工作:))。
非常感谢!
安德里亚
我被要求为数据库中的所有表授予SELECT,INSERT和UPDATE给定用户。我最终将用户添加到db_datareader,并给予他们INSERT与UPDATE在数据库级别。
但这让我想到,SELECT在数据库级别授予用户权限或将它们添加到db_datareader角色之间有什么区别(如果有)?是否有任何一种或另一种最佳实践?
我正在研究数据仓库。我有多达 200M 记录的表。其中一些表有大约 20 多个索引(我无法提供最初创建它们的原因)。这使得维护这些索引的工作变得过于痛苦,并且在性能和运行时都会直接影响 DWH 导入工作。
如何在每个表上找到最少使用的索引?(为了摆脱它们)
在检查性能问题时,我看到 CXPACKETS 的大量涌入,这表明我可能需要查看并行性和 MAXDOP 的成本阈值。
在对 MAXDOP 进行任何重大更改之前,我遵循了许多其他人的建议,包括 @mrdenny 在对 SQL Server 2008 的 CXPACKET 等待性能调整的回答中的建议和@aron-Bertrand 在处理 CXPACKET 等待中的回答- 设置成本阈值对于并行性。我已添加到维护中,以每晚完全更新统计数据。感觉这是一个明智的举动。
但是,对成本阈值进行修改仍然让我烦恼。
并行性的成本阈值应该在什么时候改变?有没有人有一个例子来说明(在检查了他们的查询和工作量的成本之后)他们对这个成本进行了更改?
如果这是在上一个问题中已回答的问题,请道歉。
谢谢!
我有一个在构建过程中自动发布的 SQL Server Data Tools (VS2012) 项目。一列最近从 更新int到decimal(18,4)。由于此更改,发布失败并显示错误
(49,1): SQL72014: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line 6 检测到行。架构更新正在终止,因为可能会发生数据丢失。(44,0): SQL72045: 脚本执行错误。执行的脚本: /* The type for column QuantityReceived in table [dbo].[Reconciliation_Receiving] 当前为 INT NOT NULL 但正在更改为 DECIMAL (18, 4) NOT NULL。可能会发生数据丢失。*/
IF EXISTS (select top 1 1 from [dbo].[Reconciliation_Receiving]) RAISERROR(检测到 N'Rows。由于可能发生数据丢失,模式更新正在终止。', 16, 127) WITH NOWAIT 批处理时发生错误被处决。
我明白为什么我会收到该错误,并且我知道可以通过禁用“如果可能发生数据丢失则阻止增量部署”标志来解决它。但是,非常强烈反对禁用该功能,因此它不会是一个可接受的解决方案。
我能想到的唯一其他解决方案是执行以下操作:
不过,这似乎非常笨拙且效率低下。
有更好的选择吗?
sql-server ×10
installation ×1
limits ×1
memory ×1
performance ×1
permissions ×1
role ×1
security ×1
shrink ×1
ssdt ×1
ssms ×1
transaction ×1