如果你执行这样的语句:
select first field1, field2 from exampleTable where field1 = '1';
Run Code Online (Sandbox Code Playgroud)
然后你会收到这样的警告:
返回的结果是不确定的 SQLCode=122
到目前为止一切正常,因为在这种情况下,您需要一个“order by”子句。
但是当你在 BEGIN END 块中使用相同的语句将值放入一些声明的变量中时,
BEGIN
declare varField1 varchar;
declare varField2 varchar;
select first field1, field2 into varField1, varField2
from exampleTable
where field1 = '1';
END
Run Code Online (Sandbox Code Playgroud)
警告没有出现!为什么?
这里不需要“order by”子句吗?这个陈述是突然确定的吗?...
(使用 SQL Anywhere 12)
我们在其中一台服务器上运行后台任务,该任务轮询sys.dm_exec_requests
长时间运行的查询,并在找到它们时收集诊断信息,包括等待类型。
我在SQLTRACE_FILE_BUFFER
等待中看到了许多查询。这在我看过的任何地方都没有记录 - 我想知道是否有人有关于这种等待类型的更多信息?
顾名思义,将跟踪数据写入磁盘存在延迟;我们在实例上运行了一个服务器端跟踪,该跟踪会写入文件以进行审计和性能监控。
SAN 管理员告诉我我们有可用的 IOPS,所以我认为这不是一个简单的 I/O 问题。我还应该检查什么?
更新
我们禁用了服务器端跟踪并继续看到相同的问题;最新的想法是SQLTRACE_FILE_BUFFER
等待是内存压力的症状(在将跟踪缓冲区写入磁盘时使用了不同的记录等待类型 - SQLTRACE_BUFFER_FLUSH
- 没有出现)。
更新 2
禁用默认跟踪将删除等待。我们仍在调查性能问题的根本原因。
我们在 sql 数据库上有一个事务日志,由于某种原因,当我们的实时系统只有大约 2GB 时,它已填满了 50GB。有什么方法可以分析 sql 或事务日志来尝试找出为什么这个特定的日志增长如此之多?