y*****n 发帖数: 11251 | 1 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server
deadlock. Exception
Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128)
was deadlocked on lock resources with another process and has been chosen as
the deadlock victim. Rerun the transaction.
at System.Data.SqlClient.SqlConnection.OnError(SqlException
觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条.
我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉. |
B*****g 发帖数: 34098 | 2 what is "windows service"?
)
as
【在 y*****n 的大作中提到】 : 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server : deadlock. Exception : Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128) : was deadlocked on lock resources with another process and has been chosen as : the deadlock victim. Rerun the transaction. : at System.Data.SqlClient.SqlConnection.OnError(SqlException : 觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条. : 我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉.
|
y*****n 发帖数: 11251 | 3 这个不重要,就算是个sql client吧.
【在 B*****g 的大作中提到】 : what is "windows service"? : : ) : as
|
i****a 发帖数: 36252 | 4 keep it at 2 threads and you should be ok. above 2 then you'll get deadlocks
but depends on what you are doing, it may not be a big deal if you can just
insert records again of the deadlock victims
)
as
【在 y*****n 的大作中提到】 : 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server : deadlock. Exception : Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128) : was deadlocked on lock resources with another process and has been chosen as : the deadlock victim. Rerun the transaction. : at System.Data.SqlClient.SqlConnection.OnError(SqlException : 觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条. : 我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉.
|
g***l 发帖数: 18555 | 5 一般INSERT时间太长就容易DEADLOCK,一INSERT,就开始TABLE BLOCKING,如果
TRANSACTION太长,另外的INSERT就要等很久.注意光SELECT的话就WITH (NOLOCK)
DIRTY READ好了 |
y*****n 发帖数: 11251 | 6 insert加了row lock了也不行。是不是insert都是lock整个table啊?
select with nolock也有deadlock。
【在 g***l 的大作中提到】 : 一般INSERT时间太长就容易DEADLOCK,一INSERT,就开始TABLE BLOCKING,如果 : TRANSACTION太长,另外的INSERT就要等很久.注意光SELECT的话就WITH (NOLOCK) : DIRTY READ好了
|
y*****n 发帖数: 11251 | 7 要求至少20个thread。看来没法用2个了。
deadlocks
just
【在 i****a 的大作中提到】 : keep it at 2 threads and you should be ok. above 2 then you'll get deadlocks : but depends on what you are doing, it may not be a big deal if you can just : insert records again of the deadlock victims : : ) : as
|
g***l 发帖数: 18555 | 8 要看你的INSERT时间多长了,如果你INSERT大量数据,LOCK时间太长就会ESCALATE到
TABLE LEVEL |
y*****n 发帖数: 11251 | 9 这个时间太长是怎么算的? 怎么才能看到每个transaction的时间?
【在 g***l 的大作中提到】 : 要看你的INSERT时间多长了,如果你INSERT大量数据,LOCK时间太长就会ESCALATE到 : TABLE LEVEL
|
g***l 发帖数: 18555 | 10 SP_WHO2?
【在 y*****n 的大作中提到】 : 这个时间太长是怎么算的? 怎么才能看到每个transaction的时间?
|
|
|
a9 发帖数: 21638 | 11 你要求的线程再多,数据库处理不过来也没用啊。
【在 y*****n 的大作中提到】 : 要求至少20个thread。看来没法用2个了。 : : deadlocks : just
|
y*****n 发帖数: 11251 | 12 这不是我要求的。客户非要设成20个。
【在 a9 的大作中提到】 : 你要求的线程再多,数据库处理不过来也没用啊。
|
z***y 发帖数: 7151 | 13 什么公司? 愿不愿意招短期的DBA啊?
跟我联系吧。
)
as
【在 y*****n 的大作中提到】 : 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server : deadlock. Exception : Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128) : was deadlocked on lock resources with another process and has been chosen as : the deadlock victim. Rerun the transaction. : at System.Data.SqlClient.SqlConnection.OnError(SqlException : 觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条. : 我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉.
|
B*****g 发帖数: 34098 | 14 把我也带上吧
【在 z***y 的大作中提到】 : 什么公司? 愿不愿意招短期的DBA啊? : 跟我联系吧。 : : ) : as
|
y*****n 发帖数: 11251 | 15 NCR, prefer atlanta,GA area. Senior SQL dev/DBA position, mostly doing
development and support to retail business at store level. Experience with
DB system design, query optimization, and load balancing.
|
z***y 发帖数: 7151 | 16 很多情况造成Deadlock
你可以打开trace flag 1204 , 1222
然后可以在log里看到具体的情况。
如果是sql 2005+, 你可以试验一下snapshot isolation。
)
as
【在 y*****n 的大作中提到】 : 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server : deadlock. Exception : Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128) : was deadlocked on lock resources with another process and has been chosen as : the deadlock victim. Rerun the transaction. : at System.Data.SqlClient.SqlConnection.OnError(SqlException : 觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条. : 我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉.
|
z***y 发帖数: 7151 | 17 你把表定义和index 贴出来, 然后 打开trace, 把log贴出来, 我可以给你看看。
)
as
【在 y*****n 的大作中提到】 : 做了一个windows service,多线程的对一个table 做insert. 结果出现sql server : deadlock. Exception : Exception: System.Data.SqlClient.SqlException: Transaction (Process ID 128) : was deadlocked on lock resources with another process and has been chosen as : the deadlock victim. Rerun the transaction. : at System.Data.SqlClient.SqlConnection.OnError(SqlException : 觉得简单insert应该不会lock太多index太久吧? 每次insert 1000条. : 我对SQL server不熟, DBA上个月辞职不干了.大家多帮帮忙吧,我好能早点回家睡觉.
|
B*****g 发帖数: 34098 | 18 你这个太敬业了
128
chosen
觉.
【在 z***y 的大作中提到】 : 你把表定义和index 贴出来, 然后 打开trace, 把log贴出来, 我可以给你看看。 : : ) : as
|
y*****n 发帖数: 11251 | 19 问了下,production系统不让搞trace,看来只能自己想办法模拟了。
【在 z***y 的大作中提到】 : 你把表定义和index 贴出来, 然后 打开trace, 把log贴出来, 我可以给你看看。 : : ) : as
|
gy 发帖数: 620 | 20 No need 1204 in SQL2005 and up
【在 z***y 的大作中提到】 : 很多情况造成Deadlock : 你可以打开trace flag 1204 , 1222 : 然后可以在log里看到具体的情况。 : 如果是sql 2005+, 你可以试验一下snapshot isolation。 : : ) : as
|
gy 发帖数: 620 | |