涉及公共基表的两个SQL语句使用UNION进行组合。在SQL Server 2008中选择查看和联合以及死锁
此查询由业务对象生成和报告工作了一段时间。
最近,我们开始看到以下错误,当运行报告对生产Datamart的
消息1205,级别13,状态2,行1个
事务(进程ID 121)已被死锁的线程|通信缓冲区资源与另一个进程并被选为死锁受害者。重新运行交易。
我复制了查询,并具有行大约相同数量的PROD发展运行它,它是在那里工作,但是当在生产中运行它给了我同样的错误如上。
ALTER VIEW [dbo].[TESTDetails_CASSETS]
AS
SELECT
allocation.SeatNumber,LDMCateg.LookupDescription as SeatCategory,
Country.CountryName AS Country,
CityMaster.Cityname AS City,
FacilityMaster.FacilityDescription AS Facility,
BuildingMaster.BuildingDescription AS Building,
FloorMaster.FloorDescription AS Floor,
WingMaster.WingDescription AS Wing,
BayMaster.BayDescription AS Bay,
allocation.AssociateID, allocation.AssociateName,
allocation.PoolID AS ProjectID,
allocation.PoolName AS ProjectName,
allocation.SeatAllocationStartDate,
allocation.SeatAllocationEndDate,
allocation.ShiftStartTime,
allocation.ShiftEndTime,
AllocAccount.PoolID as AccountID,
AllocAccount.PoolName as AccountName,
AllocPRactice.PoolID AS PracticeID,
data.SeatRequestTypeDesc AS SeatAllocationType,
dbo.FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatAllocation(NOLOCK) AS allocation
INNER JOIN
dbo.SeatAllocation(NOLOCK) AllocPRactice on allocation.SeatNumber = AllocPRactice.SeatNumber
INNER JOIN
dbo.SeatAllocation(NOLOCK) AllocAccount on allocation.SeatNumber = AllocAccount.SeatNumber
INNER JOIN
dbo.SeatRequestType(NOLOCK) AS data ON allocation.SeatAllocationTypeID = data.SeatRequestTypeID
INNER JOIN
dbo.SeatMaster(NOLOCK) AS SeatMr ON SeatMr.SeatNumber = allocation.SeatNumber
INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID
INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID
LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID
LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID
LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID
LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID
LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID
INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID
INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID
INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID
INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(allocation.AssociateID IS NOT NULL)
AND (allocation.SeatNumber <> '')
--AND (dbo.CityMaster.CityID IN (10, 4, 1))
AND AllocPRactice.PoolType = 96
--AND AllocAccount.PoolType = 97
AND AllocAccount.PoolType = 99
AND allocation.SeatAllocationTypeID = 1
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
UNION
SELECT
allocation.SeatNumber,
LDMCateg.LookupDescription as SeatCategory,
Country.CountryName AS Country,
CityMaster.Cityname AS City,
FacilityMaster.FacilityDescription AS Facility,
BuildingMaster.BuildingDescription AS Building,
FloorMaster.FloorDescription AS Floor,
WingMaster.WingDescription AS Wing,
BayMaster.BayDescription AS Bay,
allocation.AssociateID,
allocation.AssociateName,
allocation.PoolID AS ProjectID,
allocation.PoolName AS ProjectName,
allocation.SeatAllocationStartDate,
allocation.SeatAllocationEndDate,
allocation.ShiftStartTime,
allocation.ShiftEndTime,
SeatMr.AccountID as AccountID,
SeatMr.AccountName as AccountName,
SeatMr.BusinessUnitID AS PracticeID,
data.SeatRequestTypeDesc AS SeatAllocationType,
dbo.FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatAllocation(NOLOCK) AS allocation INNER JOIN
dbo.SeatRequestType(NOLOCK) AS data ON allocation.SeatAllocationTypeID = data.SeatRequestTypeID INNER JOIN
dbo.SeatMaster(NOLOCK) AS SeatMr ON SeatMr.SeatNumber = allocation.SeatNumber INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(allocation.AssociateID IS NOT NULL)
AND (allocation.SeatNumber <> '')
--AND (dbo.CityMaster.CityID IN (10, 4, 1))
AND allocation.SeatAllocationTypeID = 2
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
UNION
SELECT
SeatMr.SeatNumber,
LDMCateg.LookupDescription as SeatCategory,
Country.CountryName AS Country,
CityMaster.Cityname AS City,
FacilityMaster.FacilityDescription AS Facility,
BuildingMaster.BuildingDescription AS Building,
FloorMaster.FloorDescription AS Floor,
WingMaster.WingDescription AS Wing,
BayMaster.BayDescription AS Bay,
NULL AS AssociateID,
NULL AS AssociateName,
NULL AS ProjectID,
NULL AS ProjectName,
NULL AS SeatAllocationStartDate,
NULL AS SeatAllocationEndDate,
NULL AS ShiftStartTime,
NULL AS ShiftEndTime,
NULL AS AccountID,
NULL AS AccountName,
NULL AS PracticeID,
NULL AS SeatAllocationType,
FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatMaster(NOLOCK) AS SeatMr INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(SeatMr.SeatNumber <> '')
--AND (dbo.CityMaster.CityID IN (10, 4, 1))
AND SeatMr.BusinessUnitID is NULL and SeatMr.AccountID is NULL
AND SeatMr.SeatNumber NOT IN (SELECT SeatNumber FROM SeatAllocation WHERE SeatAllocationTypeID = 2)
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
UNION
SELECT
SeatMr.SeatNumber,
LDMCateg.LookupDescription as SeatCategory,
Country.CountryName AS Country,
CityMaster.Cityname AS City,
FacilityMaster.FacilityDescription AS Facility,
BuildingMaster.BuildingDescription AS Building,
FloorMaster.FloorDescription AS Floor,
WingMaster.WingDescription AS Wing,
BayMaster.BayDescription AS Bay,
NULL AS AssociateID,
NULL AS AssociateName,
NULL AS ProjectID,
NULL AS ProjectName,
NULL AS SeatAllocationStartDate,
NULL AS SeatAllocationEndDate,
NULL AS ShiftStartTime,
NULL AS ShiftEndTime,
NULL AS AccountID,
NULL AS AccountName,
Allocation.PoolID AS PracticeID,
NULL AS SeatAllocationType,
FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatMaster(NOLOCK) AS SeatMr INNER JOIN
dbo.SeatAllocation(NOLOCK) as Allocation on SeatMr.SeatNumber = Allocation.SeatNumber INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(SeatMr.SeatNumber <> '')
--AND (dbo.CityMaster.CityID IN (10, 4, 1))
AND SeatMr.BusinessUnitID is Not NULL
and SeatMr.AccountID is NULL
and Allocation.PoolType = 96
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
UNION
SELECT
SeatMr.SeatNumber,
LDMCateg.LookupDescription as SeatCategory,
dbo.Country.CountryName AS Country,
dbo.CityMaster.Cityname AS City,
dbo.FacilityMaster.FacilityDescription AS Facility,
dbo.BuildingMaster.BuildingDescription AS Building,
dbo.FloorMaster.FloorDescription AS Floor,
dbo.WingMaster.WingDescription AS Wing,
dbo.BayMaster.BayDescription AS Bay,
NULL AS AssociateID,
NULL AS AssociateName,
NULL AS ProjectID,
NULL AS ProjectName,
NULL AS SeatAllocationStartDate,
NULL AS SeatAllocationEndDate,
NULL AS ShiftStartTime,
NULL AS ShiftEndTime,
Allocation.PoolID AS AccountID,
Allocation.PoolName AS AccountName,
AllocPractice.PoolID AS PracticeID,
NULL AS SeatAllocationType,
FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatMaster(NOLOCK) AS SeatMr INNER JOIN
dbo.SeatAllocation(NOLOCK) as Allocation on SeatMr.SeatNumber = Allocation.SeatNumber INNER JOIN
dbo.SeatAllocation AllocPractice on allocation.SeatNumber = AllocPRactice.SeatNumber INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(SeatMr.SeatNumber <> '')
--AND (dbo.CityMaster.CityID IN (10, 4, 1))
AND SeatMr.BusinessUnitID IS NOT NULL
and SeatMr.AccountID IS NOT NULL
--and Allocation.PoolType = 97
and Allocation.PoolType = 99
AND AllocPractice.PoolType = 96
AND SeatMr.SeatNumber NOT IN
(
SELECT
alloc.SeatNumber
FROM
dbo.SeatAllocation AS alloc INNER JOIN
dbo.SeatRequestType AS data ON alloc.SeatAllocationTypeID = data.SeatRequestTypeID INNER JOIN
dbo.SeatMaster AS SeatMr ON SeatMr.SeatNumber = alloc.SeatNumber
WHERE
alloc.PoolType = 98
)
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
UNION
SELECT
ProjectAllocation.SeatNumber,
LDMCateg.LookupDescription as SeatCategory,
Country.CountryName AS Country,
CityMaster.Cityname AS City,
FacilityMaster.FacilityDescription AS Facility,
BuildingMaster.BuildingDescription AS Building,
FloorMaster.FloorDescription AS Floor,
WingMaster.WingDescription AS Wing,
BayMaster.BayDescription AS Bay,
ProjectAllocation.AssociateID,
ProjectAllocation.AssociateName,
ProjectAllocation.PoolID AS ProjectID,
ProjectAllocation.PoolName AS ProjectName,
ProjectAllocation.SeatAllocationStartDate,
ProjectAllocation.SeatAllocationEndDate,
ProjectAllocation.ShiftStartTime,
ProjectAllocation.ShiftEndTime,
AccountAllocation.PoolID AccountID,
AccountAllocation.PoolName AccountName,
PracticeAllocation.PoolID PracticeID,
data.SeatRequestTypeDesc AS SeatAllocationType,
FloorMaster.HCMLocationCode,
LDMNetwork.LookupDescription as Network,
LDMSEZ.LookupDescription as FacilityType,
LDMSECLUDED.LookupDescription as IsSeatSecluded
FROM
dbo.SeatAllocation(NOLOCK) AS ProjectAllocation INNER JOIN
dbo.SeatMaster(NOLOCK) AS SeatMr ON SeatMr.SeatNumber = ProjectAllocation.SeatNumber INNER JOIN
dbo.SeatAllocation(NOLOCK) AS AccountAllocation ON AccountAllocation.SeatNumber = SeatMr.SeatNumber INNER JOIN
dbo.SeatAllocation(NOLOCK) AS PracticeAllocation ON PracticeAllocation.SeatNumber = SeatMr.SeatNumber INNER JOIN
dbo.SeatRequestType(NOLOCK) AS data ON ProjectAllocation.SeatAllocationTypeID = data.SeatRequestTypeID INNER JOIN
dbo.Country(NOLOCK) ON dbo.Country.CountryID = SeatMr.CountryID INNER JOIN
dbo.CityMaster(NOLOCK) ON dbo.CityMaster.CityID = SeatMr.CityID LEFT OUTER JOIN
dbo.FacilityMaster(NOLOCK) ON dbo.FacilityMaster.FacilityID = SeatMr.FacilityID LEFT OUTER JOIN
dbo.BuildingMaster(NOLOCK) ON dbo.BuildingMaster.BuildingID = SeatMr.BuildingID LEFT OUTER JOIN
dbo.FloorMaster(NOLOCK) ON dbo.FloorMaster.FloorID = SeatMr.FloorID LEFT OUTER JOIN
dbo.WingMaster(NOLOCK) ON SeatMr.WingId = dbo.WingMaster.WingID LEFT OUTER JOIN
dbo.BayMaster(NOLOCK) ON SeatMr.BayID = dbo.BayMaster.BayID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMCateg on SeatMr.SeatCategoryID = LDMCateg.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMNetwork on SeatMr.NetworkType = LDMNetwork.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSEZ on FacilityMaster.FacilityType = LDMSEZ.LookupTypeID INNER JOIN
dbo.LookupDataMaster(NOLOCK) LDMSECLUDED on SeatMr.IsSecluded = LDMSECLUDED.LookupTypeID
WHERE
(ProjectAllocation.AssociateID is NULL)
AND (ProjectAllocation.SeatNumber <> '')
AND SeatMr.BusinessUnitID IS NOT NULL
AND SeatMr.AccountID IS NOT NULL
AND ProjectAllocation.PoolType = 98
--AND AccountAllocation.PoolType = 97
AND AccountAllocation.PoolType = 99
AND PracticeAllocation.PoolType = 96
AND LDMCateg.LookupCategoryMasterID = 13
AND LDMNetwork.LookupCategoryMasterID = 8
AND LDMSEZ.LookupCategoryMasterID = 12
AND LDMSECLUDED.LookupCategoryMasterID = 6
GO
有什么想法?
感谢
添加查询提示:与(NOLOCK)你不认为当查询运行将得到更新的数据? – 2014-01-23 07:10:04
你有索引吗?也许你的查询正在执行锁定整个表的表扫描。 –
@drewlander我已添加NOLOCK的问题仍然存在某种程度dono为什么! –