作为开发人员,我经常使用 SQL Profiler。这是一个很好的调试工具,既可以跟踪我的代码在做什么,也可以分析性能问题。
但是我一直在我的开发环境中使用它,并且以一种非常可控的方式使用它。
SQL Profiler 能否在生产环境中实际使用?
我首先担心的是它会降低性能。
我的第二个担忧是,因为它正在生产中,您不会触发有趣的操作本身。您必须让分析器长时间运行,然后分析结果。结果集会变得太笨拙吗?(占用太多磁盘空间,查询太难)。
有人在生产中使用 SQL Profiler 吗?
您是否曾经不得不证明不使用查询提示是合理的?
我WITH (NOLOCK)在每个访问非常繁忙的服务器的查询中都看到了。开发人员认为它应该默认开启,因为他们讨厌在他们的代码中看到它数千次。
我试图解释说它允许脏读,最终它们会得到坏数据,但他们认为性能权衡是值得的。(他们的数据库一团糟;难怪他们有性能问题。)
如果你有一个明确的例子来说明如何反对这种滥用NOLOCK提示的情况,那将不胜感激。
我试图在 SQL Server 中找到一些关于阻塞的信息,但我找不到关于它是什么以及它是如何发生的简明解释。你能帮我解惑吗?
我有一个长时间运行的事务(称为 T1),它对 SQL Server 2008 R2 中的表执行一些删除、更新和插入操作。同时,另一个进程会定期从该表中运行 select 语句。
在默认隔离设置下(我认为是 READ COMMITTED?),T1 会阻止任何 select 语句运行,直到事务提交或回滚。
我希望看到的是,即使在事务正在进行时,select 语句也能对一致的数据起作用。我相信 SNAPSHOT 隔离可以提供帮助,但不确定我是否朝着正确的方向前进。这是该应用程序的最佳隔离级别吗?
其次,我无法控制调用 select 语句的进程,但我可以控制调用 T1 的 .NET 应用程序。select 语句和 T1 都需要更改任何隔离级别,还是仅将 T1 标记为具有不同的隔离级别就足够了?
我们在生产环境中遇到了一些性能问题。
我们发现,当活动会话数超过 25 时,CPU 使用率达到 100%,并且需要很长时间才能下降。
我们拥有的环境:
产品 Microsoft SQL Server 企业版 9.3(sp2)
CPU 2(至强 2.13)
内存7G
会话详细信息 1 的快照
活动会话 25
第 496 章
空闲会话 289
被阻止的交易29
会话详细信息 2 的快照
活动会话 59
活跃交易 885
第 267 章
被阻止的交易49
我想知道:
2CPU 是否可以处理25 个活动会话(500 个活动事务)。 PS:我们测试过,没有并发请求,一个事务,读/写5 个表,在应用程序级别大约需要1 秒。
阻塞的事务是否占用更多的CPU。 PS:阻塞的事务主要是因为2个表上的锁。
解决方案是什么:添加 CPU 或调整应用程序(java/hibernate)以缩短此事务并减少表中的块?
我是一个偶然的 DBA 并且仍在学习。
当我从 DMV:s 或 Activity Monitor 看到某个进程正在阻塞另一个进程时,应该怎么做?
我应该简单地终止这些进程还是有办法“释放”或者抢占这种阻塞?