[MSSQL] SQL Server 的一些眉眉角角 part.1
栏目: 数据库 · SQL Server · 发布时间: 7年前
内容简介:目前工作 Database 方面主要都在使用 SQL Server,寫了近兩年的 Stored Procedure 也遇到了許多的問題,在這裡簡單筆記一下。**
目前工作 Database 方面主要都在使用 SQL Server,寫了近兩年的 Stored Procedure 也遇到了許多的問題,在這裡簡單筆記一下。
- 暫存資料表小知識
* #
或 ##
建立的暫存資料表,可從 tempdb.暫存資料表
找到。
* #
建立的暫存資料表只有該連線可以取用; ##
則是全部連線均可使用。
* 連線結束時皆會自動刪除,若程式中有 Connection Pool 來管理連線則不會立刻刪除。
* 父層 Stored Procedure 建立的暫存資料表子層也可以使用;子層 Stored Procedure 建立的暫存資料表父層也可以使用
-
若開啟交易 (Transaction) 但無提交異動 (Commit) 會發生資料表鎖死 (Table Lock) 的問題,切記要提交異動 (Commit)。
-
使用主鍵來
UPDATE為資料鎖 (Row Lock),若使用其他條件則有可能會升級成資料頁鎖(Page Lock) 或資料表鎖 (Table Lock)。 -
交易 (Transaction) 具有復原機制 (RollBack),但實際上資料表中的資料已經被異動且鎖定的關係所以無法取得,可利用
WITH(NOLOCK)來取得被鎖定的髒資料。 -
未開啟交易時使用
CURSOR或UPDATE FROM若超過五千筆時可能會造成鎖定與死結,可使用ROW_NUMBER()排序資料塞入暫存資料表並使用WHILE來一筆一筆更新資料避開鎖定,速度雖慢但能減少鎖死。
SET NOCOUNT ON DECLARE @RowNum INT, @RowCount INT, @Temp_Id INT SELECT ROW_NUMBER() OVER(ORDER BY [Id]) AS RowNum, [Id], [Name] INTO #Temp FROM [exfast].[dbo].[TableA] WITH(NOLOCK) SELECT @RowNum = 1, @RowCount = (SELECT SUM(1) FROM #Temp) WHILE(@RowNum <= @RowCount) BEGIN SELECT @Temp_Id = [Id] FROM #Temp WHERE RowNum = @RowNum UPDATE [exfast].[dbo].[TableA] SET [Name] = 'dddd' WHERE [Id] = @Temp_Id SET @RowNum = @RowNum + 1 END DROP TABLE #Temp
-
高負載情況下使用
UPDATE OUTPUT的方法來取得資料更新前後的狀態,可減少SELECT次數提高效率。
DECLARE @TempA TABLE ( [INSERTED_Id] INT, [INSERTED_Name] NVARCHAR(32), [DELETED_Id] INT, [DELETED_Name] NVARCHAR(32) ) UPDATE [exfast.Helper].[dbo].[TableA] SET [Name] = 'qqqq' OUTPUT INSERTED.[Id], INSERTED.[Name], DELETED.[Id], DELETED.[Name] INTO @TempA SELECT * FROM @TempA
-
高負載情況下可能會將隔離層級拉高到 Serializable
,這時使用交易會發生相同資料表
SELECTUPDATE中的 Shared Lock 與 Exclusive Lock 撞車造成 DeadLock ,可在SELECT加上WITH(UPDLOCK)來減少此問題。
-- 故意指定隔離層級模擬撞車的情況 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN SELECT * FROM [exfast.Helper].[dbo].[TableA] WAITFOR DELAY '00:00:10' UPDATE [exfast.Helper].[dbo].[TableA] SET [Name] = 'cccc' WHERE [Id] = 2 ROLLBACK
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
R语言实战(第2版)
[美] Robert I. Kabacoff / 王小宁、刘撷芯、黄俊文等 / 人民邮电出版社 / 2016-5 / 99.00元
本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。一起来看看 《R语言实战(第2版)》 这本书的介绍吧!