簡體   English   中英

Powershell SQL Server插入 - 最佳實踐

[英]Powershell SQL Server Insert - Best Practice

我有一個腳本,每天遍歷一個目錄中的幾千個文件,並希望更新一個SQL Server表,其中包含每個文件的詳細信息,因為它們是在foreach循環中處理的。

我已經在foreach循環中使用了以下工作:

Invoke-Sqlcmd -Query "INSERT INTO $dbTable (name, date, worknum, identifier) VALUES ('$name','$date','$worknum','$identifier')" 
              -ServerInstance $dbHost -Database $dbName -ErrorAction Stop

雖然這很好用,但我想知道在文件處理開始之前將這種方法更改為建立SQL Server連接是否有任何好處,並在腳本結束時關閉它? 像這樣的東西......

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$dbHost;Database=$dbName;Integrated Security=True;"

<foreach loop>

$SqlConnection.Close()

我不關心腳本運行的速度,因為它已經非常快,更多的是關於不影響DB性能。

如評論中所述,您需要針對實例配置和現有工作負載進行測試,以確定解決方案是否具有高性能。

我有一個類似於PowerShell“app”的經驗,它獲取了一個帳戶標識符列表,然后將它們插入到表中供我們進一步處理。 該應用程序正在迭代每個ID並最初為每個ID執行INSERT。 這對大多數用戶來說都沒問題,但偶爾有人會放入100k + ID並且應用程序的性能很可怕! (但SQL服務器保持按預期執行)使用SqlBulkCopy速度,對客戶端進行極大的處理,對SQL服務器也沒有明顯的影響。 (只有擁有大量記錄的人才能獲得好處。盡管如此,<100條記錄沒有真正的變化。)

Write-DataTableOut-DataTable是方便的功能,必須使這更容易。

我的感情,最佳實踐....

Eugene Philipov有一篇關於測試的文章 ,他們在單值插入,多值插入和BulkCopy之間的數據加載方法性能方面做了很多。 他們發現插入的列數對操作速度有很大影響。 列越多,您在插入中使用多個值或使用批量復制時獲得的好處就越少。 但是,每個記錄使用一個插入總是較慢(按執行時間)。

更快的執行==您將阻止/消耗其他工作流所需資源的機會減少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM