Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Powershell多线程和oracle过程_Multithreading_Oracle_Powershell_Stored Procedures - Fatal编程技术网

Multithreading Powershell多线程和oracle过程

Multithreading Powershell多线程和oracle过程,multithreading,oracle,powershell,stored-procedures,Multithreading,Oracle,Powershell,Stored Procedures,我有一个文件列表,在1分钟内增加了5个,永远不会结束。我使用oracle过程将此数据插入数据库。(方法外部表格) 然后我从Powershell调用此过程,如下所示 ForEach ($file in $files) { #executing the calculate procedure executeStoredProcedure -value sp_load_table_crm -filename $file.Name -conn } 这很好用。但这需要很

我有一个文件列表,在1分钟内增加了5个,永远不会结束。我使用oracle过程将此数据插入数据库。(方法外部表格)

然后我从Powershell调用此过程,如下所示

ForEach ($file in $files) { 
    #executing the calculate procedure      
    executeStoredProcedure -value sp_load_table_crm -filename $file.Name -conn 
} 
这很好用。但这需要很长时间,而且想要加快速度。 使用多线程或多处理哪个更好?
我计划在windows任务计划程序上设置此powershell脚本

您可以使用运行空间。试试这个:

$Files = @('File1','File2','File3') #list of your files

$Throttle = 10 #number of threads
$RunspacePool = [RunspaceFactory]::CreateRunspacePool(1, $Throttle)
$RunspacePool.Open()

$Jobs = @()
$ScriptBlock = {
    Param($File)
    #place your executeStoredProcedure function inside the script block or make sure it will be loaded with the appropriate module via profile     
    executeStoredProcedure -value sp_load_table_crm -filename ($File.Name) -conn #heres your function and its parameters
}

$Files | % {
    $File = $_
    $Job = [powershell]::Create().AddScript($ScriptBlock).AddArgument($File)
    $Job.RunspacePool = $RunspacePool
    $Jobs += New-Object PSObject -Property @{
      Pipe = $Job
      Result = $Job.BeginInvoke()
   }
}

Write-Host "Waiting.." -NoNewline
Do {
   Write-Host "." -NoNewline
   Start-Sleep -Seconds 1
} While ( $Jobs.Result.IsCompleted -contains $false)
Write-Host "All jobs completed!"

$Results = @()
ForEach ($Job in $Jobs)
{   $Results += $Job.Pipe.EndInvoke($Job.Result)
}
$Results | ft -Wrap -AutoSize

您可以使用运行空间。试试这个:

$Files = @('File1','File2','File3') #list of your files

$Throttle = 10 #number of threads
$RunspacePool = [RunspaceFactory]::CreateRunspacePool(1, $Throttle)
$RunspacePool.Open()

$Jobs = @()
$ScriptBlock = {
    Param($File)
    #place your executeStoredProcedure function inside the script block or make sure it will be loaded with the appropriate module via profile     
    executeStoredProcedure -value sp_load_table_crm -filename ($File.Name) -conn #heres your function and its parameters
}

$Files | % {
    $File = $_
    $Job = [powershell]::Create().AddScript($ScriptBlock).AddArgument($File)
    $Job.RunspacePool = $RunspacePool
    $Jobs += New-Object PSObject -Property @{
      Pipe = $Job
      Result = $Job.BeginInvoke()
   }
}

Write-Host "Waiting.." -NoNewline
Do {
   Write-Host "." -NoNewline
   Start-Sleep -Seconds 1
} While ( $Jobs.Result.IsCompleted -contains $false)
Write-Host "All jobs completed!"

$Results = @()
ForEach ($Job in $Jobs)
{   $Results += $Job.Pipe.EndInvoke($Job.Result)
}
$Results | ft -Wrap -AutoSize

“在一分钟内增加5个”的列表是如何结束的?你能详细说明一下吗?我的意思是“还有其他进程正在运行并将文件传输到特定的文件夹,文件数量将在1分钟内增加5个文件”。所以我的加载过程应该每次都运行。一旦文件插入数据库,我将从特定文件夹中删除它。或者我应该使用DBMS\u PARALLEL\u EXECUTE.run\u任务吗?我需要决定哪种方式更好,如果有人有经验的话,那么请直接告诉meIMHO你真的不能期待一个好的答案。如果您为每种可能性构建测试用例,您会做得更好(并且可以向您的经理证明您为什么这么做)。但似乎最有可能的瓶颈是将数据插入数据库,你们有那个么好的设计和监控吗?或者让加载过程在循环中运行每种类型,然后查看计时信息,看看哪种类型最适合您的环境。例如,凌晨2点可能会有一些差异,这些差异会暴露出需要修复的其他调优问题。祝你好运,“1分钟内增加5个”怎么说?你能详细说明一下吗?我的意思是“还有其他进程正在运行并将文件传输到特定的文件夹,文件数量将在1分钟内增加5个文件”。所以我的加载过程应该每次都运行。一旦文件插入数据库,我将从特定文件夹中删除它。或者我应该使用DBMS\u PARALLEL\u EXECUTE.run\u任务吗?我需要决定哪种方式更好,如果有人有经验的话,那么请直接告诉meIMHO你真的不能期待一个好的答案。如果您为每种可能性构建测试用例,您会做得更好(并且可以向您的经理证明您为什么这么做)。但似乎最有可能的瓶颈是将数据插入数据库,你们有那个么好的设计和监控吗?或者让加载过程在循环中运行每种类型,然后查看计时信息,看看哪种类型最适合您的环境。例如,凌晨2点可能会有一些差异,这些差异会暴露出需要修复的其他调优问题。祝你好运。很高兴被证明是错的。我学到了一些东西。我希望它能帮助O.P.祝大家好运。@KirillPashkov,谢谢你的脚本,不过它工作正常,但似乎没有调用过程。当我在没有脚本的情况下调用过程时,该过程是在powershell中调用的。我在这个剧本上首次登台,但这个过程并没有停止。我哪里出错了。@user347918,请确保将ExecuteStoreProcedure函数defentition放入$ScriptBlock中,以便它可以识别出来。很高兴被证明是错误的。我学到了一些东西。我希望它能帮助O.P.祝大家好运。@KirillPashkov,谢谢你的脚本,不过它工作正常,但似乎没有调用过程。当我在没有脚本的情况下调用过程时,该过程是在powershell中调用的。我在这个剧本上首次登台,但这个过程并没有停止。我哪里出错了。@user347918,请确保将ExecuteStoreProcedure函数defentition放入$ScriptBlock中,以便它可以识别出来。