标签: sql-server

在虚拟机中运行 SQL Server 的最佳做法是什么?

在虚拟机中运行 SQL Server 的最佳做法是什么?我的在线交易活动非常少,但是为了向多个网站提供报告数据而进行了大量数据处理。

sql-server

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

什么时候应该使用扩展事件而不是 SQL Profiler/perfmon?

扩展事件似乎是一种更好的技术,对服务器的压力更小,但 SQL Profiler/perfmon 具有更好的工具。此外,扩展事件似乎具有更陡峭的学习曲线。每个应该在什么上下文中使用?是否值得通过陡峭的学习曲线来利用扩展事件?

sql-server-2008 sql-server profiler perfmon extended-events

21
推荐指数
1
解决办法
4408
查看次数

列存储索引的结构是什么?

SQL Server 2012 中代号Denali为Columnstore 索引的新功能之一。

我对常规的旧行存储索引非常了解,例如 b 树结构、叶级和 b 树页面之间的存储差异、包含字段的影响、优化使用它们、键的顺序等。

我很难获得有关列存储索引内部结构的任何好的信息。

  • 它的结构如何?
  • 有b树吗?有其他结构吗?
  • 数据是如何组织的?
  • 什么样的特定运算符最适合使用它?
  • 使用它们时要避免的任何其他反模式?

我能找到的很多关于它们的信息基本上与“正常”索引完全相反,即没有键的排序,没有包含的字段,只有非聚集。

任何见解表示赞赏。

index sql-server sql-server-2012 columnstore

21
推荐指数
1
解决办法
2422
查看次数

确定架构更改是如何发生的?

昨天发生了不好的事情。

前一段时间创建的视图被某人修改,最终破坏了报告。很遗憾。有人(有意或无意)在 PRODUCTION 数据库中进行了此修改。

我的问题:有没有办法(脚本/软件/免费软件等)让我们知道谁(用户名)做了这个修改,这样我就可以撤销该用户对生产数据库的访问权限。

如果我的问题不清楚,请发表评论。

sql-server view

21
推荐指数
3
解决办法
2万
查看次数

盲目添加缺失的索引可以吗?

我经常使用 SSMS 来测试我的慢速存储过程是否缺少索引。每当我看到“缺少索引(影响 xxx)”时,我的下意识反应就是创建新索引。据我所知,这每次都会导致更快的查询。

为什么我不应该继续这样做?

index sql-server-2008 sql-server ssms

21
推荐指数
2
解决办法
4524
查看次数

SQL:如果不是 CPU 或 IO,什么会降低 INSERT 的速度?

我们有一个写大量产品的数据库。我们刚刚购买了一台带有 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)

performance sql-server-2008 sql-server

21
推荐指数
2
解决办法
2万
查看次数

公共表表达式 (CTE) 的好处?

从msdn:

与派生表不同,CTE 可以是自引用的,并且可以在同一个查询中多次引用。

我经常使用 CTE,但我从未深入思考使用它们的好处。

如果我在同一个查询中多次引用 CTE:

  • 是否有任何性能优势?
  • 如果我进行自联接,SQL Server 会扫描目标表两次吗?

sql-server cte

21
推荐指数
2
解决办法
3万
查看次数

跟踪存储过程的使用

除了使用 SQL Server Profiler 之外,还有什么方法可以跟踪正在使用的存储过程,或者至少是上次执行它们的时间?

sql-server-2008 sql-server statistics

21
推荐指数
2
解决办法
5万
查看次数

有人在生产中使用 HierarchyId 吗?它可靠吗?

是否有人在实际生产中使用 HierarchyId 使用合理大小的表,超过几千行?它可靠/性能好吗?到目前为止,我还没有发现任何与供应商无关的人推荐它,并且 Paul Nielsen在这里建议不要使用它。

您在实际生产系统中使用 HierarchyId 的经验是什么?

当您选择 HierarchyId 而不是其替代品时,您使用了哪些标准?

sql-server-2008 sql-server hierarchy

21
推荐指数
2
解决办法
8549
查看次数

当我选择一个持久化的计算列时,为什么 SQL Server 会“计算标量”?

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-2008 sql-server execution-plan

21
推荐指数
1
解决办法
7769
查看次数