有什么快速的方法可以找出正在访问您的数据库的内容,尤其是当日志文件变得疯狂时。SQL探查器?如果是这样,如何?
我将 VB6 与 SQLOLEDB 和 MSDASQL 一起使用。通过切换提供程序,我注意到一次查询得到了不同的结果。
我的查询检查一些服务器设置并执行两个 BACKUP 语句之一。
当我使用 SQLOLEDB 时,一切正常并且备份被创建。如果我使用的是 MSDASQL,则不会发生错误,但不会创建备份。
这是同一个服务器、同一个用户和同一个语句。
我使用过 SQL Profiler,它显示 100% 执行了相同的命令。即使我复制 MSDASQL 命令并在 SSMS 中执行它,也会创建备份,但不会使用 VB6。
我的声明:
DECLARE @s varchar(1000), @ver int
SET @ver = 10
SELECT @s = case
WHEN
@ver > 9
THEN
'BACKUP DATABASE [DB] TO DISK = ''C:\SQL Backup\Backup.dat'' WITH COMPRESSION, NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10'
ELSE
'BACKUP DATABASE [DB] TO DISK = ''C:\SQL Backup\Backup.dat'' WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10;' …Run Code Online (Sandbox Code Playgroud) 我正在运行连接到 SQL Server 2012 数据库的 Web 服务。在短时间内(大约 5 秒)内执行多个删除查询时,实际执行的查询似乎是随机的。当一次运行一个或在每次执行之间放置 0.5 秒的延迟时,它们运行完美。
查看 SQL 分析器,所有查询都显示为RPC:Completed即使它们实际上并未删除表中的行。我检查了表,数据仍然存在,然后将查询从 Profiler 复制并粘贴到 SSMS 中,这影响了一行并将其删除。
所以我假设 Web 服务运行良好,问题出在它的数据库端。探查器中有没有办法查看查询是否成功?什么可能导致这实际上不影响行?
没有触发器。仅使用不同的参数运行相同的查询。只有数据通常是按顺序变化的。刚才没有其他查询在数据库上运行。
我添加了客户端站点日志记录,如果它删除该行,它实际上会返回 1,如果它不删除该行,它会返回 0。然而,即使它出现为 0,Profiler 也会显示它已经运行了查询,但似乎没有影响它。当我通过 SSMS 运行查询时,它确实会影响该行。
未收到来自 Web 服务的任何错误,并且查询通过 SSMS 运行良好。只有在快速连续多次运行时似乎不会删除。我确实同意它很可能针对不同的行,但是当它在 SSMS 中运行正常时看不到它是如何发生的。
CREATE TABLE dbo.ContractDates2HumanAssets
(
iContractDate2HumanAssetID int IDENTITY(1,1) NOT NULL,
iContractDateID int NOT NULL,
iHumanAssetID int NOT NULL,
cCategory nvarchar(256) NOT NULL,
cHR_x0020_ID nvarchar(256) NOT NULL,
cCD_x0020_ID nvarchar(256) NOT NULL,
CONSTRAINT PK_ContractDates2HumanAssets PRIMARY KEY CLUSTERED
(
iContractDate2HumanAssetID ASC
) WITH (PAD_INDEX = …Run Code Online (Sandbox Code Playgroud) 在 SQL Profiler 中查看结果时,RPC Complete 是否包括将结果发送到客户端的时间?或者只是服务器花在收集记录上的时间?
我问的原因是我正在开发一个程序来移动大量数据。数据库在 Azure 中托管在云中,代码(当前)在本地运行。我可以在 SQL Profiler 中看到 RPC 调用时间,并且选择行的查询并不便宜(由索引列过滤的海量表,然后按表的主键排序以获得分页结果),并且它不是一个微不足道的数量数据(每页 10 万条记录,在某些情况下,我每次运行最多可移动 6000 万条记录)。
我很好奇,一旦代码在 Azure 中运行,我是否应该期望它运行得更快。如果 RPC 完成时间包括将数据发送到客户端所花费的时间,那么这应该会减少一些(我希望会显着)。如果 RPC 完成时间只是服务器选择数据的时间,那么当它在 Azure 中运行时,我不会看到太多的增加。
是否可以使用 SQL Server Profiler 来跟踪正在运行的 SSIS 包?我试图这样做,但我在跟踪中看到的只是执行 dp_sqlagent_... 和其他内部命令!跟踪中没有显示包正在处理的表/脚本。
我测试了不同的跟踪模板,但没有太多锁定。你有这方面的经验吗?
谢谢你。
干杯,纳西拉
我有一个应用程序由于超时而关闭。在这些时间里,我们看到保存 ASP 会话状态的数据库的响应时间大幅增加。
为了诊断问题,我使用SP_CONFIGURE'blocked process threshold',15并运行跟踪以捕获任何触发的事件。在下一个事件期间,跟踪捕获会话状态数据库中的一些阻塞事件。
我已经确定了主要拦截器,可以看到它已暂停并等待。
<blocked-process-report>
<blocked-process>
<process id="process53fb4c8"
taskpriority="0" logused="0"
waitresource="KEY: 10:72057594039238656 (594b17b7493c)" waittime="20631"
ownerId="9710782702" transactionname="UPDATE"
lasttranstarted="2013-06-27T17:29:38.130" XDES="0xc429df950" lockMode="U"
schedulerid="14" kpid="6912" status="suspended" spid="359" sbid="0" ecid="0"
priority="0" trancount="2" lastbatchstarted="2013-06-27T17:29:38.130"
lastbatchcompleted="2013-06-27T17:29:38.107"
clientapp=".Net SqlClient Data Provider" hostname="WEB03" hostpid="7520"
loginname="State" isolationlevel="read committed (2)" xactid="9710782702"
currentdb="10" lockTimeout="4294967295"
clientoption1="536870944" clientoption2="128056">
<executionStack>
<frame line="18" stmtstart="1114" stmtend="4494"
sqlhandle="0x03000a00210f020741a1be0058a000000100000000000000"/>
</executionStack>
<inputbuf>
Proc [Database Id = 10 Object Id = 117575457]
</inputbuf>
</process>
</blocked-process>
<blocking-process>
<process status="suspended" waittime="1046" spid="217" sbid="0" ecid="0"
priority="0" trancount="1" lastbatchstarted="2013-06-27T17:29:29.113"
lastbatchcompleted="2013-06-27T17:29:29.010" …Run Code Online (Sandbox Code Playgroud) 我刚刚执行了一个非常快的查询,SQL Profiler 说它使用了 30.000 次读取。现在我正在查看此页面:https : //cloud.google.com/compute/docs/disks/performance并看到标准永久性磁盘具有 3000 次读取 IOPS。
这是否意味着我的查询在那里运行时需要 10 秒?或者SQL reads和read IOPS意味着完全不同的事情?
我们有一个带有 15 个数据库的 SQL Server。这被每个数据库中的许多用户同时使用。最近,我们开始从该服务器收到高 CPU 警报。当警报出现时,我可以跟踪到确切的用户和查询。
我们无法在此服务器上打开 SQL Server Profiler。我想知道我们是否可以使用任何脚本获取有关在任何数据库(导致高 CPU)中运行的历史昂贵查询的信息。例如 - 我需要过去 4 小时内最昂贵的查询以及数据库名称和用户名。
使用 SQL Server SQL Profiler,可以使用哪些配置来监视单个存储过程?我想捕获所有EXEC sprocName以包含参数列表。我想捕获这个过程,以便我可以使用真实的参数数据对其进行负载测试。
我在新的 SQL Profiler 跟踪中尝试了以下操作:
Events Selection > Column Filters > Text Data > LIKE: 'exec sprocName%'
Events Selection > Column Filters > Text Data > LIKE: 'exec sprocName'
Run Code Online (Sandbox Code Playgroud)
上述配置均未捕获我的程序。我还尝试使用以下配置删除过程名称:
Events Selection > Column Filters > Text Data > LIKE: 'exec%'
Events Selection > Column Filters > Text Data > LIKE: 'exec'
Run Code Online (Sandbox Code Playgroud)
以上配置不捕获任何程序。
最后,我尝试在没有任何列过滤器的情况下执行相同的配置文件,我可以确认它捕获了发送到 SQL Server 的所有 SQL 查询。
我已经考虑了一种解决方法,即使用 SQL 查询或 Excel Power Query 捕获所有存储过程执行和后过滤到我感兴趣的 sproc。但是,在我想要建模的环境中执行 sproc 的频率很高,这使得这不可行。
我有一个 .net 应用程序。它试图创建表、视图并将数据插入/更新到许多表中。应用程序运行时出现错误。
我尝试在 SQL Profiler 中跟踪查询,但没有发现任何错误。有什么方法可以跟踪错误语句,或者我需要在探查器中添加任何其他事件。
我已经尝试过以下事件(例外):
profiler ×11
sql-server ×9
backup ×1
delete ×1
locking ×1
performance ×1
session ×1
ssis ×1
t-sql ×1