SQL Server 2005:提高數千或插入請求的性能。 logout-login time = 120ms

bulkinsert flat-file import sqlbulkcopy sql-server-2005

有人可以了解SQL Server 2005如何處理請求客戶端使用ADO.NET 2.0發出的請求。下面是SQL Trace的shortend輸出。我可以看到連接池正在工作(我相信只有一個連接正在匯集)。我不清楚的是為什麼我們有如此多的sp_reset_connection調用,即一系列:Audit Login,SQL:BatchStarting,RPC:下面for循環中每個循環的啟動和審核註銷。我可以看到tempdb和master數據庫之間有不斷的切換,這使我得出結論,我們在創建下一個連接時通過基於ConectionString參數從池中獲取它來丟失上下文。

我可以看到,每隔15ms,我每秒可以獲得100-200次登錄/註銷(由Profiler同時報告)。在15ms之後,我再次獲得了每秒100-200登錄/註銷的系列。

我需要澄清這可能會如何影響生產環境中的複雜插入查詢。我使用Enterprise Library 2006,代碼是使用VS 2005編譯的,它是一個控制台應用程序,它解析一個平面文件,其中有10萬行分組父子行,在應用程序服務器上運行並在遠程SQL上運行2個存儲過程Server 2005插入父記錄,檢索Identity值並使用它調用第二個存儲過程1,2或多次(有時幾千)插入子記錄。子表有近1000萬條記錄,有5-10個索引,其中一些覆蓋非群集。有一個非常複雜的Insert觸發器,它將插入的詳細記錄複製到存檔表中。總而言之,我每秒只有7個插入,這意味著它可能需要2-4小時才能獲得5萬條記錄。當我在測試服務器上運行Profiler(幾乎與生產服務器相同)時,我可以看到審核註冊和審核登錄跟踪條目之間大約有120毫秒,幾乎讓我有機會插入大約8條記錄。

所以我的問題是,如果有一些方法可以改善記錄的插入,因為公司加載了100千條記錄並進行日常計劃,並且SLA可以滿足客戶端請求,而平面文件訂單和一些大文件需要處理10萬個(快速進口)。進口4小時60萬應減少到30分鐘。

我正在考慮使用DataAdapter的BatchSize發送多個存儲過程調用,SQL批量插入從DataReader或DataTable批量多次插入,SSIS快速加載。但我不知道如何正確分析重新索引和統計數據,也許這需要一些時間才能完成。更糟糕的是,該公司使用最大的表格進行報告和其他在線處理,並且索引不能被刪除。我通過將字段設置為值來手動管理事務,並執行事務更新,將該值更改為其他應用程序用於獲取已提交行的新值。

請告知如何解決此問題。現在我試圖在一個單獨的數據庫中創建一個具有最少日誌記錄的登台表,並且沒有索引,我將嘗試進行批量(大量)父子插入。我相信Production DB具有簡單的恢復模式,但它可以完全恢復。如果我的.NET控制台應用程序正在使用的DB用戶具有bulkadmin角色,則表示其批量插入的記錄最少。我知道當一個表已經聚集時,仍會為每一行記錄許多插入的非聚集索引。

連接池工作正常,但有許多登錄/註銷。為什麼?

for(int i = 1; i <= 10000; i ++){using(SqlConnection conn = new SqlConnection(“server =(local); database = master; integrated security = sspi;”)){conn.Open(); using(SqlCommand cmd = conn.CreateCommand()){cmd.CommandText =“use tempdb”; cmd.ExecuteNonQuery();}}}

SQL Server Profiler跟踪:

審核登錄主人2010-01-13 23:18:45.337 1 - 非合併
SQL:BatchStarting使用tempdb master 2010-01-13 23:18:45.337
RPC:啟動exec sp_reset_conn tempdb 2010-01-13 23:18:45.337
Audit Logout tempdb 2010-01-13 23:18:45.337 2 - 合併
審核登錄 - 網絡協議大師2010-01-13 23:18:45.383 2 - 合併
SQL:BatchStarting使用tempdb master 2010-01-13 23:18:45.383
RPC:啟動exec sp_reset_conn tempdb 2010-01-13 23:18:45.383

Audit Logout tempdb 2010-01-13 23:18:45.383 2 - 合併
審核登錄 - 網絡協議大師2010-01-13 23:18:45.383 2 - 合併
SQL:BatchStarting使用tempdb master 2010-01-13 23:18:45.383
RPC:啟動exec sp_reset_conn tempdb 2010-01-13 23:18:45.383
Audit Logout tempdb 2010-01-13 23:18:45.383 2 - 合併

熱門答案

“寫入日誌文件”是什麼意思?您的意思是我需要解析平面文件,進行本地字段轉換,根據父行和詳細信息行進行一些計算,並輸出到文件系統上的分隔文件或BCP fmt文件所需的格式並使用批量插入。我正在考慮使用以下任一技術:使用eggheadcafe.com上的SqlBulkCopy加速復制操作

生產者/消費者模式http://sqlblog.com/blogs/alberto_ferrari/archive/2009/11/30/sqlbulkcopy-performance-analysis.aspx

謝謝,Rad



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow