麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法

2024-08-31 01:03:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法,需要的朋友可以參考下
 

背景:
我們?cè)谑褂脭?shù)據(jù)庫(kù)的過(guò)程中,很多時(shí)候要追求性能,特別在處理大批量數(shù)據(jù)的時(shí)候更希望快速處理。那么對(duì)SQL SERVER而言,數(shù)據(jù)庫(kù)實(shí)現(xiàn)大批量插入的優(yōu)化方案,這里特別介紹通過(guò)大容量插入的一種方式。
基本原理:
簡(jiǎn)單恢復(fù)模式按最小方式記錄大多數(shù)大容量操作,對(duì)于完整恢復(fù)模式下的數(shù)據(jù)庫(kù),大容量導(dǎo)入期間執(zhí)行的所有行插入操作被完整地記錄到事務(wù)日志中。如果數(shù)據(jù)導(dǎo)入量較大,會(huì)導(dǎo)致迅速填滿事務(wù)日志。對(duì)于大容量導(dǎo)入操作,按最小方式記錄比完整記錄更有效,并減少了大容量導(dǎo)入操作填滿日志空間的可能性,所以性能會(huì)得到極大的提升。
       但是,大容量導(dǎo)入中按最小方式記錄日志的前提條件需要滿足:
1. 當(dāng)前沒(méi)有復(fù)制表
2. 指定了表鎖定: 

注意:鎖定是 SQL Server 數(shù)據(jù)庫(kù)引擎用來(lái)對(duì)多個(gè)用戶同時(shí)訪問(wèn)同一數(shù)據(jù)塊的操作進(jìn)行同步。當(dāng)事務(wù)修改某個(gè)數(shù)據(jù)塊時(shí),它將持有保護(hù)所做修改的鎖,直到事務(wù)結(jié)束。指定大容量導(dǎo)入操作的表鎖定后,該表將在大容量導(dǎo)入操作期間采取大容量更新 (BU) 鎖定。大容量更新 (BU) 鎖允許多個(gè)線程將數(shù)據(jù)并發(fā)地大容量導(dǎo)入到同一表中,同時(shí)阻止其他不進(jìn)行大容量導(dǎo)入數(shù)據(jù)的進(jìn)程訪問(wèn)該表。表鎖定可以通過(guò)減少表的鎖爭(zhēng)用來(lái)提高大容量導(dǎo)入操作的性能。
基本的理論信息還很多,這里不再累述。 

在阿里云SQL SERVER的主備架構(gòu)中,使用大容量插入時(shí),使用時(shí)需要特別留意一個(gè)特性需要明確指定,如果不指定,會(huì)觸發(fā)微軟尚未在SQL Server 2008 R2中未修復(fù)的BUG,會(huì)導(dǎo)致鏡像SUSPEND,那么如何來(lái)避免各種情況呢? 下面列舉了一些常見的場(chǎng)景:
 1、通過(guò)ado.net sqlbulkcopy 方式:
只需要將SqlBulkCopy 指定SqlBulkCopyOptions.CheckConstraints就好,數(shù)據(jù)庫(kù)指定AdventureWorks2008R2的Person表。舉個(gè)例子:

static void Main(){  string srcConnString = "Data Source=(local);Integrated Security=true;Initial Catalog=testdb";  string desConnString = "Data Source=****.sqlserver.rds.aliyuncs.com,3433;User ID=**;Password=**;Initial Catalog=testdb";   SqlConnection srcConnection = new SqlConnection();  SqlConnection desConnection = new SqlConnection();   SqlCommand sqlcmd = new SqlCommand();  SqlDataAdapter da = new SqlDataAdapter();  DataTable dt = new DataTable();   srcConnection.ConnectionString = srcConnString;  desConnection.ConnectionString = desConnString;  sqlcmd.Connection = srcConnection;   sqlcmd.CommandText = @"SELECT top 1000000 [PersonType],[NameStyle],[Title],[FirstName],[MiddleName],[LastName],[Suffix],[EmailPromotion]           ,[AdditionalContactInfo],[Demographics],NULL as rowguid,[ModifiedDate] FROM [testdb].[dbo].[Person]";  sqlcmd.CommandType = CommandType.Text;  sqlcmd.Connection.Open();  da.SelectCommand = sqlcmd;  da.Fill(dt);    using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.CheckConstraints))  //using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.Default))  {    blkcpy.BatchSize = 2000;    blkcpy.BulkCopyTimeout = 5000;    blkcpy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);    blkcpy.NotifyAfter = 2000;     foreach (DataColumn dc in dt.Columns)    {      blkcpy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);    }     try    {      blkcpy.DestinationTableName = "Person";      blkcpy.WriteToServer(dt);    }    catch (Exception ex)    {      Console.WriteLine(ex.Message);    }    finally    {      sqlcmd.Clone();      srcConnection.Close();      desConnection.Close();     }  } } private static void OnSqlRowsCopied(  object sender, SqlRowsCopiedEventArgs e){  Console.WriteLine("Copied {0} so far...", e.RowsCopied);}

 2、通過(guò)jdbc  sqlbulkcopy 方式:
只需要在初始化對(duì)象時(shí)指定setCheckConstraints屬性為TRUE,例如:
QLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setCheckConstraints(true);
3、通過(guò)DTS/SSIS方式:
1.    import/export data方式需要先保存SSIS包,然后修改Connection Manager的屬性

SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法

2.    直接使用SQL Server Business Intelligence Development Stuidio新建 SSIS包

SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法

3、通過(guò)BCP方式
1.      先將數(shù)據(jù)BCP出來(lái) BCP ...OUT
BCP testdb.dbo.person Out "bcp_data" /t  /N /U **** /P *** /S "****.sqlserver.rds.aliyuncs.com,3433"
2.      然后將數(shù)據(jù)BCP進(jìn)去 BCP...IN ,但需要指定提示:/h "CHECK_CONSTRAINTS"
BCP testdb.dbo.person In "bcp_data" /C /N /q /k /h "CHECK_CONSTRAINTS" /U *** /P *** /b 500 /S  "***.sqlserver.rds.aliyuncs.com,3433"
 4、通過(guò)bulk insert方式(在RDS不可是實(shí)現(xiàn),因?yàn)椴辉试S上傳文件)

BULK INSERT testdb.dbo.person_inFROM N'D:/trace/bcp.txt'WITH( CHECK_CONSTRAINTS );

四種方式教你在SQL Server中避免觸發(fā)鏡像SUSPEND,希望對(duì)大家的學(xué)習(xí)有所幫助。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MSSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 全黄裸片武则天一级第4季 九色p | 在线免费亚洲 | 91在线视频免费观看 | 欧美日韩大片在线观看 | 极色品影院 | 国产精品亚洲精品日韩已方 | 日本不卡一二三区 | 欧美三级欧美成人高清www | 久久久久久久久久91 | 毛片国产| 精品一区二区三区在线观看视频 | 日韩视频一区二区三区四区 | 亚洲一区二区三区精品在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 精品一区二区免费 | 欧美18videos性处按摩 | xxxeexxx性国产| 亚洲精品wwww| 国产1区视频 | 黄色网址免费入口 | 98色视频 | 国产一区国产二区在线观看 | 激情夜色| 国产一级一片免费播放 | 欧美一级黄视频 | 特级西西444www大精品视频免费看 | 国产精品99久久久久久宅女 | 久久国产综合视频 | 蜜桃传媒视频麻豆第一区免费观看 | 成人在线视频免费观看 | 欧美 国产 亚洲 卡通 综合 | 天天草夜夜爽 | 中国女警察一级毛片视频 | 中文字幕在线观看精品 | 久久美女色视频 | 成人国产精品一区 | 成熟女人特级毛片www免费 | h视频在线观看免费 | 国产亚洲精品久久久久久网站 | 久久久久久亚洲综合影院红桃 | 特黄一级小说 |