使用UniObjects加速UniVerse访问时间

时间:2012-06-07 17:21:53

标签: c# .net universe uniobjects

我正在访问UniVerse数据库并读取其中的所有记录,以便将其同步到MySQL数据库,该数据库用于与使用该数据的其他一些应用程序兼容。有些表格> 250,000条记录,长度> 100列,服务器相当陈旧,仍然被许多同时用户使用,因此有时需要很长时间来阅读记录。

示例:我执行SSELECT< file> TO 0并开始读取选择列表,将每条记录解析为我们的数据抽象类型并将其放入.NET列表中。根据时刻的不同,取决于数据库的使用情况,获取每条记录的时间可能在250毫秒到3/4秒之间。删除提取方法只会略微加快速度,因为我认为即使我不使用它也会在调用UniFile.read时仍然下载所有记录信息。

以这个速度读取250,000条记录的速度非常慢,所以有人知道我可以加快速度吗?我应该设置一些选项吗?

2 个答案:

答案 0 :(得分:1)

你真的需要使用SSELECT(排序选择)吗?记录键上的排序将产生额外的性能开销。如果您不需要以排序的方式进行同步,只需使用普通的SELECT,这样可以提高性能。

如果这没有帮助,那么尝试自动化同步,以便在系统使用率较低时运行,当少数用户或没有用户登录到UniVerse系统时(如果可能的话)。

除此之外,您导出的某些表可能需要调整大小。如果它们不是动态文件(自动调整大小 - 类型30),它们可能已进入磁盘上的溢出空间。 要找出最大表的大小并查看它们是否已溢出,可以在命令行中使用FILE.STAT和HASH.HELP等命令来检索更多信息。使用HELP FILE.STAT或HELP HASH.HELP查看这些命令的文档,以便提取所需的信息。

如果这些命令显示您的文件类型为30,则数据库引擎会自动调整它们的大小。但是,如果文件类型是类型2到18之间的任何内容,则HASH.HELP命令可能会建议您对表大小进行更改以提高其性能。

如果这些都没有帮助那么您可以使用LIST.INDEX TABLENAME ALL检查表上的有用索引,您可以使用它来加速选择。

答案 1 :(得分:0)

使用ANALYZE-FILE fileName确保文件大小正确。如果不是动态的,确保没有太多的溢出。

使用SELECT而不是SSELECT意味着您要按顺序而不是随机地从数据库中读取数据,并且显着更快。

您还应该研究如何从每条记录中提取数据并将其放入列表中。通常,拾取数据分隔符字符254,253和252将不与外部数据库兼容并且需要转换。如何做到这一点可以对性能产生巨大的影响。

从最初的帖子中不清楚,但是WRITESEQ可能是输出文件数据的最有效方式。