我需要对聚集索引做一个简短的解释。
我是埃因霍温 Fontys 大学的学生,我目前正在进行一系列采访以帮助开发 SQL Server 工具,我想从该领域的专家那里得到反馈。
我的问题之一是:
您在使用 SQL Server 实例时遇到的前 3 个性能问题是什么?您如何确定这些问题?
我对用于衡量这一点的脚本和工具特别感兴趣。
我是埃因霍温 Fontys 大学的学生,我目前正在进行一系列采访以帮助开发 SQL Server 工具,我想从该领域的专家那里得到反馈。
我的问题之一是:
最佳实践 SQL Server 维护计划是什么样的?您为此使用 SQL Server 维护计划,还是使用自定义脚本?
受这篇文章的启发:https : //twitter.com/#!/ SQLChicken/status/ 102930436795285505
堆:它们被认为是索引结构还是严格来说是没有索引的表结构?
SQL Server 允许您将作业配置为在失败时发送电子邮件警报。这是监控您的工作的一种简单而有效的方法。但是,这些警报不包括任何细节——只是成功或失败的通知。
如果作业失败,典型的警报电子邮件将如下所示:
JOB RUN: 'DBA - Consistency Check Databases' was run on 8/14/2011 at 12:00:04 AM
DURATION: 0 hours, 0 minutes, 0 seconds
STATUS: Failed
MESSAGES: The job failed. The Job was invoked by Schedule 2 (Nightly Before
Backup 12AM). The last step to run was step 1 (Check Databases).
Run Code Online (Sandbox Code Playgroud)
要确定失败的原因,您必须导航到 SQL Server Management Studio 中的实例,找到作业并查看其执行历史记录。在大型环境中,必须不断地这样做可能会很痛苦。
理想的警报电子邮件应预先包含失败原因,并让您直接着手解决方案。
我熟悉这个问题的解决方案。有没有人有任何经验?它的缺点是:
spDBA_job_notification有没有人想出更好的解决方案?
我收到以下关于我在程序中运行的 SQL 查询的错误消息。SQL Server 2005 T-SQL。
异构查询需要为连接设置
ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。(严重性 16)
修复它很容易,设置ANSI_NULLS和ANSI_WARNINGS ON,但我想知道异构查询是什么。谷歌搜索带来了几十个结果,告诉我设置ANSI_NULLS和ANSI_WARNINGS,没有解释这个词的意思。查询是:
UPDATE SRV.DB.DBO.TABLE SET Column=
(SELECT Column
FROM SRV1.DB.DBO.TABLE)
Run Code Online (Sandbox Code Playgroud)
我认为这是由于在一个查询中连接到多个数据库引擎,否则我从未遇到过此错误。
“异构”是否只是指在这种情况下查询两个不同的数据库引擎?
在优化一些存储过程时,我与 DBA 坐下来讨论了一些具有高阻塞和/或高读/写活动的存储过程。
DBA 提到的一件事是我应该TABLE在存储过程的顶部声明所有变量(尤其是变量)以避免重新编译。
这是我第一次听说这个,并且在重新访问我们拥有的所有不同存储过程之前正在寻找一些确认。他称其为“延迟查看代码”,而重新编译正在锁定将导致阻塞的模式。
将所有变量声明移到存储过程的顶部是否会减少重新编译?
sql-server stored-procedures optimization sql-server-2008-r2
检查我的 SQL Server 日志,我看到几个这样的条目:
Date: 08-11-2011 11:40:42
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:42
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Date: 08-11-2011 11:40:41
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:41
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Run Code Online (Sandbox Code Playgroud)
等等..这可能是中国人对我的 SQL Server 的攻击吗???!我在 ip-lookup.net 上查找了 IP 地址,它说它是中文的。 …
我试图了解我们在 SQL Server 2000 中遇到的一个问题。我们是一个中等事务性的网站,我们有一个名为的存储过程sp_GetCurrentTransactions,它接受一个客户ID和两个日期。
现在,根据日期和客户,此查询可以返回从零到 1000 行的任何内容。
问题:我们所经历的是,Execution Timeout Expired当特定客户端尝试执行该存储过程时,我们会突然收到许多错误(通常或类似的错误)。所以我们检查了查询,在 SSMS 中运行它,发现它需要 30 秒。所以我们重新编译存储的 proc 并且 -bang- 它现在在 300 毫秒内运行。
我已经和我们的 DBA 谈过了。他告诉我,当我们创建存储过程时,数据库创建了一个查询计划。他说对于那组参数是一个很好的计划,但是如果你向它抛出一组特定的参数,那么该计划将不是该数据的最佳计划,因此你会看到它运行缓慢。
提供给我的选项是将问题查询从存储过程移回动态 SQL,在每次运行时都会创建执行计划。
这对我来说就像是后退了一步,我觉得必须有办法解决这个问题。有没有其他方法来处理这个问题?
任何和所有的回应表示赞赏。
我有几个表,行数在 5M 到 1.5G 之间
每个表都有其 BLOB 字段,其大小从 100 字节到 30 兆字节不等,并存储为“行外大值类型”= ON
表存储在不同的文件组中,每个文件组有 3-4 个文件@不同的 LUN@非常快的 SAN
这些表每天增长 5-100 Gb 和 600k - 1.5M 行
经过一段时间后,从 2 周到 6 个月不等,一些行被删除或移动到存档数据库,因此 - 工作表中没有任何超过 6 个月的行。
服务器当前配置:
-T 3640; (消除了为存储过程中的每个语句向客户端发送 DONE_IN_PROC 消息。这类似于 SET NOCOUNT ON 的会话设置,但是当设置为跟踪标志时,每个客户端会话都以这种方式处理)
-T 1118;(将 tempDB 中的分配从一次 1pg(对于前 8 页)切换到一个范围。)
-T 2301;(启用特定于决策支持查询的高级优化。此选项适用于大型数据集的决策支持处理)
-T 1117;(一次增长所有数据文件,否则依次增长。)
-E; (增加为文件组中每个文件分配的区数。此选项对于运行索引或数据扫描的用户数量有限的数据仓库应用程序可能有用)
-T 834; (导致 SQL Server 对为缓冲池分配的内存使用 Windows …
sql-server ×10
optimization ×2
errors ×1
heap ×1
maintenance ×1
monitoring ×1
performance ×1
terminology ×1