如何使用外部数据源有效地更新数据库?

时间:2009-02-09 01:45:17

标签: sql-server database

我正在尝试使用来自多个数据源(即LDAP和一些其他MS SQL数据库)的信息在MS SQL数据库中填充包含用户信息的表。该过程需要作为每日计划任务运行,以确保频繁更新用户信息表。

此查询/更新脚本的初始尝试是在VBScript中编写的,它将查询每个数据源,然后更新用户信息表。不幸的是,运行和更新用户信息表需要很长时间。

我很好奇是否有人写了类似的东西,如果你通过用另一种语言编写脚本来推荐或注意到性能的提高。有些人因为多线程而推荐使用Perl,但如果有人提出改进流程或其他方法的其他建议,你可以分享一些技巧或经验教训。

4 个答案:

答案 0 :(得分:2)

使用数据转换服务(DTS)或SSIS是一种很好的做法,因为它已经因重复数据库任务而闻名。虽然这不会解决您的问题,但它可能会给出一些指示,因为您可以记录进程的每个阶段,将其包装在事务等中。它特别适合批量加载和更新,并且它理解VBScript原则上那里应该没有问题。

除此之外,我必须同意Brian的意见,找出导致它变慢的原因并解决这个问题,更改语言不太可能自行解决,特别是如果你有潜在的问题。总的来说,我使用LDAP的经验非常小,但读者批量用户的详细信息可能会非常慢。

答案 1 :(得分:0)

嗯。好像你可以使用来自各种源的dump utils来编写一个脚本,然后将输出整理成适合目标数据库的load util的形式。该脚本可以是bash或Perl,无论如何。

编辑:在性能方面,我认为您要尝试的第一件事是确保在加载过程开始时禁用任何自动提交,然后在写完所有记录后发出提交。这可能会产生巨大的性能差异。

答案 2 :(得分:0)

我不能告诉你如何解决你的特定问题,但是当你遇到这种情况时,你想要在尝试解决它之前找出它为什么慢。减速在哪里?需要考虑和调查的一些重要事项包括:

  • 获取数据
  • 与网络互动
  • 查询数据库
  • 更新数据库中的索引

获取一些时间和分析信息,以找出集中精力的地方。

答案 3 :(得分:0)

ASTelly先生说,使用SSIS或DTS。然后安排程序包运行。只需转换到这个就可以解决您的速度问题,因为它们具有针对批量插入进行了优化的任务。我绝不会用脚本语言而不是t-SQl来做这件事。可能你的脚本是逐行工作而不是数据集,但这只是猜测。