【发布时间】:2020-06-27 06:56:01
【问题描述】:
我维护了一些在 RH Linux 上运行的遗留代码,这些代码通过网络将插入发送到客户端的 Sybase。我们使用的是 Sybase 12.5 库,刚刚迁移到使用 Sybase 15.0 客户端库。
我的应用程序记录了它通过网络发送插入的时间以及它从目标 Sybase 获得确认的时间。使用 12.5 库时大约需要 5 毫秒,现在使用 15.5 库时大约需要 50 毫秒。
我在应用程序方面所做的唯一更改是在命令行上指定接口文件的位置。以前,该文件位于默认位置 - Sybase 安装位置。现在它位于应用程序的部署位置,因此需要明确指定位置。
有没有人知道是什么导致了速度的急剧变化,或者有关于我可以在哪里寻找的提示或关于如何追踪根本原因的想法?
请原谅缺乏技术细节。我不是数据库管理员,而是使用已编译库连接到 Sybase 并且无权访问细节的开发人员。话虽如此,我在这两种情况下都使用相同的内部库,只是 Sybase 库不同。
我的 Sybase 12.5 和 15 安装如下所示:
$ ls -l /opt/sybase/
total 48
-rw-r--r-- 1 root root 555 Jul 2 2019 ASE150.csh
-rw-r--r-- 1 root root 259 Jul 2 2019 ASE150.env
-rw-r--r-- 1 root root 388 Jul 2 2019 ASE150.sh
drwxr-xr-x 10 root root 4096 Feb 2 2017 OCS-15_0
-rw-r--r-- 1 root root 555 Jul 2 2019 SYBASE.csh
-rw-r--r-- 1 root root 259 Jul 2 2019 SYBASE.env
-rw-r--r-- 1 root root 388 Jul 2 2019 SYBASE.sh
drwxr-xr-x 58 root root 4096 Jul 2 2019 charsets
drwxr-xr-x 3 root root 4096 Jul 2 2019 collate
drwxr-xr-x 2 root root 4096 Nov 23 20:55 config
-rw-r--r-- 1 root root 1239 Jul 2 2019 interfaces
drwxr-xr-x 5 root root 4096 Nov 23 20:55 locales
$ ls -l ~/12_5/sybase/
total 28
drwxrwxr-x 4 oadc oadc 4096 Nov 29 2017 OCS-12_5
drwxrwxr-x 58 oadc oadc 4096 Nov 29 2017 charsets
drwxrwxr-x 2 oadc oadc 4096 Mar 16 09:45 config
drwxrwxr-x 2 oadc oadc 4096 Mar 16 09:45 include
-r-xr-xr-x 1 oadc oadc 1184 Mar 16 09:45 interfaces
drwxrwxr-x 2 oadc oadc 4096 Mar 16 09:45 lib
drwxrwxr-x 5 oadc oadc 4096 Mar 16 09:45 locales
编辑
经过一番挖掘,看起来 OCS-12-5 下的库实际上不是针对 12_5 而是针对 15_5!
$ 字符串 sybase/OCS-12_5lib/libsybct*.a | grep "Sybase 客户端库" Sybase 客户端库/15.5/P/DRV.15.5.0/Linux x86_64/Linux 2.6.9-55.ELsmp x86_64/BUILD1550-003/64bit/OPT/Mon Oct 5 23:16:48 2009 Sybase Client-Library/15.5/P/DRV.15.5.0/Linux x86_64/Linux 2.6.9-55.ELsmp x86_64 Native Threads/BUILD1550-003/64bit/OPT/Tue Oct 6 00:06:57 2009
这意味着我认为 12.5 比 15.0 快的假设是错误的。实际发生的是 15.5 比 15.0 快。哪个更有意义。
我不会去追捕将这些文件提交到标有 OCS-12-5 的目录中的白痴......
【问题讨论】:
-
您是否刚刚将 (ASE) 数据库从 12.x 迁移到 15.7?如果是这样,您可能会因过多的编译阶段而产生大量开销(ASE 15.0 中引入的“新”优化器的副作用);为了解决这个问题,有 3 个选项... 1)让应用程序使用准备好的语句,2)让 DBA 使用语句缓存和“启用文字自动参数”配置 ASE 和/或 3)如果这些对你不起作用可能需要查看查询重写(例如,如果插入导致触发器触发,则可能需要对触发器代码进行一些 P&T 分析)
-
您好@markp-fuso,感谢您的评论。为了清楚起见,我们没有迁移数据库。改变的是我们用来连接 Sybase 的一组客户端库。以前我们使用的是 12.5 库,现在我们使用的是 15.0 库。目标数据库没有改变。
标签: sybase-ase15