我使用的是 SQL Server 2008 R2,当我查看 SQL Server 的服务时,我看到有两种不同的服务具有不同的实例。
SQLEXPRESS MSSQLSERVER谁能帮我弄清楚#1 和#2 之间的区别?
提前致谢
以下查询需要 497 ms 才能运行,如果我删除 AND 部分之后只需要 320 ms。有没有办法加快这个速度?我在“messages”表上的唯一索引是“messages_id”上的PK。'hidden' 字段是一个位字段(非空),'message_type_id' 是一个 int 字段(非空),而 message_id 是一个 int 字段(PK)。
SELECT COUNT(*)
FROM messages
WHERE message_type_id = 1
AND (hidden = 0 OR message_id = @message_id)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
为什么主键约束默认在 PK 列上创建聚集索引?
我们可以创建一个有主键但没有聚集索引的表吗?我需要 PK 约束来维护列上的唯一值 + 非空,但我不想要聚集索引,因为该表中有太多插入。
我读过聚集索引对插入有性能影响。
我终于找到了查询的逻辑,现在我需要加快速度......如果可能的话(它运行 40 分钟 +/-)。它位于两张桌子上,一张只有几百行 ( tblTradingDays),另一张有超过一百万行 ( tblDailySMA)。它返回 4800 万行。
我的基本逻辑是:我为交易品种、交易日期和周期值的每个组合返回一行,创建一个“慢v 快”周期对。所以在原始表中,有一个符号、一个交易日期、一个周期 (5,10,20,...) 和该组合的实际值。我想比较所有期间组合的值(期间 p1 = 期间 p2 除外)。我正在对要用于进一步处理的记录进行编号。希望这是有道理的。
我尝试了连接和谓词中涉及的字段的各种索引和组合。在估计的执行计划中,看起来排序是最昂贵的操作。tblDailySMA尽管我添加了其他索引,但该计划中出现的唯一索引是非聚集的、唯一的、 on:Symbol, TradeDate, Period和 includes Value。它被扫描。查询如下,希望有人可以帮助我。提前致谢..
SELECT
ROW_NUMBER() OVER
(
ORDER BY t1.Symbol, t1.Period, t2.Period, t.TradingDate DESC
) RowNum,
t1.Symbol, t.TradingDate, t1.Period, t2.Period, t1.Value FastValue,
t2.Value SlowValue, (t1.Value - t2.Value) SlowFastDiff,
ChgSign = CASE WHEN t1.Value < t2.Value THEN 0
WHEN t1.Value >= t2.Value THEN 1
WHEN t1.Value IS NULL OR t2.Value IS NULL …Run Code Online (Sandbox Code Playgroud) 在 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,也许是标准的。
sql-server-2008 ×10
sql-server ×8
backup ×1
count ×1
hardware ×1
partitioning ×1
rdbms ×1
san ×1
t-sql ×1