相关疑难解决方法(0)

找出导致最大网络流量的查询

在生产 SQL 服务器上,我看到数据流量出现间歇性的巨大峰值。高达 200Mbit/s,这会导致 NETWORK IO 等待,从而导致查询超时。如何找出返回大结果集的查询?

sql-server

23
推荐指数
3
解决办法
1万
查看次数

如何检测对数据库的任何更改(DDL 和 DML)

我客户的 SQL 服务器上有很多数据库。这些数据库正在开发中,因此开发人员可以进行设计、重构、数据修改等。有一些数据库很少更改。我的客户必须确保所有这些都安全(备份)并花一些时间管理环境。(公司没有DB管理员职位。)经过长时间的讨论,客户决定使用每日完整备份策略,因为恢复容易。

所以这里是情况的总结:

  • 数据库的数量每天都在变化。
  • 应备份已更改的数据库(意味着数据和/或结构已更改)。
  • 未更改的数据库不得备份。
  • 解决方案不应影响数据库结构(不受限制的要求)
  • 这个“备份引擎”应自动工作。

主要问题:如何检测数据库已更改。问题的第一部分(DDL 更改)可以通过使用DDL 触发器来解决。但是数据更改(DML 更改)是一个问题。不可能将 DML 触发器应用于所有数据库的所有表以跟踪更改(性能、扩展对象的管理......)。备份引擎必须跟踪所有更改以将每个数据库标记为准备备份。

  • Change Data Capture是一个解决方案,但它似乎太重了(它还需要 SQL Server 企业版)。

  • 另一种方法是跟踪数据库文件更改(大小或上次更改时间),但它无法正常工作:当数据库超过所有保留的可用空间时,它可以更改其大小,而sp_spaceused不是解决方案。

  • 跟踪是一种解决方案,但它会导致性能问题并需要额外的管理。

是否有任何解决方案可以在不影响其他数据库管理对象(如统计信息..)的情况下计算实际数据库使用大小?当然,对不改变表大小的表数据的更改不会触发(我认为),但总比没有好。我真的在寻找 SQL Server 2008 的直接或间接解决方案。

感谢您的任何评论、解决方案和想法。

添加:

这是解决方案(感谢玛丽安):

Select
    NextLSN = MAX(fn.[Current LSN])
    ,Databasename = DB_NAME()
 from fn_dblog(NULL,    NULL) fn
     LEFT JOIN sys.allocation_units au
         ON fn.AllocUnitId = au.allocation_unit_id
     LEFT  JOIN sys.partitions p
         ON p.partition_id = au.container_id
     LEFT  JOIN sys.objects so
         ON so.object_id = p.object_id  
    WHERE 
    (
        (Operation …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 backup

15
推荐指数
1
解决办法
5万
查看次数

如何监控死锁

您什么时候开始对 SQL Server 2005/2008 死锁进行故障排除以及如何进行?警报通过 SQL Server 性能条件警报打开 SSMS,对象->SQLServer:Locks,Counter->Lock Waits/Sec,Instance:_Total,警报如果 counter: 上升到值 3 以上。这是一种主动监控它的方式吗?可接受的值是多少?我非常感谢你的帮助。谢谢!!!

sql-server deadlock

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

sql server 并发性能

我们在生产环境中遇到了一些性能问题。

我们发现,当活动会话数超过 25 时,CPU 使用率达到 100%,并且需要很长时间才能下降。


我们拥有的环境:

产品 Microsoft SQL Server 企业版 9.3(sp2)

CPU 2(至强 2.13)

内存7G

会话详细信息 1 的快照

活动会话 25

496 章

空闲会话 289

被阻止的交易29

会话详细信息 2 的快照

活动会话 59

活跃交易 885

267 章

被阻止的交易49


我想知道:

  1. 2CPU 是否可以处理25 个活动会话(500 个活动事务)。 PS:我们测试过,没有并发请求,一个事务,读/写5 个表,在应用程序级别大约需要1 秒。

  2. 阻塞的事务是否占用更多的CPU。 PS:阻塞的事务主要是因为2个表上的锁。

解决方案是什么:添加 CPU 或调整应用程序(java/hibernate)以缩短此事务并减少表中的块?

sql-server-2005

8
推荐指数
3
解决办法
1697
查看次数

数据库锁定问题?

我在 SQL Server 2008 生产数据库上遇到了与事务相关的问题。简要概述一下,我们有一个网站,该网站在该州拥有众多并发用户,他们通过 ASP.Net 网站执行 GUI 类型的工作(添加记录、修改、查看等)。

每个插入和更新都在它自己的事务中完成,由数据访问层处理。我相信,数据库隔离设置为 Read_Commited。

一切正常。

但是,已添加一个新模块,该模块轮询单独的数据库以获取信息。如果有新信息,一个进程会启动一个新事务,并使用相同的数据访问器代码从我们的数据库中读取,以及从另一个单独的数据库中读取新信息。然后它会进行大量检查以查看它必须对新数据做什么......然后开始对我们的数据库进行大量更新或插入。这一切都在一个大交易中。来自 UI 应用程序和轮询服务的所有插入和更新都经过相同的 CRUD 过程。由于要处理的传入消息可能包含许多需要更新的实体,因此完成事务的时间可能在瞬间到一分钟之间。

但是我们发现,当处理较大的消息时,UI 会锁定,并且可以为用户锁定 3 分钟。

因此,我们认为在选择中添加“NOLOCK”提示可能会有所帮助。它没有。好吧,它可能有所帮助,但锁定仍在发生。

我认为原因可能是消息到达,并且启动了一个事务,这导致其他事务无法工作(即使是 SELECT 语句,我也不明白)。分析数据库表明,即使是简单的选择也需要很长时间才能在 UI 上完成(简单,例如SELECT fields FROM SingleTable WHERE PrimaryKey = Value

我们的索引似乎没问题……我们在所有表上都有触发器,它们只是将更新和插入复制到 AUDIT 数据库表中。不要认为他们是问题所在。

我认为这是因为围绕消息处理的事务,这将 UI 锁定。

任何人都可以分享经验或告诉我在哪里可以查看为什么我们会遇到 UI 锁定?UI 应该有优先权。消息处理是后台的事情......用户需要优先......但似乎消息正在锁定数据库......我们不确定UI是否曾经锁定消息处理。

希望有人可以提供帮助。我可以提供尽可能多的信息来提供帮助。

performance sql-server-2008

7
推荐指数
1
解决办法
2542
查看次数