Sybase性能问题:INSERT SELECT

时间:2015-02-10 04:51:27

标签: sql database performance sybase

我是Sybase的新手,我们在查询性能方面遇到了麻烦。希望有人可以提供帮助。

有问题的代码与此相似:

INSERT INTO #table
    SELECT lt.id, rt.id
    FROM local_table lt
    JOIN remote_table rt ON rt.id = lt.id
    WHERE ...

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

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

一些观察结果是:

  • 如果我删除了insert语句,SELECT查询将快速执行。
  • 如果我将语句转换为SELECT INTO,则查询运行正常。
  • 如果查询被拆分为两个(从远程表INSERT SELECT,然后删除本地表中不存在的额外记录),则查询运行正常。

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

我会感激你的帮助。非常感谢你!

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

  

等待CTLIB事件完成

1 个答案:

答案 0 :(得分:1)

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

  • 查看查询计划(设置showplan on)并查看是否有意义

  • 在表和代理表上运行update statistics并查看是否提供了更好的查询计划

  • 查看启用联接重定位是否提供了更好的查询计划:运行" sp_dboption yourdb,'加入重定位',true"在本地服务器和" sp_dboption tempdb,' ddl in tran',true"在远程服务器

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

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