powershell数据导入性能

时间:2014-05-23 05:26:47

标签: powershell

我对PowerShell数据导入SQL有一个问题。 我将放置在远程服务器中的数据导入CSV文件执行到另一个DB服务器。大约有2400个CSV文件,大小从1KB到30GB不等。我正在阅读每个文件内容并将其导入到DB。但是这需要一天多的时间来完成大约一千个文件,所以为了完成所有2400个文件,将会有两三个文件。但这并未就业务达成一致。我使用folowing命令导入文件。

Get-ChildItem $CsvFilePath | Foreach-Object {
    $DataImport = Import-Csv $_.FullName | Out-DataTable
    Write-DataTable -ServerInstance $server -Database $Database -TableName $Table -Username $Username -Password $Password -Data $DataImport
} 

如何提高性能,以便我可以在短时间内完成导入,最好不到一天。请帮助我提供实用的解决方案。

由于 杰林

2 个答案:

答案 0 :(得分:0)

如果您的服务器具有多个核心,则应使用-AsJob参数或Start-Job cmdlet一次启动一个CSV的单线程导入,并且您的主脚本应监视运行的作业数量,一旦服务器上的核心数少于"就会从CSV文件列表中删除更多作业-1"工作正在进行核心数量最好是硬编码的,因为您在开发导入脚本时在时间上显然是严格的。

如果您事先将所有CSV传输到本地存储,那么它会更好。如果你不能,但是由于带宽和远程存储速度限制超出了服务器的现有限制,导入过程可能会变慢。

Some data about Powershell jobs to digest.

答案 1 :(得分:0)

不确定您的尺寸分布是什么,但1KB - 30GB是一个相当广泛的范围。一旦你开始超过几百MB,我怀疑内存管理可能会增加很多进程开销并造成性能拖累。

您可以考虑切换到使用-ReadCount执行Get-Content的过程,该过程将其分解为可管理的块以供导入。