所以我在这里有这个 MySQL InnoDB 查询:
SELECT s.vid, s.body, s.timestamp, COUNT(v.id) AS votecnt
FROM stories s
LEFT JOIN votes v ON s.vid = v.vid
WHERE s.lv = 1
AND s.status = 1
GROUP BY s.vid
ORDER BY votecnt DESC
Run Code Online (Sandbox Code Playgroud)
分析显示,运行此查询所需时间的 93% 以上需要复制到结果临时表,以便通过votecnt 进一步排序。可以做些什么来使其更快?
解释输出:
| 1 | 简单 | | 参考 | 最新 | 最新 | 2 | 常量,常量 | 19873 | 使用哪里;使用临时;使用文件排序 |
| 1 | 简单 | v | 参考 | 投票 | 投票 | 4 | sikna_ci.s.vid | 1 …
我只是从带有高级服务的 SQL Server 2008 Express 升级到开发版。我想知道开发版是否可以使用 SQL Profiler?
如果存在,请告诉我如何访问它。
我正在尝试在远程服务器上设置跟踪。我能够通过 sql server 生成跟踪、设置过滤器,甚至停止和删除跟踪,而不会出现问题。但是,使用 sp_trace_create 创建的文件似乎归 SQL 服务所有,我没有授予自己读取访问权限的管理权限。
trace_files_publicSQL Server 2008 R2是否有类似于 Oracle 的东西? “有一个未公开的参数 _trace_files_public,如果设置为 true,则会在创建跟踪文件时更改 user_dump_dest 目录中的文件权限,以允许所有人读取它们。” (http://www.petefinnigan.com/ramblings/how_to_set_trace.htm)
有没有办法通过 SMSS 查看内容(因为我似乎在那里有足够的权限,如果不是文件本身?)
还有什么我没有考虑过的更好的东西?
对不起,如果我的术语很粗糙——整个 dba 的事情对我来说都是新的。
提前致谢!我的系统管理员不会被窃听以设置权限(再次)。
我正在尝试诊断生产 SQL Server 实例的问题。我已经要求 DBA 提供跟踪并获得了一组 SQL 跟踪文件(准确地说是 1185 个文件)。
当我打开第一个文件时,SQL Profiler 检测到其他跟踪文件的存在并提示我逐个加载- 这种方法不能扩展到 1185 个文件。
最终,我想要的是将所有跟踪数据导入 SQL 服务器,以便我可以查询它。
你能推荐一种方法或工具来让我做到这一点吗?
使用 LOAD DATA INFILE 插入到 innodb 的 2M 行需要 7.5 分钟,分析显示 99% 的时间在“系统锁定”中。
这能告诉我什么有用吗?
mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)
mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 1964807 rows affected, 8 warnings (7 min 27.35 sec)
Records: 1964806 Deleted: 1 Skipped: 0 Warnings: 8
mysql> show profile for query 1;
+------------------------------+------------+
| Status | Duration |
+------------------------------+------------+
| starting | 0.000206 |
| checking permissions | 0.000015 | …Run Code Online (Sandbox Code Playgroud) 我启动了 SQL Profiler 来捕捉服务器上正在执行的操作,其中我发现了一行说明:
SQL BatchStarting: insert bulk table_name <column_list>
Run Code Online (Sandbox Code Playgroud)
但没有价值观?
如何查看应用程序接受的数据库?
SQL Profiler 捕获的许多事件都包含一个二进制数据列。这些事件类的文档只是重复了这一事实,即该列包含“依赖于跟踪中捕获的事件类的二进制值”。
我对RPC:Starting和RPC:Completed事件特别感兴趣;我注意到,无论何时执行相同的查询,每个事件的二进制数据都是相同的,尽管开始和完成事件具有不同的二进制数据。但是其他事件也会在此处显示我对解码感兴趣的信息。当然,这假设数据甚至相关或有意义。
这些字段的内容是否记录在任何地方,对开发人员/管理员是否有意义?
我设置了一个 SQL 分析器来运行,但我没有看到任何更新/插入值。有没有办法看到他们?
我看到的都是这样的:
insert into some_tbl(id, col1, col2, col3) values ( @P0 , @P1 , @P2 )
Run Code Online (Sandbox Code Playgroud)
我很想真正看到插入的值而不仅仅是一个通用变量,但似乎无法弄清楚?
我有一个问题,某个存储过程偶尔会消失,我需要找出哪个脚本删除了它。我发现这段代码给出了与删除这个存储过程相关的事件。
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
LoginName,
HostName,
StartTime,
ObjectName,
TextData
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 47 -- Object:Deleted
AND EventSubClass = 1
AND ObjectName like N'%usp_GetPendingConfiguration%'
ORDER BY StartTime DESC;
Run Code Online (Sandbox Code Playgroud)
有没有办法可以找到哪个存储过程或事件删除了这个存储过程?请指教。
sql-server-2008 stored-procedures profiler extended-events trace
我有一个非常繁忙的数据库,我被要求寻找回滚的事务。
我使用 SQL Server Profiler 来监视TM: RollbackTran Completed 事件,这表明每分钟都会发生几十个这样的事件,但它没有给我任何关于正在回滚的事务、回滚影响的对象的任何指示,或者回滚发生的原因。简而言之,它的用途似乎非常有限。
例如,如果我还尝试进行监控,以便为SQL:StmtStarting回滚提供一些上下文,那么在这个繁忙的环境中只会有太多噪音,无法识别哪个语句负责回滚。
我也试过运行语句
SELECT *
FROM fn_dblog (NULL, NULL)
WHERE Operation = 'LOP_ABORT_XACT';
Run Code Online (Sandbox Code Playgroud)
但这并没有返回任何结果(考虑到 SQL Profiler 报告的回滚次数,这似乎很奇怪)。
有什么方法可以生成显示已回滚事务的报告?
蒂亚!