2010-05-10 103 views
0

有没有什么方法可以提高SQL服务器插入的性能,正如你可以在下面看到的,我已经在sql 2005,2008和oracle下面使用了。我正在将数据从ORACLE移动到SQL。SQL Server 2008插入性能问题

虽然插入数据到SQL我正在使用一个过程。

插入到Oracles与SQL相比非常快,有没有什么办法提高性能。或更好的方式将数据从Oracle移动到SQL(数据大小约100000小时记录)

请查看下面的统计数据,因为我收集了RUN1和RUN2时间以毫秒为单位。

http://tinypic.com/view.php?pic=23v19px&s=5 http://i39.tinypic.com/23v19px.jpg

+1

请显示表结构和代码;)要移动数据,您应该只为每个表执行一条语句 - 从链接的oracle表中插入。或者导出,在sql端使用批量加载。 – TomTom 2010-05-10 10:10:25

回答

1

可能是你可以使用Bulk Copy到数据RAM到数据库中。

尽管性能取决于许多因素,包括但不限于磁盘性能,CPU,触发器,索引等。您需要剖析插入程序正在执行的操作,以了解如何改进它。

SQL Server具有一个可帮助您的分析器实用程序。一旦你发现一个瓶颈问在这里如何帮助。否则你的问题是非常一般的。

0

确保您在单个事务中执行批量插入,而不是在各自的事务中进行单次插入。

如果您发布了您编写的实际存储过程,那么评论起来会更容易一些,但如果不了解代码和数据的其他信息,这些数字看起来会非常缓慢。

您可能还想看看sql server中的实际批量插入方法,如“批量插入”命令或sql server集成服务。

+0

是的,批量插入一个事务内是一个好主意 – 2010-05-12 19:36:04

0

很难说没有更多的细节,但你是否通过程序一次插入一行?如果是这样,交易,锁定,连接设置+拆卸等的开销可以为每个人提供一定数量的固定利率罚款INSERT。如果可能的话,批量插入一次插入多行。

例如,如果你最终做类似的信息(每行是一个执行):

INSERT INTO Animals (ID, Name) VALUES (1, 'Dog') 
INSERT INTO Animals (ID, Name) VALUES (2, 'Cat') 
INSERT INTO Animals (ID, Name) VALUES (3, 'Monkey') 
... 
INSERT INTO Animals (ID, Name) VALUES (9999, 'Lemur') 

您的常通过执行一个批处理提高性能,使用技术,像(说):

INSERT INTO Animals (ID, Name) 
SELECT 1 AS ID, 'Dog' AS Name 
UNION ALL SELECT 2, 'Cat' 
UNION ALL SELECT 3, 'Monkey' 
... 
UNION ALL SELECT 9999, 'Lemur' 
1

如果它是迁移(即完成一次),我想不要自己编写代码,而是尝试特别的实用程序。请参阅Sql Data Examiner。 我们使用它来同步开发人员和生产数据库结构更改以及数据更改。 数据审查员都支持Oracle和SQL服务器