我对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
}
如何提高性能,以便我可以在短时间内完成导入,最好不到一天。请帮助我提供实用的解决方案。
由于 杰林
答案 0 :(得分:0)
如果您的服务器具有多个核心,则应使用-AsJob
参数或Start-Job
cmdlet一次启动一个CSV的单线程导入,并且您的主脚本应监视运行的作业数量,一旦服务器上的核心数少于"就会从CSV文件列表中删除更多作业-1"工作正在进行核心数量最好是硬编码的,因为您在开发导入脚本时在时间上显然是严格的。
如果您事先将所有CSV传输到本地存储,那么它会更好。如果你不能,但是由于带宽和远程存储速度限制超出了服务器的现有限制,导入过程可能会变慢。
答案 1 :(得分:0)
不确定您的尺寸分布是什么,但1KB - 30GB是一个相当广泛的范围。一旦你开始超过几百MB,我怀疑内存管理可能会增加很多进程开销并造成性能拖累。
您可以考虑切换到使用-ReadCount执行Get-Content的过程,该过程将其分解为可管理的块以供导入。