标签: sql-server-profiler

使用过滤器减少SQL跟踪的开销

我们有一台SQL 2000服务器,它具有各种各样的工作,这些工作在一天中的不同时间运行,甚至在一个月的不同日期运行.通常,我们只使用SQL分析器在很短的时间内运行跟踪以进行性能故障排除,但在这种情况下,这实际上不能让我对通过该数据库对数据库运行的查询类型有一个很好的全面了解.一天,一周或一个月的过程.

如何最小化长时间运行的SQL跟踪的性能开销?我已经知道了:

  • 执行跟踪服务器端(sp_ create_trace),而不是使用SQL事件探查器UI.
  • 跟踪文件,而不是数据库表(这会给数据库服务器增加额外的开销).

我的问题是关于过滤器.如果我添加一个过滤器只记录运行超过一定持续时间或读取的查询,它仍然必须检查服务器上的所有活动,以决定是否需要记录它,对吧?因此,即使使用该过滤器,跟踪是否会为已经处于不可接受性能边缘的服务器创建不可接受的开销水平?

sql-server sql-server-2000 sql-server-profiler

6
推荐指数
1
解决办法
2427
查看次数

阅读SQL死锁图

有人可以帮我阅读/理解这个死锁图吗?

我不明白为什么进程75要求锁定他已经锁定的对象?

死锁图

sql sql-server-profiler sql-server-2008 database-deadlocks

6
推荐指数
1
解决办法
5525
查看次数

MS SQL Server相当于PostgreSQL的EXPLAIN

是否有一个SQL Server等同于PostgreSQL的EXPLAIN命令,我可以在SQL Server 2008 R2 Express上运行(即没有SQL Profiler)?

sql-server-profiler sql-server-2008 sql-server-2008r2-express

6
推荐指数
1
解决办法
5091
查看次数

如何在 SQL Profiler 或任何其他工具中监视事务隔离级别更改

我已经成功地只能看到transaction isolation level事件中的Audit Login事件。还有其他方法可以transaction isolation level使用 SQL Profiler 或使用其他工具来监视更改吗?我问的原因是因为 SQL Profiler 似乎无法以正确的顺序输出事件,或者它跳过事件,因为在我的应用程序中设置IsolationLeveltoSerializable时它仍然显示transaction isolation level read committed.

Audit LoginSQL Profiler 中的示例:

-- network protocol: Named Pipes
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level serializable
Run Code Online (Sandbox Code Playgroud)

sql sql-server entity-framework sql-server-profiler entity-framework-6

6
推荐指数
1
解决办法
3992
查看次数

SQL Server Profiler显示SCOPE_IDENTITY(),而ColdFusion代码未在任何查询中使用它

我正在使用SQL Server 2008 R2 Profiler调试ColdFusion 7应用程序上的问题 - 这是由其他人开发的 - 在Windows 7上运行,SQL Server 2008 R2作为后端.该应用程序最初使用MS Access 2003作为后端,后来转换为SQL Server 2008 R2.分析器显示以下使用SCOPE_IDENTITY()的SQL,但是当我使用搜索实用程序搜索应用程序根目录时,没有文件在其SQL查询中的任何位置使用SCOPE_IDENTITY()函数.该应用程序的SQL Server数据库没有任何存储过程,视图,函数等.所有SQL查询都是ColdFusion文件中的嵌入式查询.然后Profiler获得SCOPE_IDENTITY()函数:

declare @p1 int
set @p1=11
exec sp_prepexec @p1 output,N'@P1 datetimeoffset,@P2 varchar(8000),@P3 int,@P4 varchar(8000)',N'insert into ProductItems (item_date , item_description, item_type)
values (
@P1 ,
@P2 ,
@P3 , 
) select SCOPE_IDENTITY()','2015-10-19 00:00:00 +00:00','Test description',1
select @p1
Run Code Online (Sandbox Code Playgroud)

更新 虽然最初的应用程序是在CF 7中开发的,但CF 7后来升级到了CF9,现在我在具有CF 11的本地机器上进行调试.我不知道在更换CF 7时代码是否也升级了CF 8,然后是CF 9.在查询器中似乎生成上述SQL的CFquery看起来像.此外,表ProductItems确实有一个标识列,数据库没有使用任何触发器,CFquery标签没有使用结果属性:

<cfquery name="addProductItems" datasource="#dtsource#">
  insert into Productitems (item_date,item_description,item_type)  
  values (
    <cfqueryPARAM value = "#item_dat#" CFSQLType = "CF_SQL_TIMESTAMP" null="#item_dat …
Run Code Online (Sandbox Code Playgroud)

sql-server coldfusion sql-server-profiler scope-identity sql-server-2008-r2

6
推荐指数
1
解决办法
304
查看次数

SQL Server Profiler未显示嵌入在ColdFusion组件中的SQL语句

在我们的带有SQL Server 2008 R2的ColdFusion 11应用程序中..cfm文件使用的CF组件使用以下语法调用:

<cfscript>
    objMyTable = createobject('component','components.myTable);
    qmyTable2list = objMyTable.loadAllCustomers();
        qresultset = objMyTable.loadCustomersResultset(form.applicant_type, form.customer_name, form.state, form.orderby);
</cfscript>
Run Code Online (Sandbox Code Playgroud)

CF组件具有SQL语句,如下所示:

<cfquery name="result_set" dataSource="#request.dsn_name#">
        select name, state from myTable #REReplace(where_clause,"''","'","ALL")#        
</cfquery>
Run Code Online (Sandbox Code Playgroud)

当我们单击.cfm页面上的按钮时,应用程序正确显示来自SQL Server 2008-R2的数据.但SQL事件探查器不会捕获这些SQL语句.当我们在使用嵌入式cfquery标签进行sql查询(而不是CF组件)的.cfm页面上运行探查器时,SQL探查器会显示页面执行的所有查询. 问题:我们如何让SQL Profiler捕获CF组件内的查询?

更新 我跟踪在探查器中选择的事件: 在此输入图像描述

sql-server coldfusion cfc sql-server-profiler sql-server-2008

6
推荐指数
1
解决办法
1009
查看次数

如何"标记"实体框架查询

我正在帮助提高复杂应用程序的性能,其中包含遍布代码库的数百个实体框架查询.我们遇到的一个问题是,当我们运行SQL事件探查器并捕获实体框架查询时,找到实际导致通过分析器的sql语句的代码非常耗时.我想知道是否有某种方式我们可以使用在sql语句中出现的唯一标识符"标记"每个实体框架语句.为实体框架为每个语句生成的实际sql语句添加注释的行.然后我们可以在探查器跟踪中看到注释,并在代码中搜索标记.关于我们如何做到这一点的任何想法?我猜测必须有一些方法可以拦截EF生成的sql,并在它发送到数据库服务器之前添加我们的注释.

c# entity-framework sql-server-profiler

6
推荐指数
1
解决办法
415
查看次数

SQL Profiler 2008 死锁图工具提示未显示实际语句

在死锁图中,将鼠标悬停在死锁椭圆上应该会生成 SQL 语句。但是,在 SQL Profiler 2008 中,工具提示显示的是“Statement”或“Statement Proc”,而不是语句本身。有没有人 ?有解决方法吗?

sql sql-server sql-server-profiler sql-server-2008

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

SQL Server Profiler:在SSRS报告生成期间捕获对数据库的存储过程的调用

使用SQL Server/SSRS 2008.

使用SQL Server Profiler,我一直试图跟踪SSRS(rdl)报告生成调用到我的数据库的存储过程失败,即所以我可以看到传递了什么参数值等.

我应该寻找什么事件?

sql-server sql-server-profiler reporting-services

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

使用 SQL Server Profiler 识别超时原因

我们在两个应用程序(一个 ASP.Net 和一个 WinForms)SQL Server 应用程序上遇到看似随机的超时。我让 SQL Profiler 在一个小时内运行,以查看可能导致问题的原因。然后我隔离了超时发生的时间。

有大量的读取,但发生超时错误时和不发生超时错误时的读取没有很大差异。在此期间几乎没有写入(主要是因为每个人都超时而无法写入)。

示例:超时发生在 11:37。平均每分钟有 1500 个事务导致超时,大约有 5709219 次读取。

这似乎很高,除了在超时之间的一段时间(超过十分钟),每分钟有同样多的事务,读取也一样高。读取在超时前会出现一点峰值(跃升至超过 6005708),但在非超时期间,它们高达 8251468。超时在两个应用程序中都发生。

这里更大的问题是,这只是在过去一周才开始发生,并且该应用程序已经启动并运行了几年。所以是的,Profiler 为我们提供了大量数据,但当前的问题是超时。

我应该在 Profiler 中寻找其他什么东西,还是应该移到服务器上的性能监视器(或其他工具)?

一个可能的罪魁祸首可能是数据库大小。数据库相当大 (>200 GB),但 AutoGrow 设置设为 1MB。可能是 SQL Server 正在调整自己的大小并且该事务没有在探查器中显示自己?

非常感谢

sql-server sql-server-profiler

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