【问题标题】:Sybase performance issue: INSERT SELECTSybase 性能问题:INSERT SELECT
【发布时间】:2015-04-10 01:18:30
【问题描述】:

我是 Sybase 的新手,我们在查询性能方面遇到了问题。希望有人能帮忙。

有问题的代码类似这样:

插入#table 选择 lt.id, rt.id FROM local_table lt 加入 remote_table rt ON rt.id = lt.id 在哪里 ...

本地用户表和引用位于另一个数据库中的代理表的本地视图之间存在连接。代理表正在连接到另一台服务器。该查询基本上是连接本地和远程表并将结果插入到临时表中。

即使插入 0 条记录,查询也需要永远执行。

一些观察结果是:

  • 如果我删除插入语句,SELECT 查询会执行得很快。
  • 如果我将语句转换为 SELECT INTO,则查询运行良好。
  • 如果查询一分为二,(从远程表插入 SELECT,然后删除本地表中不存在的额外记录)查询运行正常。

是否存在可以提高此类查询性能的配置设置,因此不会有代码更改?处理此问题的最佳方法是什么?

感谢您的帮助。非常感谢!

编辑:顺便说一句,在我们的跟踪中,它发出了这种等待:

等待 CTLIB 事件完成

【问题讨论】:

  • 您是否有不想使用select into的原因?
  • 嗨迈克尔,因为它会在整个数据库中的许多存储过程中引入代码更改!我想知道是否有一种不那么痛苦的方法可以用最少的努力来解决这个问题。感谢您的光临。

标签: sql database performance sybase


【解决方案1】:

您应该按照以下步骤操作:

  • 检查查询计划(设置显示计划),看看是否有意义

  • 对表和代理表运行更新统计信息,看看是否能提供更好的查询计划

  • 查看启用连接重定位是否能提供更好的查询计划:在本地服务器中运行“sp_dboption yourdb, 'join relocation', true”,在远程服务器中运行“sp_dboption tempdb, 'ddl in tran', true”

  • 如果您需要查看与远程服务器的完整交互,请运行“dbcc traceon(11205)”,这会将交互记录在 ASE 错误日志中

在完成这些步骤之后,您至少应该对发生了什么以及原因有了更好的了解,如果问题没有解决的话。

【讨论】:

  • 您好 RobV,感谢您分享您的专业知识。我在您的第三个项目符号中看不到该选项:运行“sp_dboption yourdb, 'join relocation', true”。想试试这个。我正在使用 Sybase ASE 15.7。你能帮忙吗?
  • 当我尝试运行时:exec sp_dboption , 'join relocation', true 它会生成“数据库选项不存在或您无法设置选项。”
  • 抱歉,它是:sp_serveroption , 'relocated joins', true
  • 嗨 RobV,我在本地服务器中尝试了“重定位连接”并在远程服务器中启用了“ddl tran”,但查询仍然很慢。猜猜,我需要更改代码以将查询分成两部分。
猜你喜欢
  • 2018-01-29
  • 2017-01-05
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多