在 SQL Server 中,锁通常从行或页 -> 表升级。从 SQL Server 2008 开始,添加了一个新级别的锁升级 -分区级别。
但是,这不会为分区表自动启用 - 默认情况下,该表设置为跳过分区锁定并从行或页 -> 表开始。为什么会这样?有什么原因我不想把我所有的表从 切换TABLE到AUTO以便它们将锁升级到分区级别而不是表级别?
由于默认值仍然是TABLE,我认为AUTO.
我正在开发一个包含许多复杂的 SQL 查询的应用程序。我想尽可能长时间地将查询计划保留在过程缓存中。为了防止从过程缓存中丢弃查询计划(由于内存压力),我想为过程缓存分配足够的内存。根据这个只有10%在4GB-64GB范围“看得见的目标”存储器被用于过程缓存; 我希望这个比率更高。
有没有办法控制过程缓存的大小?SQL Server 2008 或 2012;也许一些企业版功能?
此外,如果我明确设置了 min. SQL Server 的内存?
(我知道KEEP PLAN / KEEPFIXED PLAN提示;我也知道通过临时查询准备语句的优势,所以请不要推荐这些可能性。我特别想知道控制过程缓存尺寸。)
sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012
我在做这个
SELECT * INTO table1 FROM Table0
Run Code Online (Sandbox Code Playgroud)
我在 datetime 列上出现算术溢出(错误转换为 smalldatetime),但是创建的目标模式有一个 datetime 列而不是 smalldatetime 列。
我刚刚为一个相当大的数据库(1.3 TB)编写了一个备份语句,我一直在使用一个更小的数据库(10 GB + 10 GB 日志文件)对其进行测试。备份写入三个目的地。在测试期间,我注意到当备份运行时,每个备份文件的大小约为 1.2 GB,但是一旦备份过程完成,文件就会缩小到 600 MB 以下。
我有兴趣了解:
这是我正在使用的备份语句:
BACKUP DATABASE @DatabaseName
TO DISK = @backupMedia1,
DISK = @backupMedia2,
DISK = @backupMedia3
WITH COMPRESSION, RETAINDAYS = 0, NOFORMAT, INIT, NOSKIP, NAME = @DatabaseName
Run Code Online (Sandbox Code Playgroud) 我当前的项目将不断向 sql 服务器发送查询,它可能会使用 100% 的内存或 CPU。
如何在存储过程中检查服务器是否接近充分利用,以便我可以决定是否执行查询或将某些设置保存在表中,以便以下查询可以知道工作负载很高并决定要做什么
如果没有,如何防止 SQL Server 达到充分利用?
有关案例的更多信息:现在我知道我们当前的测试服务器每秒可以处理 40-50 个查询(一个特定的存储过程)。现在我们将决定每秒向服务器发送多少查询。如果我们设置的数量比预期的还要高 1,从长远来看,查询最终会填满虚拟内存,客户端将不得不定期重新启动他们的 sql server 实例。
预期结果(赏金猎人):
@memory_usage float, @cpu_usage float; /* in percentage */
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法。谢谢。
一位潜在客户想要评估我们的存储系统。他们在发送给我们的虚拟测试机上运行带有 4KB NTFS 的 Windows 2008R2 x64。他们似乎并不知道这一点,所以我认为假设环境没有被调整是合理的。测试是插入、索引、搜索、删除。我不知道工具。
鉴于 Windows NTFS 块大小为 4KB,SQL 写入 64KB 块 - 假设 SAN 上的块大小为 64k 是一个不错的选择是否安全?
它们运行 SQL Server 2008,也许是标准的。
我有四台相同的服务器 2 用于生产,另外两台是演示机器/紧急故障切换盒。更强大的机器是一个 16 核 127 gig 的 Ram 托管我们的数据仓库和我们的 OLTP 数据库。功能较弱的盒子是我们用于 ETL 和数据存储的 8 核 98 gig ram 盒子。我遇到的问题是在生产服务器上集成服务需要大量时间来执行包验证。对于在 6 秒内返回的查询,完成包验证需要 40 秒。如您所见,这是一个相当简单的包。

请记住,这只是我用作示例的包,我的所有包都有相同的问题,尽管有些程度较低。当我运行它时,验证部分平均需要 40 秒。

为了更好地测试这一点,我在姊妹机器上运行了完全相同的包,它运行所有与该机器相同的 SQL 作业。只有执行前验证需要 0 秒,查询需要 4 到 6 秒。
为了进一步测试这一点,我对两个 SQL 服务器实例运行了查询。
SELECT '{' + CAST(Store_Id AS CHAR(36)) + '}' AS Store_Id
,'{' + CAST(ItemGroupDetail_Id AS CHAR(36)) + '}' AS ItemGroupDetail_Id
,ItemGroupType_Id
,'{' + CAST(Concept_Id AS CHAR(36)) + '}' AS Concept_Id
,'{' + CAST(Company_Id AS CHAR(36)) + '}' AS Company_Id
,'{' + CAST(ItemGroup_Id …Run Code Online (Sandbox Code Playgroud) 如果不安装 SQL Server 媒体 2008 和 2012,我们如何知道媒体属于某个版本(如 Developer、Standard 或 Enterprise)?
我正在学习在 SQL Server 2008 中使用 CDC,我读过 LSN 总是递增并且基于时间戳,所以为什么需要 LSN,如果它是根据时间戳计算的,可以用作所做更改的增量序列 ID。我相信 lsn 还会有其他一些用途。
请帮忙,因为这个问题让我发疯......
Tempdb有四个数据文件和一个日志文件。它们都位于同一个专用驱动器上。
当我tempdb在 SQL Server Management Studio (SSMS) 中右键单击以查看属性 --> 常规...我看到“大小”为 ~65000 MB,“可用空间”为 ~64000 MB。但是,当我尝试通过 GUI 缩小文件时,我看到“当前分配的空间”没有改变并且仍然显示初始大小。
这也是“可用空间”显示为负数的地方。到目前为止,我找到的唯一解决方法是重新启动 SQL Server 以刷新tempdb,但我不能继续这样做。
有没有人遇到过这个问题,并知道它的根本原因/永久解决方案吗?
sql-server-2008 ×10
sql-server ×8
backup ×1
hardware ×1
olap ×1
partitioning ×1
rdbms ×1
san ×1
ssis ×1
tempdb ×1