成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server優化:SQL Server中Nolock關鍵字的用法

數據庫 SQL Server
SQL Server沒創建一個查詢,都相當于創建一個查詢會話,在不同的查詢分析器里面進行的查詢操作,可能會影響別的查詢會話。

[[428474]]

1、為什么SQL Server有NOLOCK關鍵字?

SQL Server沒創建一個查詢,都相當于創建一個查詢會話,在不同的查詢分析器里面進行的查詢操作,可能會影響別的查詢會話。比較典型的一個例子,如果你正在使用事務執行某一張表的插入或者操作而沒有正確關閉事務的情況下,會造成別的會話針對該數據表的查詢都會處于阻塞的狀態,從而不能完成查詢的操作。這個時候有兩個解決方案,第一種查詢到阻塞的會話id然后殺掉該會話id,第二種可以使用WITH(NOLOCK)關鍵字忽略掉阻塞的會話直接查詢出結果。

簡單來說NOLOCK關鍵字的作用是防止查詢的時候被別的會話阻塞,從而順利完成查詢的操作。

2、SQL Server有NOLOCK有什么問題

使用NOLOCK關鍵字可以避免阻塞造成無法查詢出數據,但使用該關鍵字會有造成數據臟讀的可能。下面舉個例子:

2.1 創建數據表

  1. CREATE TABLE [dbo].[userInfo] ( 
  2.   [id] varchar(32) COLLATE Chinese_PRC_CI_AS  NOT NULL
  3.   [userName] nvarchar(30) COLLATE Chinese_PRC_CI_AS  NULL
  4.   [birthday] [dbo].[birthday]  NULL
  5.   CONSTRAINT [PK__userInfo__3213E83F0505C75D]  
  6.   PRIMARY KEY CLUSTERED ([id]) 
  7. WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF
  8.  IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)   
  9. ON [PRIMARY
  10. )   
  11. ON [PRIMARY
  12. GO 
  13. INSERT INTO [dbo].[userInfo] ([id], [userName], [birthday]) 
  14.  VALUES ('123', N'小明''2005-01-02 12:30:00.000'); 
  15. INSERT INTO [dbo].[userInfo] ([id], [userName], [birthday]) 
  16.  VALUES ('125', N'小孫''2005-01-02 12:30:00.000'); 

2.2 創建時候 會話id 為58 開啟事務 不關閉事務

  1. begin tran  
  2. insert into userInfo (id,userName,birthday) 
  3. values ('127','小張','2015-01-02 12:30:00.000'
  4. --commit tran 

2.3 當前會話(58)還可以查詢出數據

事務還沒有提交 此時數據還在內存中,未保存到數據庫當中。

  1. select * from userInfo 

2.4 新建一個查詢會話 當前新建的id是51

  1. select * from userInfo; 
  2. select * from userInfo WITH(NOLOCK); 

2.5 殺掉58會話進程

  1. declare @spid  int  
  2. Set @spid  = 58 --鎖表進程 
  3. declare @sql varchar(1000) 
  4. set @sql='kill '+cast(@spid  as varchar
  5. exec(@sql) 

3、NOLOCK使用場景

針對那些被頻繁操作(插入、更新、刪除)的表,使用NOLOCK是非常比較適合的,但要考慮到臟讀的情況。

  • 不經常修改的數據表,省掉鎖定表的時間來大大加快查詢速度。
  • 數據量非常大的數據表,可以考慮犧牲數據安全性來提升查詢的效率;
  • 允許出現臟讀現象的業務邏輯,對數據完整性要求比較嚴格的場景不適合,比如電商、銀行等系統。
  • 當使用NoLock時,它允許閱讀那些已經修改但是還沒有結束事務的數據。因此要考慮transaction事務數據的實時完整性時,不建議使用。

4、nolock和with(nolock)的區別

三種查詢寫法

  1. SELECT * FROM A NOLOCK; 
  2. SELECT * FROM A (NOLOCK); 
  3. SELECT * FROM A WITH(NOLOCK); 
  • SQL Server 2005版本中,只支持with(nolock)關鍵字
  • with(nolock)的寫法非常容易再指定索引
  • 跨數據庫服務器查詢語句時不能用with (nolock) 只能用nolock,同數據服務器查詢時 兩者都可以用-- SQL Server 2008版本之后建議采用WITH(NOLOCK)寫法。

5、表解鎖腳本

  1. -- 查詢被鎖表 
  2. select request_session_id   spid 
  3. ,OBJECT_NAME(resource_associated_entity_id) tableName    
  4. from   sys.dm_tran_locks where resource_type='OBJECT'
  5. --參數說明 spid   鎖表進程 ;tableName   被鎖表名 
  6. -- 解鎖語句 需要拿到spid然后殺掉縮表進程 
  7. declare @spid  int  
  8. Set @spid  = 57 --鎖表進程 
  9. declare @sql varchar(1000) 
  10. set @sql='kill '+cast(@spid  as varchar
  11. exec(@sql) 

本文轉載自微信公眾號「IT技術分享社區」,可以通過以下二維碼關注。轉載本文請聯系IT技術分享社區公眾號。

個人博客網站:https://programmerblog.xyz

 

責任編輯:武曉燕 來源: IT技術分享社區
相關推薦

2021-04-18 07:58:22

SQL Server數據庫Apply

2010-07-23 14:32:43

SQL Server

2010-11-12 14:49:28

SQL Server外

2010-07-13 16:48:14

SQL Server

2021-04-21 07:17:16

SQLServer數據庫SQL

2011-02-25 14:42:10

SQLwith關鍵字

2010-07-16 09:06:51

SQL Server數

2010-11-12 10:53:41

sql server表

2010-11-11 11:13:54

SQL Server

2011-08-11 09:12:31

SQL Server nolock

2023-02-02 11:53:44

nolock關鍵詞SQLserver

2010-11-10 15:23:55

SQL SERVER

2011-09-16 13:15:38

SQL Server優化

2009-04-28 13:48:04

SQL Server群集技巧

2011-08-18 09:14:32

SQL Server臟讀

2021-01-04 15:42:37

SQL索引Explain

2010-11-10 14:06:44

SQL Server全

2010-06-28 11:06:04

SQL Server

2010-07-09 14:51:21

SQL Server

2023-11-10 09:29:30

MySQLExplain
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区一区三区 | 狠狠av| 天天操伊人 | 欧美综合在线视频 | 国产精品国产a | 精品毛片 | 日韩综合一区 | 伊人狼人影院 | 亚洲va国产日韩欧美精品色婷婷 | 国产一级电影网 | 九九热精 | 中文字幕专区 | 国产精品久久久久久一级毛片 | 精品日本久久久久久久久久 | 日日夜夜草 | 日本精品网站 | 久久久久久久夜 | jizjizjiz中国护士18| 国产真实乱对白精彩久久小说 | 国产午夜在线 | 久久久久国产一区二区三区 | 久久久久亚洲 | 不卡一区| 都市激情亚洲 | 久久久精品一区二区三区 | 久久成人一区 | 久久精品视频免费观看 | 国产精品久久久久久久久免费樱桃 | 美女二区 | 91精品国产91久久久久青草 | 欧美日韩在线观看视频 | 91偷拍精品一区二区三区 | 日韩高清av| 亚洲精品福利视频 | 99视频在线 | 亚洲欧洲日韩精品 中文字幕 | 亚洲福利在线观看 | 97avcc| 国产精品日韩欧美一区二区三区 | 国产伦精品一区二区三区高清 | 欧美视频第二页 |