背景:谨慎的 DBA
我们已经被收购了几次,我们最新的霸主拥有 DBA,他们小心地保护他们的生产数据库服务器。
总的来说这是好的。
但是,我们遇到了开发人员和 DBA 之间的一个争论点:他们不会对生产数据库服务器运行跟踪。
我们作为开发人员的经验:SQL Server 跟踪 + RML 实用工具
过去,当应用程序实例运行缓慢时,我们会通过 .sql 脚本运行跟踪,压缩输出,然后使用 Microsoft 的 RML 实用程序对其进行处理。
请注意,我们不运行基于 GUI 的分析器工具,因为这会显着降低性能(数据库需要等待更新 GUI)。这些跟踪只是“记录活动”到数据库服务器的本地文件系统。我们的脚本一次运行指定分钟数(例如 10 分钟)的跟踪。
跟踪和 RML 实用程序的组合效果很好:报告易于使用。它显示热点(见下文),报告提供有用的信息,它们允许深入了解实际执行计划等。它比 Oracle 提供的任何东西(或至少几年前)都要好得多。
(热点:如果一个查询耗时 1/10 秒,但执行了 400,000 次,它会出现在报告中,高于执行一次需要 30 秒的查询。)
这些年来,我做了一些表演工作。我的经验是,从“真实负载下的真实数据库”中捕获“实际数据”胜过程序员“猜测”并模拟他们想象的问题。这就是为什么我认为 SQL Server 跟踪几乎是解决问题的“银弹”。
我的问题
我有一个问题,其中RowCountsaSP:StmtCompleted中的列返回的计数与为执行 select 语句而返回的实际行不同。
我select @@RowCount在 select 查询之后尝试了 a ,它返回的计数与count(*). 我现在很好奇是什么导致分析器返回不正确的行数。
我确实阅读了相关线程,表明碎片化可能会产生错误的计数并且DBCC UPDATEUSAGE可能会解决问题,但我想在应用它之前了解我在做什么。我将不胜感激。另外,索引是否在计数中起作用?
相关问答:SQL Server Row Count sp_spaceused rows 差异
我正在使用 SQL Server 2014 Profiler。
这是您在 Profiler 中查看行计数的方式,以防万一有人想知道:在 SQL Profiler 中显示行计数
在调整我们的数据库和查询我们的一种产品时,我决定在 QA 环境中打开 Profiler 并查看它显示的内容。
我看到对于我调用的每个插入,都会使用插入语句的文本对 sp_executesql 进行调用。
这似乎很受欢迎,有没有办法关闭它?
环境:
我有一个开发用户,他需要能够在单个数据库上使用 SQL Profiler。有没有办法在不授予服务器范围的 ALTER TRACE 权限的情况下启用它?(用户根本不应该拥有对其他数据库的任何访问权限。)这是 Microsoft SQL Server 2008 R2。
最近,我一直在 SQL Server 日志中看到错误。
代码:3930 描述:“当前事务无法提交,无法支持写入日志文件的操作。回滚事务。”
使用 SQL Profiler,如何找到导致此错误的确切语句?SQL Profiler 中的哪一列填充了 SQL 错误日志中的“消息”列?不幸的是,我们只在生产中得到这个,所以我需要在那里运行一个尽可能轻量级的跟踪。你们推荐什么来捕获有问题的代码?
我正在对数据库进行跟踪并将跟踪实时转储到表中。
我进行跟踪的原因是我想查看对数据库执行的所有查询。
+-----------+------------+----------+------------------------------+------------+-----------+-----+-------+--------+-----------+-----------------+------+-------------------------+-------------------------+------------+
| RowNumber | EventClass | TextData | ApplicationName | NTUserName | LoginName | CPU | Reads | Writes | Duration | ClientProcessID | SPID | StartTime | EndTime | BinaryData |
+-----------+------------+----------+------------------------------+------------+-----------+-----+-------+--------+-----------+-----------------+------+-------------------------+-------------------------+------------+
| 13073 | 15 | NULL | .Net SqlClient Data Provider | NULL | reviewer | 0 | 2172 | 0 | 439776000 | 5096 | 104 | 2012-12-14 12:54:22.893 | 2012-12-14 13:01:42.670 | NULL |
| 13057 | 15 | NULL | .Net SqlClient …Run Code Online (Sandbox Code Playgroud) SQL Servers 有跟踪和 XEvents。这些用于捕获和分析 SQL Server 实例发生的情况。事件存储在堆栈中供以后分析。例如,如果我决定监视数据库中的任何死锁,我只是查询跟踪文件以查看一段时间内死锁的历史记录。这是我的问题:
当事件发生时,在我们的死锁事件示例中,有没有办法使用 msdb.dbo.xp_send_dbmail 获取电子邮件通知?
sql-server-2008 sql-server deadlock profiler extended-events
我有一个存储过程,它每 2.5 秒被一个程序 24-7 调用一次。此过程通常在 10 毫秒内运行。一天几次(3 -5 次)运行大约需要 42953 毫秒(总是在 42950 和 42959 毫秒之间)。
我如何找到或描述为什么需要这么长时间的原因?
更新: Sql 服务器版本 2008 R2
程序:
select
[view_EventsToRaise].EventId,
[view_EventsToRaise].EventStatus,
[view_EventsToRaise].Tag,
[view_EventsToRaise].SessieGebruikerId,
Postbus.Persoon_Id_afz as PersoonIdAfz,
Postbus.Persoon_Id_adr as PersoonIdAdr,
Postbus.Persoon_Id_derde as PersoonIdDerde,
Postbus.Locatie_Id as LocatieId,
Postbus.Artikel_Id as ArtikelId,
Postbus.Onderwerp_Id as OnderwerpId,
Postbus.Bedrijf_Id_afz as BedrijfIdAfz,
Postbus.Bedrijf_Id_adr as BedrijfIdAdr,
Postbus.Bedrijf_Id_derde as BedrijfIdDerde,
Postbus.Document_Id as DocumentId,
Postbus.Document as Document,
DataKenmerk.Code as PostbusDataCode,
PostbusData.Inhoud as PostbusDataInhoud,
SimObj.Id as SimObjId,
Eventsoort.Code as Eventsoort
from
[view_EventsToRaise]
left outer join Postbus
left outer …Run Code Online (Sandbox Code Playgroud) 是否有可以在 Mac 上安装和运行的 SQL 分析器 MSSSQL?只要它可以在我的 Mac OS 上运行,它是否是付费版本并不重要。谢谢。
当发生回发时,我目前维护的 ASP.Net 应用程序在数据库中有很多活动。对于我目前正在查看的示例,Profiler 显示了大量活动只是为了刷新 UI,但我知道它还会更新几个表。
什么是最好的跟踪过滤器,只显示插入、更新、删除的 sprocs/语句?
有没有办法只显示 I/U/D 的表(但我怀疑这是可能的)?
感谢您对此的帮助。