PDA

View Full Version : giúp mình khắc phục lỗi không thể select trong khi đang update table



mailsaveword
22-08-2011, 00:19
Chào các bạn hiện mình có 3 table thường xuyên update nội dung dao động trong khoảng 4 triệu row cứ khoảng 2p update một lần
trong khi update mình gần như không thể select được mạc dù mình đã set nolock cho table khi update
Đây là code mình sử dụng
UPDATE [g571].[dbo].[statistics] SET [packet] = [skip]/32767 FROM [g571].[dbo].[statistics] WITH (NOLOCK) WHERE [pid] <=125000000 AND [pid] >=121000000

Mình sử dụng select lấy ra 100 row lúc table không sử dụng update mất khoảng 0.3 giây
còn khi table đang update mất tận 28 giây (gần như là chời table update song)

Mình muốn hỏi các bạn là có cách nào tách biệt giưa update và select ra không vậy

Nghĩa là table update thì cứ update ta select cứ select :D

Bạn nào biết chỉ mình thank

xbacala
25-08-2011, 03:34
SQL Sever không tách biệt đc SELECT và UPDATE bạn à. Theo default thì khi SQL update 1 cái gì thì nó lock cái đó chó đến khi transaction xong để tránh dirty read.


Bạn có thể dùng NOLOCK hay SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED để read data đang bị lock. Nhưng chú ý là sẽ phát sinh dirty read.

Ví dụ:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM Table1

Hay:
SELECT * FROM Table1 WITH (NOLOCK)



NOLOCK và UNCOMMITTED không có tác dụng cho UPDATE.

mailsaveword
28-08-2011, 13:46
:D Cảm ơn bạn rất nhiều