在虚拟机中运行 SQL Server 的最佳做法是什么?我的在线交易活动非常少,但是为了向多个网站提供报告数据而进行了大量数据处理。
扩展事件似乎是一种更好的技术,对服务器的压力更小,但 SQL Profiler/perfmon 具有更好的工具。此外,扩展事件似乎具有更陡峭的学习曲线。每个应该在什么上下文中使用?是否值得通过陡峭的学习曲线来利用扩展事件?
SQL Server 2012 中代号Denali为Columnstore 索引的新功能之一。
我对常规的旧行存储索引非常了解,例如 b 树结构、叶级和 b 树页面之间的存储差异、包含字段的影响、优化使用它们、键的顺序等。
我很难获得有关列存储索引内部结构的任何好的信息。
我能找到的很多关于它们的信息基本上与“正常”索引完全相反,即没有键的排序,没有包含的字段,只有非聚集。
任何见解表示赞赏。
昨天发生了不好的事情。
前一段时间创建的视图被某人修改,最终破坏了报告。很遗憾。有人(有意或无意)在 PRODUCTION 数据库中进行了此修改。
我的问题:有没有办法(脚本/软件/免费软件等)让我们知道谁(用户名)做了这个修改,这样我就可以撤销该用户对生产数据库的访问权限。
如果我的问题不清楚,请发表评论。
我经常使用 SSMS 来测试我的慢速存储过程是否缺少索引。每当我看到“缺少索引(影响 xxx)”时,我的下意识反应就是创建新索引。据我所知,这每次都会导致更快的查询。
为什么我不应该继续这样做?
我们有一个写大量产品的数据库。我们刚刚购买了一台带有 SSD 的新服务器机器来提供帮助。令我们惊讶的是,插入速度并不比存储速度慢得多的旧机器快。在基准测试期间,我们注意到 SQL Server 进程表现出的 IO 率非常低。
例如,我运行了在此页面上找到的脚本,只是在循环中添加了 BEGIN TRAN 和 COMMIT。我最多只能看到磁盘使用率达到 7Mb/s,而 CPU 几乎没有达到 5%。服务器安装了 64Gb 并使用了 10 个。第一次调用的总运行时间为 2 分 15 秒,后续调用大约需要 1 分钟。数据库正在简单恢复并且在测试期间处于空闲状态。我在每次通话之间放下了桌子。
为什么这么简单的脚本这么慢?硬件几乎没有被使用。专用磁盘基准测试工具和 SQLIO 均表明 SSD 以高达 500Mb/s 的读取和写入速度正确执行。我知道随机写入比顺序写入慢,但我希望像这样的简单插入,对没有聚集索引的表,要快得多。
最终我们的场景要复杂得多,但我觉得我需要先了解一个简单的案例。简而言之,我们的应用程序删除旧数据,然后使用 SqlBulkCopy 将新数据复制到临时表,执行一些过滤,最后根据情况使用 MERGE 和/或 INSERT INTO 将数据复制到最终表。
--> 编辑 1:我按照 Martin Smith 链接的程序进行操作,得到以下结果:
[Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)]
NETWORK_IO 5008 46735 46587 148
LOGBUFFER 901 5994 5977 17
PAGELATCH_UP 40 866 865 1 …Run Code Online (Sandbox Code Playgroud) 从msdn:
与派生表不同,CTE 可以是自引用的,并且可以在同一个查询中多次引用。
我经常使用 CTE,但我从未深入思考使用它们的好处。
如果我在同一个查询中多次引用 CTE:
除了使用 SQL Server Profiler 之外,还有什么方法可以跟踪正在使用的存储过程,或者至少是上次执行它们的时间?
是否有人在实际生产中使用 HierarchyId 使用合理大小的表,超过几千行?它可靠/性能好吗?到目前为止,我还没有发现任何与供应商无关的人推荐它,并且 Paul Nielsen在这里建议不要使用它。
您在实际生产系统中使用 HierarchyId 的经验是什么?
当您选择 HierarchyId 而不是其替代品时,您使用了哪些标准?
SELECT这段代码中的三个语句
USE [tempdb];
GO
SET NOCOUNT ON;
CREATE TABLE dbo.persist_test (
id INT NOT NULL
, id5 AS (id * 5)
, id5p AS (id * 5) PERSISTED
);
INSERT INTO dbo.persist_test (id)
VALUES (1), (2), (3);
SELECT id
FROM dbo.persist_test;
SELECT id5
FROM dbo.persist_test;
SELECT id5p
FROM dbo.persist_test;
DROP TABLE dbo.persist_test;
Run Code Online (Sandbox Code Playgroud)
生成这个计划:

为什么SELECT选择持久值的 final生成计算标量运算符?
sql-server ×10
index ×2
columnstore ×1
cte ×1
hierarchy ×1
perfmon ×1
performance ×1
profiler ×1
ssms ×1
statistics ×1
view ×1